ADJ網路實驗室
打印

[介紹] 在 CentOS 7 yum 安裝 Redis 5 cluster 集群

在 CentOS 7 yum 安裝 Redis 5 cluster 集群

Redis從3.0板本開始支持cluster(我們使用Redis 5.0.3)
集群數量至少6個nodes 才能保證組成完整高可用的集群
從5.0開始, cluster manager tool 就不在需要使用ruby 寫的指令 redis-trib.rb 來當管理工具
直接使用 redis-cli 就能做所有的事情了~

測試環境:
CentOS 7.6
我們使用3台虛擬機模擬6個節點,使用端口區分,每台虛擬機2個節點
Redis1  10.140.0.10  7001  7004
Redis2  10.140.0.11  7002  7005
Redis3  10.140.0.12  7003  7006

(1)安裝 redis 5.0 步驟:
# yum install epel-release yum-utils
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum-config-manager --enable remi
# yum install redis

驗證一下版本
# redis-cli -v
redis-cli 5.0.3

(2)配置每個節點
Redis1 節點,只需要修改一下Cluster相關的配置參數,我們使用 redis-7001.conf 和redis-7004.conf 用來區分節點:

# cp /etc/redis.conf /etc/redis-7001.conf

修改下 redis-7001.conf 相關配置
引用:

bind 0.0.0.0
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
appendonly yes
cluster-enabled yes
cluster-config-file node-7001.conf  #啟用後會自動生成在 /var/lib/redis/
cluster-node-timeout 15000          #節點超時時間,單位:毫秒
maxmemory 1500mb                    #依照自己環境記憶體配置修改,也可不設
maxmemory-policy volatile-lru       #依照自己需求配置修改,也可不設


然後再copy redis-7001.conf 成 redis-7004.conf
同樣配置下7004端口,只要把port和pid文件還有cluster nodes改成7004

Redis2節點,Redis3節點 比照同上辦理
如果這是在內網.就不用設定防火牆,如果有外網,記得開通防火牆

(3)啟動每個節點
在redis1上
# redis-server /etc/redis-7001.conf
# redis-server /etc/redis-7004.conf

在redis2上
# redis-server /etc/redis-7002.conf
# redis-server /etc/redis-7005.conf

在redis3上
# redis-server /etc/redis-7003.conf
# redis-server /etc/redis-7006.conf

檢查服務,檢查各redis節點啟動情況

redis是否啟動成功和監聽端口

# ps -ef | grep redis
# netstat -tnlp | grep redis

PS: 集群總線端口為redis客戶端連接的端口 + 10000
所以如果有看到 17001 , 17004 的port 是正常的

(4)cluster 環境準備(只需在一台機器上執行此步驟)

Redis 5.0 開始,官方的 redis-cli 就可以直接在命令行中使用 create cluster 了。使用下面這個命令建立cluster。
內部通過Cluster相關命令幫助我們簡化集群創建、檢查、槽遷移和均衡等常見操作

這邊選擇在redis1 執行創建
引用:

# redis-cli --cluster create 10.140.0.10:7001 10.140.0.11:7002 10.140.0.12:7003 10.140.0.10:7004 10.140.0.11:7005 10.140.0.12:7006 --cluster-replicas 1

--cluster-replicas 參數指定集群中每個主節點配備幾個從節點,這裡設置為1。

這裡因為測試,只用了3台機器,如果部署節點使用不同的IP地址,redis-cli 會盡可能保證主從節點不分配在同一台機器下,因此會重新排序節點表順序。節點列表順序用於確定主從角色,先主節點之後是從節點。

預設狀態如下(如果節點有掛掉再重新加入的話, master 跟 slave 的狀態就會改變):
引用:
[root@redis1 etc]# redis-cli -p 7001 cluster nodes
62359b29bf2af9ca9b54db993b5f611e01fefd5c 10.140.0.10:7001@17001 myself,master - 0 1545277872000 1 connected 0-5460
fcb4f722684966bf2aec73e4d42592597e2465fb 10.140.0.12:7006@17006 slave 62359b29bf2af9ca9b54db993b5f611e01fefd5c 0 1545277873000 8 connected
97c4642a053837a033e2508c4c15bc5e2b7ebace 10.140.0.11:7002@17002 master - 0 1545277874991 2 connected 5461-10922
5ab12a20997578e2a0a05154ca49d4eebc592c30 10.140.0.10:7004@17004 slave 97c4642a053837a033e2508c4c15bc5e2b7ebace 0 1545277872985 9 connected
ec79f77817f682757aa6e04656d9a932d6b727b5 10.140.0.12:7003@17003 master - 0 1545277874000 3 connected 10923-16383
44d82d060bbbd8eaa61025f99d558aaeedd2775e 10.140.0.11:7005@17005 slave ec79f77817f682757aa6e04656d9a932d6b727b5 0 1545277873988 7 connected

redis1 找 redis3 的 7006 port 當 slave
redis2 找 redis1 的 7004 port 當 slave
redis3 找 redis2 的 7005 port 當 slave


查看 redis cluster nodes 狀態
# redis-cli -p 7001 cluster nodes

查看 redis cluster info 狀態
# redis-cli -p 7001 cluster info

連線到其他節點的方法:
# redis-cli -p 7002 -h 10.140.0.11

(5) 報錯解決方法
如果集群第一次啟動失敗,然後再次啟動時也會報錯,要解決這個問題,必須在每個節點跟每個端口上執行了下面的命令,把cluster reset 才可以
引用:

redis-cli -p 端口號 -h IP地址 FLUSHALL
redis-cli -p 端口號 -h IP地址 CLUSTER RESET SOFT


參考資料:
https://redis.io/topics/cluster-tutorial
https://www.azurew.com/8694.html
https://alexpacer.com/2018/04/27/redis-cluster-on-centos/
https://hk.saowen.com/a/68f89851b327c512c5a0a085f1d9bbe8ee8bd12bd4a1146ff9abed6cf31d05b6





TOP

ARTERY.cn