Redis 6.X Sentinel 哨兵集群搭建
碼哥帶大家完成在 CentOS 7 中安裝 Redis 6.x 教程。在學(xué)習(xí) Redis 之前,我們需要先搭建一套哨兵環(huán)境。機器有限,實現(xiàn)目標是一臺機器上搭建 6 個節(jié)點,構(gòu)成一主兩從三哨兵集群模式。
下載解壓
可直接到 Redis 官網(wǎng)下載最新穩(wěn)定包,地址:https://redis.io/download?;蛘呤褂?命令:sudo wget http://download.redis.io/releases/redis-6.0.9.tar.gz 下載安裝包.。
- 碼哥統(tǒng)一把軟件包放在 /opt/soft 目錄下,并創(chuàng)建目錄 mkdir redisSentinel。在 redisSentinel 目錄下執(zhí)行 mkdir 6479 6480 6481 26379 26380 26381 6479 6480 6481分別對應(yīng) Redis 主從節(jié)點 redis.conf 配置模板。
- tar -zxf redis-6.0.9.tar.gz -C redisSentinel解壓到 redisSentinel 目錄中。
make 編譯
在編譯之前我們需要確認 gcc 版本,自 redis 6.0.0 之后,編譯 redis 需要支持 C11 特性,C11 特性在 4.9 中被引入。Centos 7 默認 gcc 版本為 4.8.5,所以需要升級gcc版本。
否則在編譯過程中會報錯。
解決方式
- yum -y install gcc gcc-c++ make tcl
- yum -y install centos-release-scl
- yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
- scl enable devtoolset-9 bash
升級之后便可解決 make 報錯問題。
- 注意:scl命令啟用只是臨時的,退出xshell或者重啟就會恢復(fù)到原來的gcc版本。如果要長期生效的話,執(zhí)行如下 sudo echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile。
cd /opt/soft/redisSentinel/redis-6.0.9 切換到目錄執(zhí)行 make 。
編譯完成使用 make install 對 redis 進行安裝 ,命令:sudo make install。
主從復(fù)制
將 redis.conf 復(fù)制三份到 6479 6480 6481 目錄下,并修改配置:
Master
- # master 端口
- port 6479
- # 讓 Redis 可以跨網(wǎng)訪問
- bind 172.16.90.152
- # 后臺執(zhí)行
- daemonize yes
- pidfile /var/run/redis_6479.pid
slave
主要在于端口號不同,分別是 6480、6481,并且在末尾添加 replicaof 172.16.90.152 6479
- # master 端口
- port 6480
- # 讓 Redis 可以跨網(wǎng)訪問
- bind 172.16.90.152
- # 后臺執(zhí)行
- daemonize yes
- # 指定 masterip master port
- replicaof 172.16.90.152 6479
分別啟動 Redis
通過 redis-server 啟動主從節(jié)點。
- ./redis-6.0.9/src/redis-server redis-6479/redis.conf
- ./redis-6.0.9/src/redis-server redis-6480/redis.conf
- ./redis-6.0.9/src/redis-server redis-6481/redis.conf
檢查集群狀態(tài)
- ./redis-6.0.9/src/redis-cli -p 6479 info Replication
配置哨兵集群
將哨兵配置文件分別復(fù)制到 sentinel26380 sentinel26381 sentinel26382,需要注意的是每個文件的端口配置以及 sentinel monitor mymaster 172.16.90.152 6479 2 中最后的數(shù)字 2,哨兵集群匯總每個節(jié)點必須一致。
分別修改這三個配置文件:
- # 綁定IP
- bind 0.0.0.0
- # 后臺運行
- daemonize yes
- # 默認yes,沒指定密碼或者指定IP的情況下,外網(wǎng)無法訪問
- protected-mode no
- # 哨兵的端口,客戶端通過這個端口來發(fā)現(xiàn)redis
- port 26380
- # 這個文件會自動生成(如果同一臺服務(wù)器上啟動,注意要修改為不同的端口)
- pidfile /var/run/redis-sentinel-26380.pid
- # sentinel監(jiān)控的master的名字叫做mymaster,初始地址為 127.0.0.1 6380,2代表兩個及以上哨兵認定為死亡,才認為是真的死亡
- sentinel monitor mymaster 172.16.90.152 6479 2
啟動哨兵集群
- ./redis-6.0.9/src/redis-sentinel sentinel26380/sentinel.conf
- ./redis-6.0.9/src/redis-sentinel sentinel26381/sentinel.conf
- ./redis-6.0.9/src/redis-sentinel sentinel26382/sentinel.conf
查看 sentinel 監(jiān)控的 master-slave 信息:
- redis-cli -h 192.168.31.220 -p 26380
- sentinel master mymaster
- SENTINEL replicas mymaster
- SENTINEL sentinels mymaster
測試故障自動轉(zhuǎn)移
- redis-cli -p 6480 DEBUG sleep 30
再次檢查當(dāng)前 master 地址,這次將得到不同的響應(yīng):
- SENTINEL get-master-addr-by-name mymaster