Redis-Cluster采用無(wú)中心結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和整個(gè)集群狀態(tài),每個(gè)節(jié)點(diǎn)都和其他所有節(jié)點(diǎn)連接耕蝉。
一組Redis Cluster是由多個(gè)Redis實(shí)例組成裸准,官方推薦使用6實(shí)例,其中3個(gè)為主節(jié)點(diǎn)赔硫,3個(gè)為從節(jié)點(diǎn)炒俱。一旦有主節(jié)點(diǎn)發(fā)生故障的時(shí)候,Redis Cluster可以選舉出對(duì)應(yīng)的從節(jié)點(diǎn)成為新的主節(jié)點(diǎn)爪膊,繼續(xù)對(duì)外服務(wù)权悟,從而保證服務(wù)的高可用性。
部署環(huán)境:
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++環(huán)境
Redis編譯時(shí)需要使用C/C++環(huán)境:
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撒会、創(chuàng)建Redis相關(guān)工作目錄(目錄可自定義)
mkdir /data/redis-cluster/{data/{redis_7000,redis_7001},conf,log} -p
5、復(fù)制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監(jiān)聽(tīng)端口(可以自定義)
bind 0.0.0.0 #表示redis允許所有地址連接诵肛。默認(rèn)127.0.0.1,僅允許本地連接默穴。
daemonize yes #允許redis后臺(tái)運(yùn)行
pidfile /var/run/redis_7000.pid #pid存放目錄
logfile "/var/log/redis-sentinel.log" #設(shè)置Sentinel日志存放路徑
dir /data/redis-cluster/data/redis_7000 #工作目錄
cluster-enabled yes #是否開(kāi)啟集群
cluster-config-file /data/redis-cluster/conf/nodes_7000.conf
#集群配置文件的名稱怔檩,每個(gè)節(jié)點(diǎn)都有一個(gè)集群相關(guān)的配置文件,持久化保存集群的信息
#這個(gè)文件并不需要手動(dòng)配置蓄诽,這個(gè)配置文件有Redis生成并更新薛训,
cluster-node-timeout 15000
#節(jié)點(diǎn)互連超時(shí)的閥值。集群節(jié)點(diǎn)超時(shí)毫秒數(shù)仑氛,默認(rèn)15秒
appendonly yes
#Redis會(huì)把每次寫(xiě)入的數(shù)據(jù)在接收后都寫(xiě)入 appendonly.aof 文件乙埃,
#每次啟動(dòng)時(shí)Redis都會(huì)先把這個(gè)文件的數(shù)據(jù)讀入內(nèi)存里闸英,先忽略RDB文件。
requirepass 123456 #設(shè)置redis密碼
masterauth 123456 #主從同步master的密碼(如果沒(méi)有設(shè)置redis密碼膊爪,則無(wú)需配置)
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.分發(fā)到集群其他服務(wù)器
復(fù)制redis以及工作目錄到其他服務(wù)器
scp -r redis-5.0.8 redis-cluster root@10.10.41.112:/data
scp -r redis-5.0.8 redis-cluster root@10.10.41.113:/data
設(shè)置軟鏈接米酬,方便啟動(dòng)redis服務(wù)
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.啟動(dòng)Redis
集群內(nèi)每臺(tái)服務(wù)器分別啟動(dòng)兩個(gè)redis
redis-server /data/redis-cluster/conf/redis_7000.conf
redis-server /data/redis-cluster/conf/redis_7001.conf
驗(yàn)證是否啟動(dòng)成功
ps -ef | grep redis
查看版本
redis-cli --version
redis-server --version
5.創(chuàng)建Redis Cluster
注意:redis5.0以上集群創(chuàng)建方式改為了C編寫(xiě)的redis-cli創(chuàng)建沛豌,不用再安裝麻煩的ruby。
創(chuàng)建集群赃额,--cluster-replicas 1指定從庫(kù)數(shù)量1加派,創(chuàng)建順序三主-三從。即主-主-主-從-從-從跳芳。
如果redis設(shè)置了密碼芍锦,則創(chuàng)建集群時(shí)需要添加密碼信息 -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
確認(rèn)集群配置信息,確認(rèn)無(wú)誤則輸入 yes 并按回車
出現(xiàn)以上信息飞盆,表示集群配置成功娄琉。
6驗(yàn)證集群Redis-Cluster
1、登錄redis集群
redis-cli -a 123456 -h 10.10.41.111 -p 7000 -c
-a Redis密碼,-c表示集群模式 ,指定IP和端口
注意:可能會(huì)redirected進(jìn)入到其它server
2吓歇、驗(yàn)證集群信息
10.10.41.111:7000> cluster info #查看集群信息
10.10.41.111:7000> cluster nodes #查看集群節(jié)點(diǎn)列表
查看集群內(nèi)主從關(guān)系:
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孽水、進(jìn)行數(shù)據(jù)驗(yàn)證操作
插入數(shù)據(jù):
10.10.41.111:7000> set mykey "Hello Redis"
10.10.41.113:7000> get mykey
登錄其他節(jié)點(diǎn)查看數(shù)據(jù):
redis-cli -a 123456 -h 10.10.41.112 -p 7000 -c
10.10.41.112:7000> get mykey
4、驗(yàn)證集群故障轉(zhuǎn)移
將其中一個(gè)redis-master停止掉后城看、其對(duì)應(yīng)的slave節(jié)點(diǎn)會(huì)被選舉為master節(jié)點(diǎn)女气,舊master節(jié)點(diǎn)重新恢復(fù)時(shí),其角色會(huì)成為slave测柠。具體可自行驗(yàn)證炼鞠,驗(yàn)證時(shí)可開(kāi)啟日志查看相關(guān)信息。