redis集群配置


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.注意事項


集群注意點:集群中多於一半的集群掛了,整個集群將對外停止服務。
部署的時候,建議將主節點,設置為內存型,將從節點設置為固化存儲型。
主機掛了,從機會自動選舉成為主機。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM