redis sentinel + keepalived

keepalived配置

global_defs {
   router_id REIDS_ROUTE
}

vrrp_instance check_redis {
    script "/uc/bin/redis_check_status.sh"
    interval 4
    weight 5
    fall 3
    rise 2
}
vrrp_instance VI_REDIS_ROUTE {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.2.99
    }
#    track_script {
#        check_redis
#    }
#    notify_master
#    notify_slave
#    notify_fault
#    notify_stop
}
redis_check_status.sh
 1 #!/bin/bash
 2 REDIS_PASSWD="test"
 3 REDIS_HOME="/usr/local/redis"
 4 CHECK_STATUS=`$REDIS_HOME/bin/redis-cli -a $REDIS_PASSWD PING`
 5 
 6 if [ $CHECK_STATUS = "PONG" ]
 7 then
 8     echo $CHECK_STATUS
 9     exit 0
10 else
11     echo $CHECK_STATUS
12     service keepalived stop
13     exit 1
14 fi
 

keepalived_state.py

 1 #!/usr/bin/env python3
 2 
 3 import sys
 4 import os
 5 import shlex
 6 import datetime
 7 import time
 8 
 9 vip = "172.16.2.99/24"
10 eth = "eth0"
11 redis_home = "/usr/local/redis"
12 redis_passwd = "test"
13 redis_status_flag = "PONG"
14 redis_role_flag = "master"
15 redis_keepalived_log_path = '/'.join([redis_home,"var","logs","Redis_keepalived_status.log"])
16 
17 def get_cmd_data_result(cmd):
18     data = cmd.readlines()
19     if data == None:
20         result = []
21     else:
22         result = shlex.split(data[0])
23     return result
24 
25 def get_vip_addr_info(ip):
26     cmd_data = os.popen("/sbin/ip addr list | grep " + ip)
27     result_list = get_cmd_data_result(cmd_data)
28     return result_list
29 
30 def set_vip_addr(ip):
31     os.popen("/sbin/ip addr add " + ip + " dev " + eth)
32 
33 
34 def del_vip_addr(ip):
35     os.popen("/sbin/ip addr del " + ip + " dev " + eth)
36 
37 def get_redis_status(cmd):
38     cmd_data = os.popen(redis_home + "/bin/redis-cli " + "-a " + redis_passwd + " " + cmd )
39     result_list = get_cmd_data_result(cmd_data)
40     return result_list
41 
42 def get_redis_role(cmd):
43     cmd_data = os.popen(redis_home + "/bin/redis-cli " + "-a " + redis_passwd + " " + cmd  + "|" + "grep " + "role" )
44     result_list = get_cmd_data_result(cmd_data)
45     return result_list
46 
47 def file_write(data,file):
48     with open(file,'a+') as f:
49         f.write(data + "\n")
50 
51 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
52 redis_status = get_redis_status("PING")
53 redis_role = get_redis_role("INFO")[0].split(":")[1]
54 redis_info = ["Redis server is avaliable!","Redis server is not running!",
55             "there is a virtual ip address(172.16.2.99) on Redis server!","there is not virtual ip address(172.16.2.99) on Redis server!",
56             "Redis server is on master mode!","Redis server is on slave mode!"]
57 
58 if redis_status_flag in redis_status:
59     file_write(' '.join([current_time,redis_info[0]]),redis_keepalived_log_path)
60     if redis_role == redis_role_flag:
61         file_write(' '.join([current_time,redis_info[4]]),redis_keepalived_log_path)
62         if vip in get_vip_addr_info(vip):
63             file_write(' '.join([current_time,redis_info[2]]),redis_keepalived_log_path)
64         else:
65             file_write(' '.join([current_time,redis_info[3]]),redis_keepalived_log_path)
66             set_vip_addr(vip)
67     else:
68         file_write(' '.join([current_time,redis_info[5]]),redis_keepalived_log_path)
69         if vip in get_vip_addr_info(vip):
70             file_write(' '.join([current_time,redis_info[2]]),redis_keepalived_log_path)
71         else:
72             file_write(' '.join([current_time,redis_info[3]]),redis_keepalived_log_path)
73             del_vip_addr(vip)
74 
75 else:
76     file_write(' '.join([current_time,redis_info[1]]),redis_keepalived_log_path)
77     if vip in get_vip_addr_info(vip):
78         file_write(' '.join([current_time,redis_info[2]]),redis_keepalived_log_path)
79     else:
80         file_write(' '.join([current_time,redis_info[3]]),redis_keepalived_log_path)
81         del_vip_addr(vip)

 配置定时任务

该定时任务第10秒执行“keepalived_state.py”脚本

1 * * * * * /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
2 * * * * * sleep 10 && /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
3 * * * * * sleep 20 && /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
4 * * * * * sleep 30 && /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
5 * * * * * sleep 40 && /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
6 * * * * * sleep 50 && /usr/local/python3/bin/python3 /uc/bin/keepalived_state.py 2>&1 /dev/null
 

猜你喜欢

转载自www.cnblogs.com/lmgsanm/p/9479375.html