Chinaunix首页 | 论坛 | 博客
  • 博客访问: 489847
  • 博文数量: 99
  • 博客积分: 3621
  • 博客等级: 中校
  • 技术积分: 1089
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 16:29
文章存档

2012年(21)

2011年(28)

2010年(50)

分类: Mysql/postgreSQL

2011-07-27 14:56:26

  1. 使用keepalived 实现MYSQL 高可用
  2. keepalived 下载地址:http://www.keepalived.org/download.html

  3. master:192.168.215.80
  4. slave :192.168.215.28
  5. VIP :192.168.215.34

  6. 安装 keepalived
  7. #=======================================================================
  8. 1:#wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
  9. 2:#tar zxvf keepalived-1.1.20.tar.gz
  10. 3:#cd keepalived-1.1.20
  11. 4:#./configure
  12. 在这一步,可能看到的是如下:
  13. #========================================================================
  14. Keepalived configuration
  15. ------------------------
  16. Keepalived version : 1.1.20
  17. Compiler : gcc
  18. Compiler flags : -g -O2
  19. Extra Lib : -lpopt -lssl -lcrypto
  20. Use IPVS Framework : No
  21. IPVS sync daemon support : No
  22. Use VRRP Framework : Yes
  23. Use Debug flags : No
  24. #==========================================================================
  25. 出现3个NO,一个YES。解决的办法是编译时带上内核文件夹重新编译
  26. # ./configure --with-kernel-dir=/usr/src/kernels/2.6.18-194.26.1.el5-x86_64/
  27. Keepalived configuration
  28. ------------------------
  29. Keepalived version : 1.1.20
  30. Compiler : gcc
  31. Compiler flags : -g -O2
  32. Extra Lib : -lpopt -lssl -lcrypto
  33. Use IPVS Framework : Yes
  34. IPVS sync daemon support : Yes
  35. Use VRRP Framework : Yes
  36. Use Debug flags : No
  37. #==========================================================================
  38. 5:#make && make install
  39. #=======================================================================
  40. 到这里,安装完成。下面写配置文件。

  41. 配置 keepalived(master,192.168.215.80)
  42. #=======================================================================
  43. #mkdir /etc/keepalived #默认的配置文件获取的路径
  44. #vi /etc/keepalived/keepalived.conf #配置文件的名称(把下面复制即可)
  45. ! Configuration File for keepalived
  46. global_defs { #全局定义
  47.      notification_email { #告警邮件地址组(故障发邮件在这里没有测试,我把它放到健康检查脚本里面了)
  48.      brucezuo@msn.cn #发生故障,发告警的邮件地址,一般不用,可以随便写
  49.      }
  50.      notification_email_from brucezuo@msn.cn #邮件发送地址
  51.      smtp_server 127.0.0.1 #SMTP服务器IP
  52.      smtp_connect_timeout 30 #邮件服务器连接超时最长时间
  53.      router_id MySQL-ha #路由标识。在全局定义里只有这个是必须的,其他都可以不要。
  54.      }
  55. vrrp_script check_mysql_alived { #检查MYSQL状态的函数(注意这里的花括号和名称之间有空格)
  56.     script "/root/mysql-moniter.sh" #这里定义脚本,注意本行需要缩进,我原来没注意,在这上面整了很长时间。可以在这个脚本里检查MYSQL是否还活着,服务器的负载是否过高等,以及什么条件做什么操作。
  57.         interval 1 #运行上面检查脚本的时间间隔,单位为妙。keepalive的守护进程执行这个脚本
  58.         weight 5 #本脚本的运行权重,权重越高的,越优先检查(只有一个检查脚本,就无所谓了)
  59. }
  60. vrrp_instance VI_1 {
  61.      state BACKUP #两台配置此处均是BACKUP,一台宕机,另外一台把VIP抢过去。
  62.      interface eth1 #在这里要注意,虚拟IP用的是哪个网卡进行通讯。我这里机器上的eth1是内网的,eth0是外网的。
  63.      virtual_router_id 51 #虚拟路由ID。这个标识是同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。
  64.                                         #keepalived通过发送和接受组广播包中的同一个virtual_router_id中的成员的存活,来确定对方的不可用,一旦检测到对方不可用,立即切换他的备份角色为主。
  65.      priority 100 #权重,数值越大,权重越大,Master必须大于Slave。另一台改为90。
  66.      advert_int 1 #Master和Slave负载均衡器之间同步检查的时间间隔,单位:秒
  67.      #nopreempt #抢占,在MASTER恢复后,把VIP抢过来。在SLAVE端也一样,如果MASTER出问题了,SLAVE就把VIP抢过来。
  68.      authentication { #Master和Slave之间认证的方式
  69.      auth_type PASS
  70.      auth_pass 1111 #认证的密码
  71.      }
  72.      track_script{ # 使用的VRRP脚本(检查健康脚步),上面是定义,这里是使用。
  73.          check_mysql_alived
  74.      }
  75.      virtual_ipaddress { #VIP的地址
  76.          192.168.215.34
  77.      }
  78.      }
  79.    
  80. virtual_server 192.168.215.34 3306 {
  81.      lb_algo wrr #LVS算法
  82.      lb_kind DR #LVS模式
  83.      persistence_timeout 60 #会话保持时间,单位为秒,当用户从远程帐号过行登陆网站时,有了这个会话保持功能,就能把用户的请求转发到同一个应用服务器
  84.      protocol TCP
  85.      real_server 192.168.215.80 3306 { #真实IP(每台机器必须指定各自的真实IP)
  86.      TCP_CHECK {
  87.      connect_timeout 10 #连接超时时间
  88.      nb_get_retry 3 #重连次数
  89.      delay_before_retry 3 #重连间隔时间
  90.      connect_port 3306 #健康检查端口
  91.              }
  92.          }
  93.      }
  94. #==========================================================================
  95. MATER端配置到此结束。
  96. 编写健康服务检测的脚本
  97. #==========================================================================
  98. [root@l10ntermwiki bruce]# cat mysql-moniter.sh
  99. #monitor mysql service status and server load
  100. #!/bin/bash
  101. function Send_Email() #发邮件的函数。
  102. {
  103. ADMIN="brucezuo@msn.cn"
  104. MESSAGE_FILE="/tmp/monitor.log" #邮件里面带上本机IP地址和时间,信息更明确。
  105.         echo "VIP has been changed AT `date`,IP:`cat /etc/hosts |grep -v "127.0.0.1"|awk '{print $1}'`,please check it. Message:$1" > $MESSAGE_FILE
  106.         /bin/mail -s "VIP has been changed" $ADMIN < $MESSAGE_FILE
  107. rm -r $MESSAGE_FILE
  108. }

  109. CPU_NUMBER=`cat /proc/cpuinfo |grep processor |wc -l` #获取CPU个数。
  110. MAX_LOAD=`echo $CPU_NUMBER*2|bc` #最大负载认为是CPU*2。设置成CPU个数更好。

  111. if [ `service mysql status |awk '{print $2}'` = 'running' ] #检查mysql是否活着,这里用mysql作为服务名称,有些用mysqld作为服务名称。
  112. then
  113.    LOAD=`uptime`
  114.    LOAD=${LOAD##* }
  115. # if [ `expr $LOAD \< $CPU_LOAD` = 1 ] # another method,compare integer and decimal
  116.    if [ `echo "$LOAD > $MAX_LOAD" | bc` = 1 ] #如果负载过高。
  117.    then
  118.       pkill keepalived # if load is greater than max load then kill keepalived,take VIP point to another server.
  119.       Send_Email "Mysql is alived,Average load is busy,so kill keepalived"
  120.    fi
  121. else #mysql服务挂了,VIP漂移走。
  122.    pkill keepalived # if mysql service is not running ,then kill keepalived,take VIP point to another server.
  123.    Send_Email "Mysql service is not alived,so kill keepalived."
  124. fi
  125. echo `date`>>/tmp/pk.log #这里只是为了检查脚本是否被正常执行,实际使用删除掉。
  126. #健康检查脚本完毕。
  127. #chmod +x /home/bruce/MySQL.sh #分配执行权限

  128. #==========================================================================
  129. 启动keepalvice
  130. #==========================================================================
  131. [root@ldc2095 keepalived-1.1.20]# keepalived -D #-D参数,会把日志记录到/var/log/message里面
  132. [root@ldc2095 keepalived-1.1.20]# ps aux |grep keep
  133. root 10862 0.0 0.0 35844 624 ? SNs 21:34 0:00 keepalived -D
  134. root 10863 0.0 0.0 37936 1548 ? SN 21:34 0:00 keepalived -D
  135. root 10864 0.0 0.0 37936 1016 ? SN 21:34 0:00 keepalived -D
  136. root 24121 0.0 0.0 61180 776 pts/0 SN+ 21:40 0:00 grep keep

  137. #===========================================================================
  138. 另外一个机器的配置和上面的一样。除了修改修改的几个地方。
  139. 健康检查脚本也一致。
阅读(1318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~