14. Redis集群
14.1 集群
Redis在3.0后開始支持Cluster(模式)模式,目前redis的集群支持節(jié)點的自動發(fā)現(xiàn),支持slave-master選舉和容錯,支持在線分片(sharding shard )等特性俊柔。reshard
14.2 集群架構圖
14.3 集群細節(jié)
- 所有的redis節(jié)點彼此互聯(lián)(PING-PONG機制),內(nèi)部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬.
- 節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效.
- 客戶端與redis節(jié)點直連,不需要中間proxy層.客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可
- redis-cluster把所有的物理節(jié)點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value
如上圖所示官套,客戶端連接任意一個可用節(jié)點适刀,發(fā)送數(shù)據(jù),通過CRC16算出key的結(jié)果儡循,重定向到包含此key結(jié)果的slot槽的取值范圍的Node節(jié)點中弓颈。
14.4 集群搭建
判斷一個是集群中的節(jié)點是否可用,是集群中的所用主節(jié)點選舉過程,如果半數(shù)以上的節(jié)點認為當前節(jié)點掛掉,那么當前節(jié)點就是掛掉了,所以搭建redis集群時建議節(jié)點數(shù)最好為奇數(shù)疙挺,搭建集群至少需要三個主節(jié)點,三個從節(jié)點,至少需要6個節(jié)點。
# 1.準備環(huán)境安裝ruby以及redis集群依賴
- yum install -y ruby rubygems
- gem install redis-xxx.gem
第一步:yum install -y ruby rubygems
第二步:將redis-3.2.1.gem上傳到服務器荣德,gem install redis-3.2.1.gem
# 2.在一臺機器創(chuàng)建7個目錄
# 3.每個目錄復制一份配置文件
[root@localhost ~]# cp redis-4.0.10/redis.conf 7000/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7001/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7002/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7003/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7004/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7005/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7006/
# 4.修改不同目錄配置文件
- port 6379 ..... //修改端口
- bind 0.0.0.0 //開啟遠程連接
- cluster-enabled yes //開啟集群模式
- cluster-config-file nodes-port.conf //集群節(jié)點配置文件
- cluster-node-timeout 5000 //集群節(jié)點超時時間
- appendonly yes //開啟AOF持久化
- daemonize yes //開啟守護線程,就是沒有啟動窗口
- dbfilename dump-7000.rdb //7000是端口號童芹,因為我們這里是在一臺機器上啟動集群涮瞻。
- appendfilename "appendonly-7000.aof" //7000是端口號,每個aof文件改成自己的標示假褪。
# 5.指定不同目錄配置文件啟動七個節(jié)點
- [root@localhost bin]# ./redis-server /root/7000/redis.conf
- [root@localhost bin]# ./redis-server /root/7001/redis.conf
- [root@localhost bin]# ./redis-server /root/7002/redis.conf
- [root@localhost bin]# ./redis-server /root/7003/redis.conf
- [root@localhost bin]# ./redis-server /root/7004/redis.conf
- [root@localhost bin]# ./redis-server /root/7005/redis.conf
- [root@localhost bin]# ./redis-server /root/7006/redis.conf
# 6.查看進程
- [root@localhost bin]# ps aux|grep redis
1.創(chuàng)建集群
# 1.復制集群操作腳本到bin目錄中
- [root@localhost bin]# cp /root/redis-4.0.10/src/redis-trib.rb .
或者
-[root@localhost src]# cp redis-trib.rb /usr/redis/bin/
# 2.創(chuàng)建集群
- ./redis-trib.rb create --replicas 1 192.168.202.205:7000 192.168.202.205:7001 192.168.202.205:7002 192.168.202.205:7003 192.168.202.205:7004 192.168.202.205:7005
# 3.集群創(chuàng)建成功出現(xiàn)如下提示
客戶端連接集群:
進入redis的bin目錄:
[root@localhost bin]# ./redis-cli -p 7000 -c
./redis-cli -p 7000 -c
2.查看集群狀態(tài)
# 1.查看集群狀態(tài) check [原始集群中任意節(jié)點] [無]
- ./redis-trib.rb check 192.168.202.205:7000
# 2.集群節(jié)點狀態(tài)說明
- 主節(jié)點
主節(jié)點存在hash slots,且主節(jié)點的hash slots 沒有交叉
主節(jié)點不能刪除
一個主節(jié)點可以有多個從節(jié)點
主節(jié)點宕機時多個副本之間自動選舉主節(jié)點
- 從節(jié)點
從節(jié)點沒有hash slots
從節(jié)點可以刪除
從節(jié)點不負責數(shù)據(jù)的寫,只負責數(shù)據(jù)的同步
3.添加主節(jié)點
# 1.添加主節(jié)點 add-node [新加入節(jié)點] [原始集群中任意節(jié)點]
- ./redis-trib.rb add-node 192.168.1.158:7006 192.168.1.158:7005
- 注意:
1.該節(jié)點必須以集群模式啟動
2.默認情況下該節(jié)點就是以master節(jié)點形式添加
4.添加從節(jié)點
# 1.添加從節(jié)點 add-node --slave [新加入節(jié)點] [集群中任意節(jié)點]
- ./redis-trib.rb add-node --slave 192.168.1.158:7006 192.168.1.158:7000
- 注意:
當添加副本節(jié)點時沒有指定主節(jié)點,redis會隨機給副本節(jié)點較少的主節(jié)點添加當前副本節(jié)點
# 2.為確定的master節(jié)點添加主節(jié)點 add-node --slave --master-id master節(jié)點id [新加入節(jié)點] [集群任意節(jié)點]
- ./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000
5.刪除副本節(jié)點
# 1.刪除節(jié)點 del-node [集群中任意節(jié)點] [刪除節(jié)點id]
- ./redis-trib.rb del-node 127.0.0.1:7002 0ca3f102ecf0c888fc7a7ce43a13e9be9f6d3dd1
- 注意:
1.被刪除的節(jié)點必須是從節(jié)點或沒有被分配hash slots的節(jié)點
6.集群在線分片
# 1.在線分片 reshard [集群中任意節(jié)點] [無]
- ./redis-trib.rb reshard 192.168.1.158:7000
Springboot整合redis集群
spring.redis.cluster.nodes=192.168.159.2:7000,192.168.159.2:7001,192.168.159.2:7002,192.168.159.2:7003,192.168.159.2:7004,192.168.159.2:7005,192.168.159.2:7006