} } }
keepalived的master的MISCH_CHECK监测脚本
#!/usr/bin/python import sys,commands
cmd=\info\是输入的参数,sys.argv[0]是需要执行的命令,以后才是参数。1是ip,2是端口 str=commands.getoutput(cmd) ismaster=-100
ismaster=str.count(\原来是使用index方法,但是找不到字符串时会报错 zero=0
if ismaster>zero:
sys.exit(0) #返回0在keepalived表示健康 else:
sys.exit(1) #返回1表示keepalived检测端口不健康
更多MISC_CHECK参考见http://bbs.ywlm.net/thread-845-1-1.html
redis维护脚本redis_up.sh用在检测到服务启动时
#!/usr/bin/env bash
/usr/local/bin/redis-cli -h $argv[1] -p 6379 config set appendonly no
redis设置与sentinel设置无变化
需要特别注意的配置,如果没有这个配置就会发生keepalived不转发的的问题,而且是如果redis和keepalive是同一台机器,会转发,但是如果相互间独立,则realserver收不到转发包
配置master
vim /etc/sysctl.conf,添加内容如下
net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
执行命令
sysctl -p
ip addr add 192.168.0.7/32 dev lo ip addr add 192.168.0.8/32 dev lo
ip add list
lo环上出现了指定的ip即可
配置slave1
vim /etc/sysctl.conf,添加内容如下
net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
执行命令
sysctl -p
ip addr add 192.168.0.7/32 dev lo ip addr add 192.168.0.8/32 dev lo
ip add list
配置slave2
vim /etc/sysctl.conf,添加内容如下
net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
执行命令 sysctl -p
ip addr add 192.168.0.7/32 dev lo ip addr add 192.168.0.8/32 dev lo
ip add list
========================================================================================== 硬件 机器名 IP master 192.168.0.2 slave1 192.168.0.3 slave2 192.168.0.4 route1 作用 redis的master服务器 redis的slave服务器 redis的slave服务器 192.168.0.5【虚拟IP:keepalived和redis sentinel服务器,承载写redis的192.168.0.7】 VIP【虚拟ip】,做写的双机热备的主master指定 route2 192.168.0.6【虚拟IP:keepalived和redis sentinel服务器,承载读redis的192.168.0.8】 VIP,做读的负载均衡和写的双机热备的master备份路由指定
安装与配置见此文安装与配置 详细的keepalived配置,route1
[plain] view plaincopy 1. ! Configuration File for keepalived 2.
3. global_defs {
4. notification_email { 5. 邮箱 6. }
7. notification_email_from 邮箱 8. smtp_server 邮箱服务器地址 9. smtp_connect_timeout 30 10. router_id LVS_DEVEL 11. }
12. vrrp_instance VI_1 { 13. state MASTER
14. interface eth0 #eth0是要绑定的网卡
15. virtual_router_id 100 #同一个vrrp_instance中的值必须一样 16. priority 160 #master的值要高于backup的 17. advert_int 1 18. authentication { 19. auth_type PASS 20. auth_pass 1111 21. }
22. virtual_ipaddress {
23. 192.168.0.7 #用于双机热备的虚拟ip 24. } 25. 26. }
27. virtual_server 192.168.0.7 6379 { 28. delay_loop 3 29. lb_algo wrr 30. lb_kind DR
31. persistence_timeout 30 32. protocol TCP
33. real_server 192.168.0.2 6379 { 34. weight 8
35. notify_down redis服务失败后要执行的脚本的路径/脚本名 #服务失败后要执行的
脚本
36. TCP_CHECK { 37. connect_timeout 1 38. nb_get_retry 3 39. delay_before_retry 3 40. connect_port 6379 41. } 42. } 43. }
route2的配置文件 [plain] view plaincopy 1. ! Configuration File for keepalived 2.
3. global_defs {
4. notification_email { 5. 邮箱 6. }
7. notification_email_from 邮箱 8. smtp_server 邮箱服务器地址 9. smtp_connect_timeout 30 10. router_id LVS_DEVEL 11. } 12.
13. vrrp_instance VI_1 { 14. state MASTER
15. interface eth0 #eth0是要绑定的网卡
16. virtual_router_id 100 #同一个vrrp_instance中的值必须一样 17. priority 160 #master的值要高于backup的 18. advert_int 1 19. authentication { 20. auth_type PASS 21. auth_pass 1111 22. }
23. virtual_ipaddress {
24. 192.168.0.7 #用于双机热备的虚拟ip 25. }
26. notify_master \ 27. }
28. vrrp_instance VI_2 {
29. state MASTER #将此slave作为读数据的master 30. interface eth0 31. virtual_router_id 101