文章目錄
- Redis集群部署
- Redis4 Cluster部署
Redis集群部署
1 Redis各節點部署
使用源碼安裝各節點,不過與非cluster方式不同的是,配置文件中需啟動cluster相關的配置。
因本次為偽分布式部署,生產環境部署時建議至少3臺機器部署(其中每臺機器1主1從)
ip | port |
192.168.56.101 | 7000 |
192.168.56.101 | 7001 |
192.168.56.101 | 7002 |
192.168.56.101 | 7003 |
192.168.56.101 | 7004 |
192.168.56.101 | 7005 |
1.1 啟動cluster各節點
創建數據目錄
mkdir -p /data/redis/cluster/{7000,7001,7002,7003,7004,7005}
配置文件中主要修改如下內容,其他的可按需調整,也可保持默認值,各節點中注意修改對應的端口號
bind 192.168.56.101
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf #注意此文件自動生成,且初始化時不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no
啟動各節點,建議用redis用戶啟動
useradd redis
chown -R redis:redis /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf .
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf
其他節點和7001類似啟動,啟動后進程中會標記redis節點以cluster模式啟動
2. 按照依賴
因redis5之前版本前cluster安裝依賴ruby,且版本要求比較苛刻,本次安裝的版本redis4.0.14,依賴的ruby版本為>=ruby2.4,因此大家安裝時可以安裝高版本的ruby,本次使用的是ruby2.7.5版本
2.1 編譯安裝ruby
下載ruby,建議從官網下載源碼進行編譯安裝
https://www.ruby-lang.org/en/downloads/
tar -zxvf ruby-2.7.5.tar.gz
cd ruby-2.7.5
./configure
make
make install
安裝完畢后,檢查ruby以及gem版本
2.2 安裝openssl-devel及zlib-devel
安裝完ruby后,使用gem安裝redis包,此時如果沒有安裝openssl 則回報如下錯誤
gem install redis
ERROR: Loading command: install (LoadError)cannot load such file -- openssl
ERROR: While executing gem ... (NoMethodError)undefined method `invoke_with_build_args' for nil:NilClass
按照過程如下:
yum方式先安裝openssl
yum install openssl-devel -y
再進入ruby源碼目錄中的ext目錄下,找到openssl目錄,進入后進行安裝
cd ruby-2.7.5/ext/openssl
ruby extconf.rb
make
make install
zlib-devel包如報錯,也可同上方式處理。
在執行make,若出現如下報錯:
make: *** 沒有規則可以創建“ossl_asn1.o”需要的目標“/include/ruby.h” 停止。
可以在Makefile頂部中的增加 top_srcdir = …/…
再次執行 make && make install
2.3 gem安裝redis
gem install redis
3. 初始化redis集群
相關依賴安裝完成后,即可初始化redis集群,命令及過程如下:
[redis@localhost redis-4.0.14]$ src/redis-trib.rb create --replicas 1 192.168.56.101:7000 192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 192.168.56.101:7004 192.168.56.101:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.56.101:7000
192.168.56.101:7001
192.168.56.101:7002
Adding replica 192.168.56.101:7004 to 192.168.56.101:7000
Adding replica 192.168.56.101:7005 to 192.168.56.101:7001
Adding replica 192.168.56.101:7003 to 192.168.56.101:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000slots:0-5460 (5461 slots) master
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001slots:5461-10922 (5462 slots) master
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002slots:10923-16383 (5461 slots) master
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
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.56.101:7000)
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000slots:0-5460 (5461 slots) master1 additional replica(s)
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002slots:10923-16383 (5461 slots) master1 additional replica(s)
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004slots: (0 slots) slavereplicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003slots: (0 slots) slavereplicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001slots:5461-10922 (5462 slots) master1 additional replica(s)
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005slots: (0 slots) slavereplicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
至此,redis集群初始化完畢,各節點slot范圍及角色也打印出來了
Redis4 Cluster部署
1、安裝redis集群節點
因本次為偽分布式部署,生產環境部署時建議至少3臺機器部署(其中每臺機器1主1從),依舊和redis4.0.14的方式一樣部署
**ip ** | **port ** |
192.168.56.101 | 7000 |
192.168.56.101 | 7001 |
192.168.56.101 | 7002 |
192.168.56.101 | 7003 |
192.168.56.101 | 7004 |
192.168.56.101 | 7005 |
1.1 啟動cluster各節點
創建數據目錄
mkdir -p /data/redis/cluster/{7000,7001,7002,7003,7004,7005}
配置文件中主要修改如下內容,其他的可按需調整,也可保持默認值,各節點中注意修改對應的端口號
bind 192.168.56.103
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf #注意此文件自動生成,且初始化時不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no
啟動各節點,建議用redis用戶啟動
useradd redis
chown -R redis:redis /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf .
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf
其他節點和7001類似啟動,啟動后進程中會標記redis節點以cluster模式啟動
2. 初始化集群
redis5.x之后的版本初始化集群相當便捷,命令及過程如下
redis-cli --cluster create --cluster-replicas 1 192.168.56.103:7000 192.168.56.103:7001 192.168.56.103:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.103:7005
>>> 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.56.103:7004 to 192.168.56.103:7000
Adding replica 192.168.56.103:7005 to 192.168.56.103:7001
Adding replica 192.168.56.103:7003 to 192.168.56.103:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000slots:[0-5460] (5461 slots) master
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001slots:[5461-10922] (5462 slots) master
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002slots:[10923-16383] (5461 slots) master
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003replicates e059d418c11401189558d0f33bd5658297c10939
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
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.56.103:7000)
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003slots: (0 slots) slavereplicates e059d418c11401189558d0f33bd5658297c10939
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005slots: (0 slots) slavereplicates eb98e53273fd348deb5eabcc6bfffc20484749b1
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004slots: (0 slots) slavereplicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
看到如下結果,代表成功配置并分配slot完成
查看各節點信息也可以用如下命令
[redis@localhost 7005]$ redis-cli -h 192.168.56.103 -p 7000 cluster nodes
23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003@17003 slave e059d418c11401189558d0f33bd5658297c10939 0 1646118171000 4 connected
eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001@17001 master - 0 1646118171604 2 connected 5461-10922
c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005@17005 slave eb98e53273fd348deb5eabcc6bfffc20484749b1 0 1646118171000 6 connected
cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004@17004 slave 84ea774c08450db01bf5a518e3b9e55fd26d4d34 0 1646118170000 5 connected
e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002@17002 master - 0 1646118169590 3 connected 10923-16383
84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000@17000 myself,master - 0 1646118171000 1 connected 0-5460