從頭搭建codis3.0叢集
配置hosts對映關係
vi /etc/hosts
192.168.92.137 item01
192.168.92.138 item02
192.168.92.139 item03
配置hostname
set-hostname item01
另外兩臺臺機器的hostname分別設定為item02,item03
reboot -f
配置3臺CentOS為ssh免密碼互相通訊
首先在三臺機器上配置對本機的ssh免密碼登入
ssh-keygen -t rsa
生成本機的公鑰,過程中不斷敲回車即可,ssh-keygen命令預設會將公鑰放在/root/.ssh目錄下
cd /root/.ssh
cp id_rsa.pub authorized_keys
將公鑰複製為authorized_keys檔案,此時使用ssh連線本機就不需要輸入密碼了
測試:
ssh item01
接著配置三臺機器互相之間的ssh免密碼登入
使用ssh-copy-id -i hostname(其他機子)命令將本機的公鑰拷貝到指定機器的authorized_keys檔案中
測試:
ssh item02
配置jdk環境
- yum install lrzsz -y
- rz jdk-8u144-linux-x64.tar.gz #上傳jdk8包
- cd /usr
- mkdir java
- 解壓
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/java/ - 編輯檔案:vim /etc/profile
在檔案尾部新增:
JAVA_HOME=/usr/java/jdk1.8.0_144/ export PATH=$JAVA_HOME/bin:$PATH
重新載入一下檔案:
source /etc/profile
檢視jdk版本,驗證是否配置成功:
java -version
zooKeeper叢集搭建
上傳
rz zookeeper-3.4.8.tar.gz
解壓
tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/
改名
cd /usr/zookeeper-3.4.8/conf
mv zoo_sample.cfg zoo.cfg
編輯
注:提前建立好目錄/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,而這個埠就是用來執行選舉時伺服器相互通訊的埠。
ssh複製配置好的zookeeper到另外兩臺機器
scp -r zookeeper-3.4.8/ [email protected]:/usr
scp -r zookeeper-3.4.8/ [email protected]:/usr
配置id
注:在每個zk server配置檔案的dataDir所對應的目錄下,必須建立一個名為myid的檔案,其中的內容必須與zoo.cfg中server.x 中的x相同
touch /usr/zk/data/myid
item01的myid 中的內容為1,對應server.1中的1
item02的myid 中的內容為2,對應server.2中的2
item03的myid 中的內容為3,對應server.3中的3
啟動驗證
/usr/zookeeper-3.4.8/bin/zkServer.sh start #啟動
/usr/zookeeper-3.4.8/bin/zkServer.sh status #檢視狀態
/usr/zookeeper-3.4.8/bin/zkCli.sh -server item01:2181 #客戶端連線測試
配置go環境
解壓
tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local
配置環境變數
vim /etc/profile
export GOROOT=/usr/local/go # 安裝路徑
export GOPATH=$HOME/godir # 工作路徑
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin # 命令搜尋路徑
驗證
go version
git安裝
下載git
wget https://github.com/git/git/archive/v2.14.1.zip
安裝依賴
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
解壓git
unzip v2.14.1.zip
將git安裝到/usr/local/git上
先進入git-2.14.1資料夾, 編譯,安裝
cd git-2.14.1
make prefix=/usr/local all
make prefix=/usr/local install
驗證
git --version
codis叢集搭建
下載 Codis 原始碼
mkdir -p $GOPATH/src/github.com/CodisLabs
git clone https://github.com/CodisLabs/codis.git -b release3.2
編譯 Codis 原始碼
cd $GOPATH/src/github.com/CodisLabs/codis
yum install autoconf automake libtool -y // 這行非常重要,官網沒有給出這個,不然安裝的時候會報錯
make
ls bin/
total 69124
drwxr-xr-x 4 codis codis 4096 Jan 4 14:55 assets
-rwxr-xr-x 1 codis codis 17600752 Jan 4 14:55 codis-admin
-rwxr-xr-x 1 codis codis 18416320 Jan 4 14:55 codis-dashboard
-rwxr-xr-x 1 codis codis 9498040 Jan 4 14:55 codis-fe
-rwxr-xr-x 1 codis codis 11057280 Jan 4 14:55 codis-proxy
-rwxr-xr-x 1 codis codis 4234432 Jan 4 14:55 codis-server
-rw-r--r-- 1 codis codis 148 Jan 4 14:55 version
... ...
拷貝codis程式和配置
建立資料夾
mkdir -p /usr/local/codis/bin
拷貝程式和配置
cp -rf $GOPATH/src/github.com/CodisLabs/codis/bin/* /usr/local/codis/bin/ cp -rf $GOPATH/src/github.com/CodisLabs/codis/config/* /usr/local/codis/conf/
codis-server
建立資料夾
cd /usr/local/codis/conf/
複製配置
cp redis.conf redis-6379.conf cp redis.conf redis-6380.conf
修改配置
以下為需修改的配置,其他配置走預設
pidfile /usr/local/codis/proc/redis-6379.pid # 程序ID檔案路徑 port 6379 # 繫結埠 logfile "/usr/local/codis/log/redis-6379.log" # 日誌檔案路徑 dbfilename dump-6379.rdb # dump檔案 dir /usr/local/codis/data/redis_data_6379 # dump路徑 masterauth "123456" # Master密碼(從主同步密碼) requirepass "123456" # 鑑權密碼(客戶端連線密碼) bind 0.0.0.0 # 繫結ip
建立資料夾
mkdir /usr/local/codis/proc mkdir /usr/local/codis/log mkdir /usr/local/codis/data/redis_data_6379 mkdir /usr/local/codis/data/redis_data_6380
啟動程式
cd /usr/local/codis/bin/ ./codis-server ../conf/redis-6379.conf & #啟動主程式 ./codis-server ../conf/redis-6380.conf & #啟動從程式
檢視
netstat -ntlp
codis-dashboard
生成配置
./codis-dashboard --default-conifg | tee ../conf/dashboard.conf
修改配置
vim ../conf/dashboard.conf coordinator_name = "zookeeper" # 外部儲存型別 coordinator_addr = "192.168.92.137:2181,192.168.92.138:2181,192.168.92.139:2181" # 外部儲存IP列表 product_name = "kid" # 專案名稱 product_auth = "123456" # 叢集密碼(注意:需要與redis配置中的requirepass保持一致) admin_addr = "0.0.0.0:18080" # RESTful API 埠
啟動程式
nohup ./codis-dashboard --ncpu=24 --config=/usr/local/codis/conf/dashboard.conf --log=/usr/local/codis/log/dashboard.log --log-level=WARN &
檢視
netstat -ntlp
- 停止程式(可選)
dashboard不要非正常停止,例如:kill -9 xxx,不然下次啟動會報錯,會報檔案已存在,需要刪掉之前的product資訊
./codis-admin --dashboard=192.168.92.137:18080 --shutdown
codis-proxy
生成配置
./codis-proxy --default-config | tee ../conf/proxy.conf
修改配置
以下為需修改的配置,其他配置走預設
product_name = "kid" # 設定專案名 product_auth = "123456" # 設定登入dashboard的密碼(注意:與redis中requirepass一致) session_auth = "56789" # Redis客戶端的登入密碼(注意:與redis中requirepass不一致) admin_addr = "0.0.0.0:11080" #繫結埠(Redis客戶端連線此埠) proxy_addr = "0.0.0.0:19000" # 外部儲存型別
啟動程式
nohup ./codis-proxy --ncpu=24 --config=../conf/proxy.conf --log=../log/proxy.log --log-level=WARN &
檢視
netstat -ntlp
redis-sentinel
拷貝程式
cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/src/redis-sentinel /usr/local/codis/bin/
拷貝配置
cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/sentinel.conf /usr/local/codis/conf/
修改配置
以下為需修改的配置,其他配置走預設
bind 0.0.0.0 protected-mode no port 26379 dir "/usr/local/codis/data"
啟動程式
cd /usr/local/codis/bin/ nohup ./redis-sentinel ../conf/sentinel.conf &
檢視
netstat -ntlp
codis-fe
生成配置
./codis-admin --dashboard-list --zookeeper=192.168.92.137:2181 | tee ../conf/codis.json
啟動程式
nohup ./codis-fe --ncpu=4 --log=fe.log --log-level=WARN --zookeeper=192.168.92.137:2181 --listen=0.0.0.0:18090 &
檢視
netstat -ntlp
元件整合
開啟監控介面
開啟瀏覽器,輸入http://192.168.92.137:18090便可看到codis叢集的監控介面。如下圖所示:
加入codis-proxy
加入codis-server
分配slot到group
sentinels
完結
其他兩臺按照上述流程部署,新增進去組成叢集即可
至此,codis叢集部署完成
下一篇文章構思:nginx+lua直連codis,讀取快取資料,然後存至nginx本地快取,打造熱點資料多級快取