Centos 7 部署Redis 三主三從叢集

2020-08-07 22:10:37

Redis-Cluster採用無中心結構,每個節點儲存數據和整個叢集狀態,每個節點都和其他所有節點連線。
一組Redis Cluster是由多個Redis範例組成,官方推薦使用6範例,其中3個爲主節點,3個爲從節點。一旦有主節點發生故障的時候,Redis Cluster可以選舉出對應的從節點成爲新的主節點,繼續對外服務,從而保證服務的高可用性。
masterslave\color{red}{注意:當叢集內一個master以及其對應的slave同時宕機,叢集將無法提供服務}
\color{red}{注意:當存活的主節點數小於總節點數的一半時,整個叢集就無法提供服務了。}
1.png
部署環境:

IP地址 角色 Redis版本
10.10.41.111 7000 redis-master 5.0.8
10.10.41.111 7001 redis-slave 5.0.8
10.10.41.112 7000 redis-master 5.0.8
10.10.41.112 7001 redis-slave 5.0.8
10.10.41.113 7000 redis-master 5.0.8
10.10.41.113 7001 redis-slave 5.0.8

1.安裝Redis

1、安裝C/C++環境
Redis編譯時需要使用C/C++環境:
yum install -y gcc gcc-c++ make

2、下載Redis安裝包
下載地址:http://download.redis.io/releases/
cd /data      
wget http://download.redis.io/releases/redis-5.0.8.tar.gz

3、解壓、編譯
tar -zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
make

4、建立Redis相關工作目錄(目錄可自定義)
mkdir /data/redis-cluster/{data/{redis_7000,redis_7001},conf,log} -p

5、複製redis組態檔
cd redis-5.0.8
cp redis.conf /data/redis-cluster/conf/redis_7000.conf
cp redis.conf /data/redis-cluster/conf/redis_7001.conf

2.修改Redis組態檔

1、修改redis-master組態檔
vi /data/redis-cluster/conf/redis_7000.conf

port 7000             #修改redis監聽埠(可以自定義)
bind 0.0.0.0            #表示redis允許所有地址連線。預設127.0.0.1,僅允許本地連線。
daemonize yes             #允許redis後臺執行
pidfile /var/run/redis_7000.pid		#pid存放目錄
logfile "/var/log/redis-sentinel.log"   #設定Sentinel日誌存放路徑
dir /data/redis-cluster/data/redis_7000	 #工作目錄
cluster-enabled yes     #是否開啓叢集
cluster-config-file /data/redis-cluster/conf/nodes_7000.conf
#叢集組態檔的名稱,每個節點都有一個叢集相關的組態檔,持久化儲存叢集的資訊
#這個檔案並不需要手動設定,這個組態檔有Redis生成並更新,
cluster-node-timeout 15000
#節點互連超時的閥值。叢集節點超時毫秒數,預設15秒
appendonly yes
#Redis會把每次寫入的數據在接收後都寫入 appendonly.aof 檔案, 
#每次啓動時Redis都會先把這個檔案的數據讀入記憶體裡,先忽略RDB檔案。
requirepass 123456    #設定redis密碼
masterauth 123456    #主從同步master的密碼(如果沒有設定redis密碼,則無需設定)

2、修改redis-slave組態檔
vi /data/redis-cluster/conf/redis_7001.conf #修改redis-slave組態檔,具體如下:

port 7001
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis-cluster/redis_7001.pid
logfile "/data/redis-cluster/log/redis_7001.log"
dir /data/redis-cluster/data/redis_7001
cluster-enabled yes
cluster-config-file /data/redis-cluster/conf/nodes_7001.conf 
cluster-node-timeout 15000
appendonly yes
requirepass 123456
masterauth 123456

3.分發到叢集其他伺服器

複製redis以及工作目錄到其他伺服器
scp -r redis-5.0.8 redis-cluster [email protected]:/data
scp -r redis-5.0.8 redis-cluster [email protected]:/data

設定軟鏈接,方便啓動redis服務
ln -s /data/redis-5.0.8/src/redis-server /usr/bin/redis-server
ln -s /data/redis-5.0.8/src/redis-cli /usr/bin/redis-cli

4.啓動Redis

叢集內每台伺服器分別啓動兩個redis
redis-server /data/redis-cluster/conf/redis_7000.conf
redis-server /data/redis-cluster/conf/redis_7001.conf
驗證是否啓動成功
ps -ef | grep redis
檢視版本
redis-cli --version
redis-server --version

5.建立Redis Cluster

注意:redis5.0以上叢集建立方式改爲了C編寫的redis-cli建立,不用再安裝麻煩的ruby。
建立叢集,–cluster-replicas 1指定從庫數量1,建立順序三主-三從。即主-主-主-從-從-從。
如果redis設定了密碼,則建立叢集時需要新增密碼資訊 -a 密碼:
redis-cli -a 123456 --cluster create 10.10.41.111:7000 10.10.41.112:7000 10.10.41.113:7000 10.10.41.111:7001 10.10.41.112:7001 10.10.41.113:7001 --cluster-replicas 1
2.png
確認叢集設定資訊,確認無誤則輸入 yes 並按回車
3.png
出現以上資訊,表示叢集設定成功。

6驗證叢集Redis-Cluster

1、登錄redis叢集
redis-cli -a 123456 -h 10.10.41.111 -p 7000 -c
-a Redis密碼,-c表示叢集模式 ,指定IP和埠
注意:可能會redirected進入到其它server

2、驗證叢集資訊
10.10.41.111:7000> cluster info      #檢視叢集資訊
4.png
10.10.41.111:7000> cluster nodes #檢視叢集節點列表
5.png
檢視叢集內主從關係:

redis-cli -a 123456 -h 10.10.41.111 -p 7000 -c cluster slots | xargs  -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':' | uniq

3、進行數據驗證操作
插入數據:
10.10.41.111:7000> set mykey 「Hello Redis」
10.10.41.113:7000> get mykey
登錄其他節點檢視數據:
redis-cli -a 123456 -h 10.10.41.112 -p 7000 -c
10.10.41.112:7000> get mykey

4、驗證叢集故障轉移
將其中一個redis-master停止掉後、其對應的slave節點會被選舉爲master節點,舊master節點重新恢復時,其角色會成爲slave。具體可自行驗證,驗證時可開啓日誌檢視相關資訊。