和前边一样,我这里只说配置redis高可用的步骤,不再讲解原理以及执行流程方面的知识, 关于keepalived的原理以及执行流程,请参考我的其他文章。
机器:
ip | linux发行版版本 | 备注 |
10.253.12.10 | CentOS Linux release 7.0 (Core) | MASTER,下文简称10 |
10.253.12.30 | CentOS Linux release 7.0 (Core) | BACKUP,下文简称30 |
一、10上的keepalived的配置文件 vi /etc/keepalived/keepalived.conf:
! Configuration File for keepalived global_defs { router_id zaspark02 #当前机器标识 } vrrp_script monitor_redis { script "/etc/keepalived/script/redis_monitor.sh" interval 3 } vrrp_instance VI_1 { state MASTER #主MASTER 从BACKUP interface eth0 #ifconfig 得到,机器不同可能不同 virtual_router_id 51 priority 100 #1-254 ,从需要小于主 #单播开始 unicast_src_ip 10.253.12.10 unicast_peer { 10.253.12.30 } #单播结束 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.253.12.22 } track_script { monitor_redis } notify_backup "/etc/keepalived/script/redis_backup.sh" notify_master "/etc/keepalived/script/redis_master.sh" }
二、30上的/etc/keepalived/keepalived.conf:
! Configuration File for keepalived global_defs { router_id zaspark01 #当前机器标识 } vrrp_script monitor_redis { script "/etc/keepalived/script/redis_monitor.sh" interval 3 } vrrp_instance VI_1 { state BACKUP #主MASTER 从BACKUP interface eth0 #ifconfig 得到,机器不同可能不同 virtual_router_id 51 priority 90 #1-254 ,从需要小于主 #单播开始 unicast_src_ip 10.253.12.30 unicast_peer { 10.253.12.10 } #单播结束 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.253.12.22 } track_script { monitor_redis } notify_backup "/etc/keepalived/script/redis_backup.sh" notify_master "/etc/keepalived/script/redis_master.sh" }
三、redis_monitor.sh,10和30上的内容是一样的:
#!/bin/bash . /etc/profile . ~/.bashrc logdate=`date "+%Y-%m-%d %H:%M:%S"` logfile="/etc/keepalived/script/redis_monitor.log" ret=$(/usr/local/redis/bin/redis-cli ping) if [ "$ret" = "PONG" ];then echo "$logdate redis running">>$logfile exit 0 else echo "$logdate redis not running,stop keepalived start...">>$logfile service keepalived stop echo "stop keepalived end">>$logfile echo "make sure kill redis start...">>$logfile ps -ef|grep -v grep|grep redis-server|awk '{print $2}'|xargs kill -9 echo "kill -9 redis-server end">>$logfile exit 1 fi
四、redis_master.sh,10和30上的内容是一样的:
#!/bin/bash . /etc/profile . ~/.bashrc logdate=`date "+%Y-%m-%d %H:%M:%S"` redispath=/usr/local/redis/bin/ logfile="/etc/keepalived/script/redis_master.log" echo "$logdate set master:slaveof no one" >> $logfile $redispath/redis-cli slaveof no one
说明:这里直接通过slaveof no one使当前redis变为主,10和30上的redis本身不需要做其他特殊配置(两台redis不需要配置主从,因为脚本里面已经通过slaveof no one 或者slaveof xx设置了)
五、redis_backup.sh,注意这里10的内容和30上的内容是不一样的,因为这里需要设置谁是谁的从redis:
#!/bin/bash . /etc/profile . ~/.bashrc logdate=`date "+%Y-%m-%d %H:%M:%S"` redispath=/usr/local/redis/bin/ #10上是10.253.12.30 6379 mymaster="10.253.12.10 6379" logfile="/etc/keepalived/script/redis_backup.log" echo "$logdate set backup:slaveof $mymaster" >> $logfile $redispath/redis-cli slaveof $mymaster
六、创建目录:
mkdir -p /etc/keepalived/script
七、把这3个脚本放到/etc/keepalived/script目录下以供调用
八、进入到脚本所在目录:
cd /etc/keepalived/script
九、赋予可执行的权限:
chmod 777 redis_*.sh
十、分别启动和停止10和30上的redis与keepalived服务,查看redis_monitor.log等日志的变化以及keepalived的日志/var/log/messages是否符合预期,并使用提供的虚拟ip(这里是10.253.12.22)访问redis验证是否可以访问。