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