sentinel + vip 實現redis主從模式高可用

第1章 環境說明:

1.1系統版本:

cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

1.2redis主從:

       10.3.7.22:7001-主
       10.3.7.25:7001-從
       10.3.7.28:7001-從


1.3哨兵:

       10.3.7.22:6800
       10.3.7.25:6800
       10.3.7.28:6800

1.4VIP

 10.3.11.11

第2章 搭建redis主從模式

yum安裝redis後修改下配置文件即可,這裏redis主從的搭建就不粘貼了

第3章 配置redis-sentinel模式

三個節點的配置,只要保證sentinel myid不同即可,按照這個配置文件應該是可以的,哨兵的配置文件比較坑,網上看了好多資料,結果啓動都是報錯,我貼的這個可以試試,應該不會,如果報錯logsfile不存在的話記得touch一下

cat /etc/redis-sentinel.conf
port 6800
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
dir "/tmp"
sentinel myid 82aab24bc703376697a7893302d6096e60766483
sentinel monitor mymaster 10.3.7.22 7001 2
sentinel down-after-milliseconds mymaster 5000
 
sentinel failover-timeout mymaster 15000
sentinel client-reconfig-script mymaster /opt/notify_master6800.sh
sentinel auth-pass mymaster kkQZ4_JkjcZN

第4章 配置vip自動漂移的執行腳本:

4.1下面的LOCAL_IP改成每個節點自己的ip

cat /opt/notify_master6800.sh
#!/bin/bash
 
MASTER_IP=$6
LOCAL_IP='10.3.7.22'
NETMASK='24'
INTERFACE='eth0'
VIP='10.3.11.11'
 
if [ ${MASTER_IP} = ${LOCAL_IP} ];then
    ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
    arping -c 1 -I ${INTERFACE} -U ${VIP}
    exit 0
else
    ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
    exit 0
fi
exit 1

4.2遇到問題

腳本配置好以後應該檢查下是否可以正常執行,因爲我在第一次模擬故障的時候發現vip沒有飄逸,手動執行腳本後發現以下報錯:

-bash: $'\302\240ip': command not found

由於之前的腳本是我在網上複製下來的,懷疑字符集有問題,於是刪除腳本,乾脆手敲了一遍,再次模擬故障,vip切換成功

4.3腳本參數說明:

client-reconfig-script:這個參數配置執行腳本,sentinel在做failover的時候會執行這個腳本,並且傳遞6個參數<master-name><role><state><from-ip><from-port><to-ip> <to-port>,其中<to-ip>是新主redisIP地址,可以在這個腳本里做VIP漂移操作,腳本編寫好以後,可以自己加上以上六個參數執行腳本,檢查是否有問題

第5章 查看所有節點哨兵狀態

每個節點均看到以下輸出即可

# redis-cli -h 10.3.7.22 -p 6800  info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:8
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.3.7.22:7001,slaves=2,sentinels=3

第6章 綁定vipredis主服務器

6.1我的vip是騰訊上買的,因爲服務器是騰訊雲的服務器

手動將vip綁定到主服務器上,因爲是第一次綁定,後面故障的話回自動進行切換

ip addr add 10.3.11.11/24 dev eth0

arp抑制

/usr/sbin/arping -c 1 -I eth0 -U 10.3.11.11

配置好vip以後,需要查看redis服務綁定的端口是否爲0.0.0.0,即redis配置文件中bind是否爲全部綁定

第7章 通過vip連接進行測試

查看redis集羣狀態

redis-cli -h 10.3.11.11 -p 7001 -a kkQZ4_JkjcZN info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.3.7.25,port=7001,state=online,offset=84533,lag=0
slave1:ip=10.3.7.28,port=7001,state=online,offset=84533,lag=0
master_repl_offset:84533
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84532

查看sentinel狀態

redis-cli -h 10.3.11.11 -p 6800  info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.3.7.22:7001,slaves=2,sentinels=3

第8章 故障測試:

8.1kill掉主機點的redis模擬故障

[root@test-ops-redis-mha-1 opt]# ps -ef |grep redis
redis    9758     1  0 17:21 ?        00:00:00 /bin/redis-server 0.0.0.0:7001
root     9925 24205  0 17:23 pts/0    00:00:00 grep --color=auto redis
root    28539     1  0 14:47 ?        00:00:11 redis-sentinel 0.0.0.0:6800 [sentinel]
[root@test-ops-redis-mha-1 opt]# kill -9 9758

8.2vip已經漂移過去了

[root@test-ops-redis-mha-2 opt]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
   link/ether 52:54:00:bb:87:ec brd ff:ff:ff:ff:ff:ff
    inet 10.3.7.25/24 brd 10.3.7.255 scope global eth0
      valid_lft forever preferred_lft forever
    inet 10.3.11.11/24 scope global eth0
      valid_lft forever preferred_lft forever

8.3連接vip測試

[root@test-ops-redis-mha-1 opt]# redis-cli -h 10.3.11.11 -p 7001 -a kkQZ4_JkjcZN info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.3.7.28,port=7001,state=online,offset=5628,lag=0
master_repl_offset:5764
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:5763


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章