Redis-Cluster採用無中心結構,每個節點儲存數據和整個叢集狀態,每個節點都和其他所有節點連線。
一組Redis Cluster是由多個Redis範例組成,官方推薦使用6範例,其中3個爲主節點,3個爲從節點。一旦有主節點發生故障的時候,Redis Cluster可以選舉出對應的從節點成爲新的主節點,繼續對外服務,從而保證服務的高可用性。
部署環境:
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、安裝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
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
複製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
叢集內每台伺服器分別啓動兩個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
注意: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
確認叢集設定資訊,確認無誤則輸入 yes 並按回車
出現以上資訊,表示叢集設定成功。
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 #檢視叢集資訊
10.10.41.111:7000> cluster nodes #檢視叢集節點列表
檢視叢集內主從關係:
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。具體可自行驗證,驗證時可開啓日誌檢視相關資訊。