標籤:
redis叢集安裝配置
1.redis叢集從3.0開始支援,要讓叢集正常工作至少需要3個主節點。
叢集中任何一個執行個體都可以讀寫資料,叢集中的節點超過半數失敗
整個叢集就不可用,使用haproxy或者lvs實現負載平衡以及後端健康檢測
2.安裝
tar xf redis-3.0.2.tar.gzcd redis-3.0.2makemake PREFIX=/usr/local/redis installmkdir /usr/local/redis/etcmkdir /usr/local/redis/varcp redis.conf /usr/local/redis/etccp src/redis-trib.rb /usr/local/redis/bin/
3.配置叢集(3台機器每台啟動兩個執行個體)(不支援設定密碼認證)
mv /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.oricat >>/usr/local/redis/etc/redis_6379.conf<<EOFdaemonize yesbind 192.168.1.221port 6379timeout 300loglevel noticelogfile "/usr/local/redis/var/redis.log"databases 16dbfilename dump.rdbdir "/usr/local/redis/var"maxclients 10000 maxmemory 1024MB
#開啟日誌記錄,相當於MySQL的binlog
appendonly yes appendfilename "appendonly.aof" appendfsync everysec
#叢集配置
cluster-enabled yes
#不需要建立叢集自動更新
cluster-config-file nodes_6379.confcluster-node-timeout 5000EOFcat >>/usr/local/redis/etc/redis_6380.conf<<EOFdaemonize yesbind 192.168.1.221port 6380timeout 300loglevel noticelogfile "/usr/local/redis/var2/redis.log"databases 16dbfilename dump.rdbdir "/usr/local/redis/var2"#requirepass 123456#masterauth 123456maxclients 10000 maxmemory 1024MB#開啟日誌記錄,相當於MySQL的binlogappendonly yes appendfilename "appendonly.aof" appendfsync everysec
#叢集配置
cluster-enabled yes
#不需要建立叢集自動更新
cluster-config-file nodes_6380.confcluster-node-timeout 5000EOF
4.啟動叢集中的執行個體
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6379.conf/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6380.conf
#查看啟動情況
ps -ef|grep redis
#串連測試
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 quit/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 quit/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 quit/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 quit/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 quit/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 quit
#停止服務
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 shutdown/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 shutdown/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 shutdown/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 shutdown/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 shutdown/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 shutdown
5.建立叢集
#安裝ruby環境
yum install -y ruby rubygemsgem install redis
#建立叢集
/usr/local/redis/bin/redis-trib.rb create --replicas 1 192.168.1.221:6379 192.168.1.221:6380 192.168.1.222:6379 192.168.1.222:6380 192.168.1.223:6379 192.168.1.223:6380
#輸入yes,則建立成功,系統會自動匹配主機,從機。
#--replicas 1 手動可以自己添加從節點
#代表為每個主節點建立1個從節點,在商用環境下,比如30台機器,可以配置為3,每個主節點有3個從。
6.叢集管理
1.查看叢集中機器ID,主從,及hash槽情況,可以查看叢集中機器的情況
/usr/local/redis/bin/redis-trib.rb check 192.168.1.221:6379
2.對資料重新分區:
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6379
3.列出叢集中的所有主節點
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 cluster nodes | grep master
4.讓某個主節點崩潰,測試容錯移轉
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 debug segfault
5.增加主節點到叢集
/usr/local/redis/bin/redis-trib.rb add-node 192.168.1.221:6381 192.168.1.221:6379
#192.168.1.222:6381是新節點,192.168.1.221:6379是一個已在叢集中的節點
#需要注意的是此時新節點不能成為真正的主節點,需要進行重新分區才可以
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6381
1).自動分區程式會詢問移動幾個hash槽,如果要保證資料的均勻,此時應該是16384/N,
N代表包括當前主機的所有希望成為主節點的數量。
2).然後會詢問移動到哪個節點,輸入新的主節點的id即可。
3).會詢問從哪些節點移動資料,此時可以選擇某些節點的ID,也可以直接選擇all,從所有主節點,這樣資料就會均分。
6.增加從節點到叢集
/usr/local/redis/bin/redis-trib.rb add-node --slave 192.168.1.222:6381 192.168.1.221:6379
#此時沒有指定從從節點的主節點,一般會自動選擇一個,也可以指定主節點,如下:
/usr/local/redis/bin/redis-trib.rb add-node --slave --master-id 6b45acde96e4225856c8652070e8c8edeec00c79 192.168.1.223:6381 192.168.1.221:6379
#192.168.1.222:6381新加的節點
#192.168.1.221:6379已在叢集中的節點
7.刪除一個節點(刪除後redis執行個體會被關閉)
1).從節點刪除:d598f4cf29cc4fea3616a00a0e707f71a7777cf1是指被刪除的redis的ID
/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 56cfd4a0d4631fdf046c20caac7e5f1a0fce3b39
2).主節點刪除,此時應該確保主節點資料為空白,如果不為空白,需要將該節點的資料重新分區到其他節點上
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.223:6381
(被刪除的主節點,先進行資料移轉,到其他主節點上)
/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 791b834b1a5292bba236956c076849bb45a0ff178.叢集相關命令:通過redis-cli -c -p 的命令後進行查看
CLUSTER NODES :叢集資訊,包括了節點ID,主從關係
CLUSTER INFO:查看叢集是否健康
CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到叢集當中,讓它成為叢集的一份子。
CLUSTER FORGET <node_id> 從叢集中移除 node_id 指定的節點。
CLUSTER REPLICATE <node_id> 將當前節點設定為 node_id 指定的節點的從節點。
CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪個槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的索引值對數量。
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 CLUSTER NODES
7.注意事項
叢集注意點:叢集中多於一半的叢集掛了,整個叢集將對外停止服務。
部署的時候,建議將主節點,設定為記憶體型,將從節點設定為固化儲存型。
主機掛了,從機會自動選舉成為主機。
redis叢集配置