1. 環境搭建
1.1 Go環境搭建
1.1.1 下載
下載地址:
http://golangtc.com/download
1.1.2 解壓
tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local
1.1.3 配置環境變量
vim /etc/profile
export GOROOT=/usr/local/go # 安裝路徑
export GOPATH=$HOME/godir # 工作路徑
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin # 命令搜索路徑
source /etc/profile
1.1.4 驗證
go version
1.2 Git環境搭建
1.2.1 下載
wget https://github.com/git/git/archive/v2.14.1.zip
Ubuntu:
可直接sudo apt-get install git
1.2.2 安裝依賴
Centos:
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
Ubuntu:
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
1.2.3 解壓
unzip v2.14.1.zip
1.2.4 編譯
先進入git-2.14.1文件夾, 編譯,安裝
cd git-2.14.1
make prefix=/usr/local all
make prefix=/usr/local install
1.2.5 驗證
Centos:
git –version
Ubuntu:
git --version
1.3 ZK環境搭建
1.3.1 上傳
rz zookeeper-3.4.8.tar.gz
1.3.2 解壓
tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/
1.3.3 改名
cd /usr/zookeeper-3.4.8/conf
mv zoo_sample.cfg zoo.cfg
1.3.4 修改配置
注:提前創建好目錄/usr/zk/data,/usr/zk/log
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zk/data
dataLogDir=/usr/zk/log
clientPort=2181
server.1=item01:2287:3387
server.2=item02:2287:3387
server.3=item03:2287:3387
說明:server.A=B:C:D
A 是一個數字,表示這個是第幾號服務器;
B 是這個服務器的 ip 地址;
C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;
D 表示的是萬一集羣中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。
2. Codis集羣搭建
2.1 下載Codis源碼
mkdir -p $GOPATH/src/github.com/CodisLabs
cd $GOPATH/src/github.com/CodisLabs
git clone https://github.com/CodisLabs/codis.git -b release3.2
2.2 編譯 Codis 源代碼
cd $GOPATH/src/github.com/CodisLabs/codis
Centos:
yum install autoconf automake libtool -y // 這行非常重要,官網沒有給出這個,不然安裝的時候會報錯
Ubuntu:
apt-get install autoconf
執行 make 得到:
2.3 在Dockerfile所在目錄下構建image
docker build -t codis-image .
注:末尾一個空格 + 一個點;網絡不好會比較久,耐心等一下,喝杯茶
構建完成後如圖:
2.4 修改源碼config下的配置文件
2.4.1 dashboard.toml
需要修改coordinator_addr爲宿主機的zookeeper的ip與端口
需要修改produce_name
2.4.2 proxy.toml
需要修改product_name,與dashboard.toml中的一致
2.4.3 修改啓動腳本
官方啓動腳本在源碼script文件夾下,如圖:
2.4.3.1 修改hostip
官方的例子中通過下面的代碼獲取宿主機的ip地址:
hostip=`ifconfig eth0 | grep "inet " | awk -F " " '{print $2}'`
但是有的宿主機沒有eth0網卡,可以是別的名字,所以需要先通過ifconfig看看本機的網卡名稱,然後手動執行上面的命令,看能不能正確返回ip地址。
如果還有問題,建議最簡單的方式直接改爲hostip=‘宿主機ip’
2.4.3.2 增加–privilieged選項(可選)
如果默認是root用戶,需要修改docker run 命令,增加--privilieged
選項,不然容器無法使用共享卷中的配置文件,會報”權限錯誤“
2.4.3.3 聲明slave 的ip與端口
redis進程都部署在宿主機中時可以實現failover,但是當將各個實例部署到docker中時,發現啓動之後sentinel的conf文件中識別到的slave地址並非宿主機地址,而是容器虛擬ip地址,導致無法正常通信.
其實就是docker使用了地址轉換,也就是docker容器內的地址+端口映射爲宿主機地址+端口
會導致sentinel的自動發現機制失效,無法與slave通信。
可通過設定--slave-announce-ip
和--slave-announce-port
來指定slave的ip和端口來解決這問題
2.4.3.4 修改啓動腳本
2.5 啓動組件
2.5.1 啓動dashboard
./docker.sh dashboard
2.5.2 啓動proxy
./docker.sh proxy
2.5.3 啓動codis-server
./docker.sh server1
./docker.sh server2
./docker.sh server3
./docker.sh server4
2.5.4 啓動fe
./docker.sh fe
2.5.5 停止組件(可選)
./docker.sh cleanup
2.5.6 查看是否已啓動
2.6 調整codis-server參數
2.6.1 創建Shell腳本
在源碼的bin目錄下創建腳本
touch change_codis_server.sh
2.6.2 編輯Shell腳本
2.6.3 執行腳本
./change_codis_server.sh 192.168.92.129 26379
2.7 redis-sentinel
2.7.1 拷貝程序
cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/src/redis-sentinel /usr/local/codis/bin/
2.7.2 拷貝配置
cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/sentinel.conf /usr/local/codis/conf/
2.7.3 修改配置
以下爲需修改的配置,其他配置走默認
bind 0.0.0.0
protected-mode no
port 26379
dir /usr/local/codis/data
logfile "/usr/local/codis/log/sentinel_26379.log"
2.7.4 啓動程序
cd /usr/local/codis/bin/
nohup ./redis-sentinel ../conf/sentinel.conf &
2.7.5 查看
netstat –ntlp
3. 組件整合
3.1 打開監控界面
打開瀏覽器,輸入http://192.168.92.137:18090便可看到codis集羣的監控界面。如下圖所示:
3.2 加入codis-proxy
3.3 加入codis-server
3.4 分配slot到group
3.5 sentinels
其他兩臺按照上述流程部署,添加至集羣即可
至此,codis集羣部署完成