redis 主從配置,自動切換
阿新 • • 發佈:2018-03-30
redis keepalived聲明: 此文中所用配置方式和腳本邏輯並非原創,腳本和配置都經過本人測試和優化。
基礎信息
- 軟件版本:
CentOS7.2.1511 Keepalived v1.3.4 Redis3.2.4 - IP信息:
- master: 192.168.56.11
- slave: 192.168.56.12
- vip: 192.168.56.100
- Redis配置:
- 安裝目錄:/usr/local/redis
- 數據目錄:/data4/redisdata
- 配置文件:/usr/local/redis/redis.conf
-
Keepalived配置:
- 安裝目錄:/usr/local/keepalived
- 配置文件:/etc/keepalived/keepalived.conf
- 腳本軟件包:http://down.51cto.com/data/2444547
- master 腳本壓縮包放在master主機,slave腳本壓縮包放在slave主機。
初始環境配置(master和slave上都進行操作)
- 關閉防火墻,SeLinux,配置yum源。
-
安裝必要的軟件:
yum -y install gcc gcc+ openssl openssl-devel tcl wget -y
-
安裝redis
cd /home wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -xf ./redis-3.2.4.tar.gz mv redis-3.2.4 /usr/local/ cd /usr/local/redis-3.2.4/deps/ make hiredis lua jemalloc linenoise cd .. make test make make install mkdir -p /usr/local/redis/bin mkdir -p /data4/redisdata cd /usr/local/redis-3.2.4/src cp redis-benchmark redis-check-aof redis-cli redis-server mkreleasehdr.sh /usr/local/redis/bin/ cd /usr/local/redis-3.2.4 cp redis.conf /usr/local/redis/ cp /usr/local/bin/redis-cli /usr/bin/
-
安裝keepalived
cd /home wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz tar xf keepalived-1.3.4.tar.gz cd keepalived-1.3.4 ./configure make make install
Redis主從配置
-
在master上修改配置文件
/usr/local/redis/redis.conf
參數bind 0.0.0.0 daemonize yes dir /data4/redisdata
slave 上修改相同的信息,並添加slaveof的配置:
bind 0.0.0.0 daemonize yes dir /data4/redisdata slaveof 192.168.56.11 6379
-
master和slave上為redis配置單獨用戶並啟動服務
useradd redisuser passwd redisuser chown -R redisuser:redisuser /usr/local/redis/redis.conf chown -R redisuser:redisuser /usr/local/redis/bin/redis-server chown redisuser /data4/redisdata su - redisuser cd /usr/local/redis ./bin/redis-server ./redis.conf
- Redis口令信息:
username: redisuser
password: redi13%&
Keepalived 主備配置
-
在master節點修改
/etc/keepalived/keepalived.conf
為如下配置:global_defs { lvs_id LVS_redis } vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" weight -20 interval 2 } vrrp_instance VI_1 { state backup interface eth0 virtual_router_id 51 nopreempt priority 200 advert_int 5 track_script { chk_redis } virtual_ipaddress { 192.168.56.100 } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }
-
Keepalived 的Backup節點修改
/etc/keepalived/keepalived.conf
配置文件內容為如下配置:global_defs { lvs_id LVS_redis } vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" weight -20 interval 2 } vrrp_instance VI_1 { state backup interface eth0 virtual_router_id 51 priority 190 advert_int 5 track_script { chk_redis } virtual_ipaddress { 192.168.56.100 } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }
- 添加主備keepalived狀態腳本文件
- 上傳腳本壓縮包到
/etc/keepalived/
目錄下,解壓到scripts目錄,並添加腳本執行權限。 - 創建日誌記錄目錄:
mkdir /var/log/keepalived/
- 上傳腳本壓縮包到
-
啟動keepalived
先啟動主節點keepalved,再啟動slave節點
systemctl start keepalived
-
查看keepalived和redis工作狀態
- 主節點上查看有vip,從節點上無vip
ip a|grep gl
- 主redis為master狀態,從節點為slave狀態
redis-cli info replication
-
測試redis+keepalived主從是否正常
- 分別依次關閉master上的redis和keepalived,查看主從狀態和vip飄移情況。
- 查看master和slave上的各項日誌情況:
tail -f /var/log/keepalived/redis-state.log tail -f /var/log/messages
故障處理
當redis-master出現問題停機或者應用終止後,需要對進行故障排查,正確的恢復啟動順序如下:
- 使用redisuser 啟動masrer,並與當前的slave(此時已經切換為master)進行數據同步:
su - redisuser cd /usr/local/redis ./bin/redis-server ./redis.conf #啟動redis netstat -lntp sh /etc/keepalived/scripts/redis_backup.sh # 使用腳本同步redis redis-cli info replication #查看同步狀態
- 同步完成之後切換為root,啟動keepalived,此時由於是不搶占模式,VIP仍然在slave上。
[root@ost-redis1 ~]# systemctl start keepalived [root@ost-redis1 ~]# redis-cli INFO replication
- 重啟備用節點的keepalived,腳本自動完成主備切換
[root@ost-redis2 ~]# systemctl restart keepalived [root@ost-redis2 ~]# redis-cli INFO replication
redis 主從配置,自動切換