目錄
1、什么是集群
2、為什么使用
3、集群連接
4、redis cluster 如何分配這六個節(jié)點?
5、集群搭建:
1、什么是集群
- Redis 集群(包括很多小集群)實現(xiàn)了對Redis的水平擴容,即啟動N個redis節(jié)點,將整個數(shù)據(jù)庫分布存儲在這N個節(jié)點中,每個節(jié)點存儲總數(shù)據(jù)的1/N,即一個小集群存儲1/N的數(shù)據(jù),每個小集群里面維護好自己的1/N的數(shù)據(jù)。
- Redis 集群通過分區(qū)(partition)來提供一定程度的可用性(availability): 即使集群中有一部分節(jié)點失效或者無法進行通訊, 集群也可以繼續(xù)處理命令請求。
- 該模式的redis集群特點是:分治、分片。
2、為什么使用
容量不夠,redis如何進行擴容?
并發(fā)寫操作, redis如何分攤?
另外,主從模式,薪火相傳模式,主機宕機,導致ip地址發(fā)生變化,應用程序中配置需要修改對應的主機地址、端口等信息。
之前通過代理主機來解決,但是redis3.0中提供了解決方案。就是無中心化集群配置。
3、集群連接
- 普通方式登錄:可能直接進入讀主機,存儲數(shù)據(jù)時,會出現(xiàn)MOVED重定向操作,所以,應該以集群方式登錄。
- 集群登錄:redis-cli -c -p 6379 采用集群策略連接,設置數(shù)據(jù)會自動切換到相應的寫主機。
4、redis cluster 如何分配這六個節(jié)點?
一個集群至少要有三個主節(jié)點。
選項 –cluster-replicas 1 :表示我們希望為集群中的每個主節(jié)點創(chuàng)建一個從節(jié)點。
分配原則盡量保證每個主數(shù)據(jù)庫運行在不同的IP地址,每個從庫和主庫不在一個IP地址上。
5、集群搭建:
1)? 通過redis中utils路徑下 ./install_server.sh 執(zhí)行文件創(chuàng)建6個不同的redis節(jié)點,端口號分別為6379、6380、6381、8362、6383、6384
2)如果各個節(jié)點原本有存儲數(shù)據(jù),則先將各個節(jié)點的數(shù)據(jù)文件清空。將6個文件夾內的文件全部刪除。
清空數(shù)據(jù)目錄。刪除 Redis 數(shù)據(jù)目錄下的所有文件。使用命令:? rm -rf /path/to/redis/data/*
3)修改6個redis節(jié)點的配置文件
在 /etc/redis 文件中,找到每一個端口號對應的配置文件:
例如修改的內容如下:
bind 0.0.0.0
port 6380 # 設置成對應服務專屬的端口號
daemonize yes
dbfilename "dump6380.rdb" ?# 設置成對應服務專屬的名字
appendonly yes
cluster-enabled yes
cluster-config-file nodes-6380.conf ?# 設置成對應服務專屬的
?4)啟動六個節(jié)點
[root@bogon src]# ./redis-server /etc/redis/6379.conf
[root@bogon src]# ./redis-server /etc/redis/6380.conf
[root@bogon src]# ./redis-server /etc/redis/6381.conf
[root@bogon src]# ./redis-server /etc/redis/6382.conf
[root@bogon src]# ./redis-server /etc/redis/6383.conf
[root@bogon src]# ./redis-server /etc/redis/6384.conf
5)查看各個節(jié)點是否啟動成功 ?
[root@bogon src]# ps -ef | grep redis
root ? ? ? ?3889 ? ? ? 1 ?0 09:56 ? ? ? ? ?00:00:03 ./redis-server 0.0.0.0:6379 [cluster]
root ? ? ? ?3895 ? ? ? 1 ?0 09:56 ? ? ? ? ?00:00:03 ./redis-server 0.0.0.0:6380 [cluster]
root ? ? ? ?3901 ? ? ? 1 ?0 09:57 ? ? ? ? ?00:00:03 ./redis-server 0.0.0.0:6381 [cluster]
root ? ? ? ?3907 ? ? ? 1 ?0 09:57 ? ? ? ? ?00:00:02 ./redis-server *:6382 [cluster]
root ? ? ? ?3913 ? ? ? 1 ?0 09:57 ? ? ? ? ?00:00:02 ./redis-server 0.0.0.0:6383 [cluster]
root ? ? ? ?3919 ? ? ? 1 ?0 09:57 ? ? ? ? ?00:00:02 ./redis-server 0.0.0.0:6384 [cluster]
root ? ? ? ?4247 ? ?2418 ?0 10:22 pts/0 ? ?00:00:00 grep --color=auto redis
6)配置集群
命令格式: --cluster-replicas 1 表示為每個master創(chuàng)建一個slave節(jié)點
注意:這里的IP為每個節(jié)點所在機器的真實IP ?
[root@localhost src]# ./redis-cli --cluster create 192.168.177.128:6379 192.168.177.128:6380 192.168.177.128:6381 192.168.177.128:6382 192.168.177.128:6383 192.168.177.128:6384 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.177.128:6383 to 192.168.177.128:6379
Adding replica 192.168.177.128:6384 to 192.168.177.128:6380
Adding replica 192.168.177.128:6382 to 192.168.177.128:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
slots:[0-5460] (5461 slots) master
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
slots:[5461-10922] (5462 slots) master
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
slots:[10923-16383] (5461 slots) master
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 192.168.177.128:6379)
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
slots: (0 slots) slave
replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
slots: (0 slots) slave
replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
slots: (0 slots) slave
replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7)查看主從關系
命令格式:redis-cli --cluster check 【本臺redis自己的IP】:【本臺redis自己的端口】
[root@localhost src]# ./redis-cli --cluster check 192.168.177.128:6379
192.168.177.128:6379 (ae77569d...) -> 0 keys | 5461 slots | 1 slaves.
192.168.177.128:6381 (dcd5d506...) -> 0 keys | 5461 slots | 1 slaves.
192.168.177.128:6380 (5ccafb9e...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.177.128:6379)
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
slots: (0 slots) slave
replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
slots: (0 slots) slave
replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
slots: (0 slots) slave
replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看下圖即可發(fā)現(xiàn),一主對一從:?
8) 主節(jié)點數(shù)據(jù)寫測試
加參數(shù) -c ,防止路由失效
[root@bogon src]# ./redis-cli -p 6381 -c
127.0.0.1:6381> get name
-> Redirected to slot [5798] located at 192.168.109.149:6380
(nil)
192.168.109.149:6380> get name
(nil)
192.168.109.149:6380>
9)從節(jié)點讀數(shù)據(jù)測試
情況:redis cluster集群中slave節(jié)點能成功復制master節(jié)點數(shù)據(jù)槽數(shù)據(jù),但是無法get數(shù)據(jù),顯示只能到對應的master節(jié)點讀取
原因:Redis Cluster集群中的從節(jié)點,官方默認設置的是不分擔讀請求的、只作備份和故障轉移用,當有請求讀向從節(jié)點時,會被重定向對應的主節(jié)點來處理
解決辦法:在get數(shù)據(jù)之前先使用命令readonly,這個readonly告訴 Redis Cluster 從節(jié)點客戶端愿意讀取可能過時的數(shù)據(jù)并且對寫請求不感興趣文章來源:http://www.zghlxwxcb.cn/news/detail-614761.html
注意:斷開連接后readonly就失效了,再次連接需要重新使用該命令。文章來源地址http://www.zghlxwxcb.cn/news/detail-614761.html
[root@bogon src]# ./redis-cli -p 6379 -c
127.0.0.1:6379> set name zhangsan
-> Redirected to slot [5798] located at 192.168.109.149:6380
OK
192.168.109.149:6380> get name
"zhangsan"
192.168.109.149:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> get name
-> Redirected to slot [5798] located at 192.168.109.149:6380
"zhangsan"
192.168.109.149:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> readonly
OK
127.0.0.1:6383> get name
"zhangsan"
127.0.0.1:6383>
到了這里,關于Redis集群(cluster模式)搭建的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!