codis叢集搭建
codis分散式叢集部署
1.codis簡介
Codis是一個分散式 Redis 解決方案, 對於上層的應用來說, 連線到 Codis Proxy 和連線原生的 Redis Server 沒有明顯的區別 (不支援的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的資料遷移等工作, 所有後邊的一切事情, 對於前面的客戶端來說是透明的, 可以簡單的認為後邊連線的是一個記憶體無限大的 Redis 服務.
2.codis元件
Codis基本框架由以下元件組成:
1、Codis Proxy
客戶端連線的 Redis 代理服務, 實現了 Redis 協議。除部分命令不支援以外,表現的和原生的 Redis沒有區別。
2、CodisDashboard
叢集管理工具,支援codis-proxy、codis-server 的新增、刪除,以及據遷移等操作。在叢集狀態發生改變時,codis-dashboard 維護叢集下所有 codis-proxy 的狀態的一致性。
3、Codis Server
基於 Redis 開發,增加了額外的資料結構,提供下層的 Redis 服務。
2.系統環境介紹
實驗用系統皆為centos7.1
ip role hostname 192.168.8.71 codis-proxy atlan4 192.168.8.72 codis-server atlan5 192.168.8.73 codis-server atlan6
3.安裝go語言環境(三臺都做)
1.下載go語言二進位制包
wgethttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
2.解壓go語言包
tar zxfhttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz -C /usr/local/
3.配置環境變數
vi /etc/profile.d/go.sh
exportGOPATH=/usr/local/codis
exportGOROOT=/usr/local/go
exportPATH=$PATH:/usr/local/go/bin
source/etc/profile.d/go.sh
4.設定編譯環境
mkdir -p$GOPATH/src/github.com/CodisLabs
4.下載codis原始碼包並編譯
wgethttps://codeload.github.com/CodisLabs/codis/zip/release3.2
unzip codis-release3.2.zip
mv codis-release3.2$GOPATH/src/github.com/CodisLabs/codis
cd$GOPATH/src/github.com/CodisLabs/codis
ls
admin bin config doc dump.rdb extern kubernetes Makefile pkg scripts version
ansible cmd deploy Dockerfile example Godeps log MIT-LICENSE.txt README.md vendor wandoujia_license.txt
yum install -ygcc git autoconf
make MALLOC=libc
5.配置一個叢集
Codis源 碼 編 譯 完 成 後 , 組 件 的 啟 動 腳 本 在GOPATH/src/github.com/CodisLabs/codis/admin目錄下。配置檔案在GOPATH/src/github.com/CodisLabs/codis/config目錄下。日誌在$GOPATH/src/github.com/CodisLabs/codis/log 目錄下。
1.codis-proxy配置
1。安裝jdk
yum -y install yum -y install java-1.8.0-openjdk*
2.安裝zookeeper
wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
tar zxfzookeeper-3.4.12.tar.gz -C /usr/local/
vim/etc/profile.d/zookeeper.sh
exportZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12
exportPATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin
source/etc/profile.d/zookeeper.sh
3.配置zookeeper,修改配置檔案
cp /usr/local/zookeeper-3.4.12/conf/zoo_sample.cfg/usr/local/zookeeper-3.4.12/conf/zoo.cfg
vim/usr/local/zookeeper-3.4.12/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
clientPort=2181
#server.1=codis-1:2888:3888
#server.2=codis-2:2888:3888
#server.2=codis-3:2888:3888
mkdir -pv/data/zookeeper
echo"1" > /data/zookeeper/myid
設定myid:
設定myid在我們配置的dataDir指定的目錄下面,建立一個myid檔案,裡面內容為一個數字,用來標識當前主機,conf/zoo.cfg檔案配置的srver.X中的X為什麼數字,則myid檔案就輸入這個數字,我只有一臺zk,所以配置檔案裡可以不配置server.X,但還是要配置myid的,echo一個數字1進去即可。如果有多臺zk,則分別在zk伺服器上echo對應的數字進對應的myid檔案
4.codis結合zookeeper
vim /usr/local/codis/config.ini
zk=localhost:2181 //zookeeper的地址, 如果是zookeeper叢集,可以這麼寫:zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181,如果是etcd,則寫成http://hostname1:port,http://hostname2:port,http://hostname3:port
product=test //產品名稱, 這個codis叢集的名字, 可以認為是名稱空間, 不同名稱空間的codis沒有交集
proxy_id=proxy_1 //proxy會讀取, 用於標記proxy的名字, 針對多個proxy的情況, 可以使用不同的config.ini, 只需要更改 proxy_id 即可
net_timeout=5 //檢測狀態時間間隔
dashboard_addr=localhost:18087 //dashboard 服務的地址,CLI 的所有命令都依賴於 dashboard 的 RESTfu
coordinator=zookeeper //如果用etcd,則將zookeeper替換為etcd
6.啟動順序
start zookeeper //啟動zookeeper服務
change config items in config.ini //修改codis配置檔案
./start_dashboard.sh //啟動 dashboard
./start_redis.sh //啟動redis例項
./add_group.sh //新增redis組,一個redis組只能有一個master
./initslot.sh //初始化槽
./start_proxy.sh //啟動proxy
./set_proxy_online.sh //上線proxy專案
open browser to http://localhost:18087/admin //訪問web
7.啟動各個元件
啟動zookeeper
[[email protected]]# zkServer.sh start
ZooKeeperJMX enabled by default
Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg
Startingzookeeper ... STARTED
[[email protected]]# zkServer.sh status
ZooKeeperJMX enabled by default
Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode:standalone
啟動codisproxy
[[email protected] conf]#/usr/local/codis/src/github.com/CodisLabs/codis/admin/codis-proxy-admin.shstart
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml
startingcodis-proxy ...
[[email protected]]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[[email protected]]# tail log/codis-proxy.log.2018-06-30
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca7e0] to192.168.8.72:6379, db-11 round-[0]
2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 start service
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 round-[0]
2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306caa20] to 192.168.8.72:6379,db-14 start service
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306caa20] to192.168.8.72:6379, db-14 round-[0]
2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/start/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920 []
2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/sentinels/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920[]
2018/06/3018:46:49 proxy.go:293: [WARN] [0xc4200c08f0] set sentinels = []
2018/06/3018:46:49 main.go:343: [WARN] rpc online proxy seems OK
2018/06/3018:46:50 main.go:233: [WARN] [0xc4200c08f0] proxy is working ...
啟動codis-server(三臺都啟動)
[[email protected]]# ./admin/codis-server-admin.sh start
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf
startingcodis-server ...
[[email protected]]# tail /tmp/redis_6379.log
1803:M 30Jun 18:50:36.064 * Background saving terminated with success
1803:M 30Jun 18:50:36.064 * Synchronization with slave 192.168.8.72:6379 succeeded
1803:M 30Jun 18:50:36.089 * Slave 192.168.8.73:6379 asks for synchronization
1803:M 30Jun 18:50:36.089 * Partial resynchronization not accepted: Runid mismatch(Client asked for runid 'd585494bee79e778b05737b465dacffc29dd520e', my runid is'3ce28d86c88e2713dae1180d390e685949873248')
1803:M 30Jun 18:50:36.089 * Starting BGSAVE for SYNC with target: disk
1803:M 30Jun 18:50:36.089 * Background saving started by pid 1808
1808:C 30Jun 18:50:36.090 * DB saved on disk
1808:C 30Jun 18:50:36.091 * RDB: 0 MB of memory used by copy-on-write
1803:M 30Jun 18:50:36.165 * Background saving terminated with success
1803:M 30Jun 18:50:36.165 * Synchronization with slave 192.168.8.73:6379 succeeded
啟動codisFe
[[email protected] codis]#./admin/codis-fe-admin.sh start
startingcodis-fe ...
[[email protected]]# tail log/codis-fe.
codis-fe.log.2018-06-30 codis-fe.out
[[email protected]]# tail log/codis-fe.log.2018-06-30
2018/06/3016:58:50 main.go:101: [WARN] set ncpu = 1
2018/06/3016:58:50 main.go:104: [WARN] set listen = 0.0.0.0:9090
2018/06/3016:58:50 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2018/06/3016:58:50 main.go:162: [WARN] set --filesystem = /tmp/codis
2018/06/3016:58:50 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid
2018/06/3018:53:27 main.go:101: [WARN] set ncpu = 1
2018/06/3018:53:27 main.go:104: [WARN] set listen = 0.0.0.0:9090
2018/06/3018:53:27 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2018/06/3018:53:27 main.go:162: [WARN] set --filesystem = /tmp/codis
2018/06/3018:53:27 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid
8.web介面
瀏覽器訪問http://192.168.8.71:9090即可進入web管理頁面
codis-proxy已經啟用
配置新的codis叢集
先在新建一個組我的是1
新增主機
Data center在此處不需要填,在codis server address中填入codis主機的IP和埠
Group填如你剛才建立的組我的1
完成之後是這樣的
至此codis叢集已經建立完成