redis codis 安裝部署

codis 的整個安裝仍是比較簡單,詳細的步驟參考官方說明:
前端

https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.mdnode

依賴環境安裝 go + zookeeper

先安裝go環境

$ 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

安裝 zookeeper 環境

$ 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

安裝 codis

執行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 放置在同一文件夾下

啓動 codis

執行 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

從新啓動便可

初始化 slots

執行 bin/codis-config slot init,該命令會在zookeeper上建立slot相關信息

$ ./bin/codis-config -c ./config.ini slot init

啓動 Codis Redis

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)

添加 Redis Server Group

每個 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

設置 server group 服務的 slot 範圍

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

啓動 codis-proxy

$ 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-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 的故障轉移

注:前提須要安裝並啓動 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 dashboard 相關操做

codis 啓動以後,能夠經過瀏覽器中訪問: http://192.168.1.161:18087/admin/

Server Groups 能夠添加新的 group 和 添加 redis 服務

Slot Control能夠給 group 分配槽位

Migrate Status 能夠用來槽位遷移

Proxy status 用來監控 proxy 的狀態

codis 不支持的命令

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 上的. 你須要修改你的代碼, 用其餘的方式實現.

相關文章
相關標籤/搜索