redis集群安裝配置
1.redis集群從3.0開始支持,要讓集群正常工作至少需要3個主節點。
集群中任何一個實例都可以讀寫數據,集群中的節點超過半數失敗
整個集群就不可用,使用haproxy或者lvs實現負載均衡以及后端健康檢測
2.安裝
tar xf redis-3.0.2.tar.gz cd redis-3.0.2 make make PREFIX=/usr/local/redis install mkdir /usr/local/redis/etc mkdir /usr/local/redis/var
mkdir /usr/local/redis/var2
cp redis.conf /usr/local/redis/etc cp src/redis-trib.rb /usr/local/redis/bin/
3.配置集群(3台機器每台啟動兩個實例)(不支持設置密碼認證)
mv /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.ori cat >>/usr/local/redis/etc/redis_6379.conf<<EOF daemonize yes bind 192.168.1.221 port 6379 timeout 300 loglevel notice logfile "/usr/local/redis/var/redis.log" databases 16 dbfilename dump.rdb dir "/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.conf
cluster-node-timeout 5000
EOF
cat >>/usr/local/redis/etc/redis_6380.conf<<EOF daemonize yes bind 192.168.1.221 port 6380 timeout 300 loglevel notice logfile "/usr/local/redis/var2/redis.log" databases 16 dbfilename dump.rdb dir "/usr/local/redis/var2" #requirepass 123456 #masterauth 123456 maxclients 10000 maxmemory 1024MB #開啟日志記錄,相當於MySQL的binlog appendonly yes appendfilename "appendonly.aof" appendfsync everysec
EOF
#集群配置
cluster-enabled yes
#不需要創建集群自動更新
cluster-config-file nodes_6380.conf cluster-node-timeout 5000 EOF
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 rubygems
gem 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 791b834b1a5292bba236956c076849bb45a0ff17 8.集群相關命令:通過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.注意事項
集群注意點:集群中多於一半的集群掛了,整個集群將對外停止服務。
部署的時候,建議將主節點,設置為內存型,將從節點設置為固化存儲型。
主機掛了,從機會自動選舉成為主機。
