codis 的整個安裝仍是比較簡單,詳細的步驟參考官方說明:
前端
https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.mdnode
$ wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz $ tar -zxvf go1.4.1.linux-amd64.tar.gz -C /usr/local/
配置go境變量linux
export GOROOT=/usr/local/go export GOPATH=/usr/local/codis PATH=$PATH:$GOROOT/bin:$GOPATH/bin
$ tar -zxvf zookeeper-3.4.6.tar.gz
配置環境變量git
ZOOKEEPER_HOME=/usr/local/zookeeper PATH=$PATH:$ZOOKEEPER_HOME/bin
啓動 zookeeper 服務github
$ ./bin/zkServer.sh start
執行go get下載codis代碼golang
$ go get -u -d github.com/CodisLabs/codis
提示 git 未安裝,安裝 git
redis
$ yum install git
代碼下載完成以後,切換到$GOPATH/src/github.com/CodisLabs/codis目錄執行make命令編譯代碼,並執行make gotest來跑測試shell
$ make
提示 gcc 未安裝api
/bin/sh: cc: command not found瀏覽器
$ yum install gcc
codis安裝成功以後,會在 bin 文件夾內生成 codis-config、codis-proxy、codis-server三個可執行文件。另外, bin/assets 文件夾是 codis-config 的 dashboard http 服務須要的前端資源, 須要和 codis-config 放置在同一文件夾下
執行 bin/codis-config dashboard, 該命令會啓動 dashboard
$ cd /usr/local/codis/src/github.com/CodisLabs/codis $ ./bin/codis-config -c ./config.ini dashboard &
有時kill方式中止codis時,再次啓動會出現下面的錯誤提示,由於zookeeper中的相關配置沒有刪除,鏈接上zookeeper刪除相關文件夾
[root@bogon codis]# ./bin/codis-config -c ./config.ini dashboard & 2016/05/02 06:58:45 dashboard.go:160: [INFO] dashboard listening on addr: :18087 2016/05/02 06:58:46 dashboard.go:234: [PANIC] create zk node failed [error]: dashboard already exists: {"addr": "192.168.1.161:18087", "pid": 6231}
解決辦法:
[root@bogon codis]# cd /usr/local/zookeeper/ [root@bogon zookeeper]# ./bin/zkCli.sh -server 127.0.0.1:2181 … [zk: 127.0.0.1:2181(CONNECTED) 1] ls /zk/codis/db_test [fence, slots, servers, proxy, migrate_tasks, dashboard, LOCK, actions, ActionResponse] [zk: 127.0.0.1:2181(CONNECTED) 2] rmr /zk/codis/db_test/dashboard
從新啓動便可
執行 bin/codis-config slot init,該命令會在zookeeper上建立slot相關信息
$ ./bin/codis-config -c ./config.ini slot init
Codis redis 在extern目錄下能夠找到,具體的配置和啓動過程和官方的reids啓動同樣
注:由於 codis 採用的 redis 服務時基於 redis 的2.x版本的分支,因此這裏不能使用官方下載的 redis 來做爲 redis service
本次實驗啓動4個redis服務,兩組主從
192.186.1.161 6379 (master) -- > 192.168.1.161 6380 (slave)
192.168.1.161 6479 (master) -- > 192.168.1.161 6480 (slave)
每個 Server Group 做爲一個 Redis 服務器組存在, 只容許有一個 master, 能夠有多個 slave, group id 僅支持大於等於1的整數,例如:
添加一個group,group的id爲1, 並添加一個redis master到該group
$ bin/codis-config server add 1 192.168.1.161:6379 master
添加一個redis slave到該group
$ bin/codis-config server add 1 192.168.1.161:6380 slave
相似的,再添加group,group的id爲2
$ bin/codis-config server add 2 192.168.1.161:6479 master $ bin/codis-config server add 2 192.168.1.161:6480 slave
Codis 採用 Pre-sharding 的技術來實現數據的分片, 默認分紅 1024 個 slots (0-1023), 對於每一個key來講, 經過如下公式肯定所屬的 Slot Id : SlotId = crc32(key) % 1024 每個 slot 都會有一個且必須有一個特定的 server group id 來表示這個 slot 的數據由哪一個 server group 來提供.
例如:
設置編號爲[0, 511]的 slot 由 server group 1 提供服務, 編號 [512, 1023] 的 slot 由 server group 2 提供服務
$ bin/codis-config slot range-set 0 511 1 online $ bin/codis-config slot range-set 512 1023 2 online
$ bin/codis-proxy -c config.ini -L ./log/proxy.log --cpu=4 --addr=192.168.1.161:19000 --http-addr=192.168.1.161:11000
--addr理綁定的ip和端口
--cpu理使用的cpu數,虛擬機的配置有關,通常跟數相同
--http-addr用於測試的地址
-L 指定理的日誌文件
剛啓動的 codis-proxy 默認是處於 offline狀態的, 而後設置 proxy 爲 online 狀態, 只有處於 online 狀態的 proxy 纔會對外提供服務
$ bin/codis-config -c config.ini proxy online <proxy_name> <---- proxy的id, 如 proxy_1
Codis-ha 用來作codis的高可用及故障自動轉移功能,可是codis-ha不是codis的官方功能插件,默認若是codis group 若是配置了主從,當該 group 中的主宕機後,從不會自動切換
Codis-ha github 官方地址:https://github.com/ngaut/codis-ha
$ go get github.com/ngaut/codis-ha $ cd codis-ha // /usr/local/codis/src/github.com/ngaut/codis-ha $ go build $ ./codis-ha --codis-config=192.168.1.161:18087 --productName=test
啓動以後,查看
redis-cli -h 192.168.1.161 -p 19000
注:前提須要安裝並啓動 codis-ha
測試將 group1 下面的 6379 服務中止後,6380 是否能夠自動升級爲主
6379 在中止服務以前爲 group_1 的 mster
kill掉6379服務後,看到 codis-ha 的日誌輸出
6380 成功升級爲 group_1 的新主
再次重啓 6379 的 redis 服務,驗證啓動後的 6379 會做爲 6380 的從節點
6380 仍是 master,6379做爲了 6380 的 slave 加入了 group_1
codis 啓動以後,能夠經過瀏覽器中訪問: http://192.168.1.161:18087/admin/
Server Groups 能夠添加新的 group 和 添加 redis 服務
Slot Control能夠給 group 分配槽位
Migrate Status 能夠用來槽位遷移
Proxy status 用來監控 proxy 的狀態
Codis能夠完美的解決Redis集羣問題,在目前Redis 3.0版本還不是很穩定的狀況下,是很是不錯的解決方案。支持數據擴展。 可是並非全部的redis命令都支持。
若是你使用如下命令:
KEYS, MOVE, OBJECT, RENAME, RENAMENX, SORT, SCAN, BITOP,MSETNX, BLPOP, BRPOP, BRPOPLPUSH, PSUBSCRIBE,PUBLISH, PUNSUBSCRIBE, SUBSCRIBE, UNSUBSCRIBE, DISCARD, EXEC, MULTI, UNWATCH, WATCH, SCRIPT EXISTS, SCRIPT FLUSH, SCRIPT KILL, SCRIPT LOAD, AUTH, ECHO, SELECT, BGREWRITEAOF, BGSAVE, CLIENT KILL, CLIENT LIST, CONFIG GET, CONFIG SET, CONFIG RESETSTAT, DBSIZE, DEBUG OBJECT, DEBUG SEGFAULT, FLUSHALL, FLUSHDB, INFO, LASTSAVE, MONITOR, SAVE, SHUTDOWN, SLAVEOF, SLOWLOG, SYNC, TIME
是沒法直接遷移到 Codis 上的. 你須要修改你的代碼, 用其餘的方式實現.