Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96275
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-07 01:56
个人简介

数据库技术爱好者

文章分类

全部博文(20)

文章存档

2016年(11)

2015年(9)

我的朋友

分类: LINUX

2015-12-11 00:57:17

    Keepalived是一套基于虚拟路由协议 (Virtual Router Redundancy Protocol,简称VRRP)的高可用方案,被布署在相应服务器,以服务形式运行,在局域网内,根据keepalived instance配置的相同路由ID 组成虚拟路由组,虚拟路由组成员可以被配置1主N从(还真没见过N大于1的案例,往往是1主1从,穷啊),维护着一个虚拟IP,可以根据instance优先级来决定其归属,instance 可以与具体应用绑定,当应用不可用时,将VIP移除,由原先待命的slave接管并继续使用该VIP进行IP数据包转发,对外提供服务,从而实现应用高可用。
    Keepalived的安装很简单:

点击(此处)折叠或打开

  1. [root@lvcx01 ~]# cd /usr/local/src/keepalived-1.2.12/
  2. [root@lvcx01 keepalived-1.2.12]# ./configure  --prefix=/server/keepalived
  3. [root@lvcx01 keepalived-1.2.12]# make && make install
  4. [root@lvcx01 ~]# cp  -r  /server/keepalived/etc/rc.d/init.d/keepalived    /etc/init.d/
  5. [root@lvcx01 ~]# cp -r  /server/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
  6. [root@lvcx01 ~]# cp -r /server/keepalived/sbin/keepalived  /usr/sbin/
   重要的是通过配置keepalived,理解其使用方法,个人关于keepalived的具体使用方式分为两种,一种是keepalived只用来维护vip,由外部脚本来控制keepalived的存活,将keepalived关闭,其占用的vip会飘移到从上面,例如使用MHA做MySQL高可用时可以引入keepalived并采用这种方式,只需要在MHA管理节点配置文件中定义相关脚本,并按照相应格式编写好相应脚本,当进行故障切换时执行,由新master接管VIP,对外提供写;第二种是在keepalived配置文件中定义相关脚本,按照一定频率运行,该脚本运行检测应用后返回不同值,keepalived会根据返回值作出相应处理,利用返回值为1时代表应用不可用,会将vip释放,当然该脚本检测到应用不可用时,可以直接将keepalived服务关闭,简单粗暴,就看脚本怎么写了,下面是我写的配置文件,一主一从,以及相应的检测脚本,当keepalived启动时注意查看日志,确定配置是否正确,vip的占用,以及脚本执行情况。

主节点keepalived配置文件及检测脚本

点击(此处)折叠或打开

  1. [root@lvcx01 ~]# cat /etc/keepalived/keepalived.conf
  2. vrrp_script check_app {
  3. script "/opt/check_app.sh"
  4. interval 2
  5. }
  6. global_defs {
  7. notification_email {
  8. changxin.lv@126.com
  9. }
  10. notification_email_from dba@dbserver.com
  11. smtp_server 127.0.0.1
  12. smtp_connect_timeout 30
  13. router_id My-HA
  14. }
  15. vrrp_instance VI_1 {
  16. state BACKUP   //两边都设为BACKUP主要是因为我不想让原先的主因为优先级高,在恢复后将VIP重新接管,当然你也可为更改为MASTER
  17. interface eth0
  18. virtual_router_id 51  //router_id,局域网内相同ID组成虚拟路由组
  19. priority 150
  20. advert_int 1
  21. nopreempt
  22. authentication {
  23. auth_type PASS
  24. auth_pass 1111
  25. }
  26. virtual_ipaddress {
  27. 192.168.226.88
  28. }
  29. track_script {
  30. check_app  //引用上面定义的vrrp_script
  31. }
  32. }

点击(此处)折叠或打开

  1. ##脚本写得有点糙,但大致是那么个意思
  2. [root@lvcx01 ~]# cat /opt/check_app.sh 
  3. #!/bin/bash
  4. cmd=/usr/bin/nmap
  5. $cmd localhost -p 80|grep -i 'open' >/dev/null
  6. if [ $? == 0 ]
  7. then
  8. echo 'open'
  9.  exit 0
  10. else
  11. echo 'error'
  12.  exit 1  //当应用不可用,返回1
  13. fi


点击(此处)折叠或打开

  1. [root@lvcx02 ~]# cat /etc/keepalived/keepalived.conf
  2. vrrp_script check_app {
  3. script "/opt/check_app.sh"
  4. interval 2
  5. }
  6. global_defs {
  7. notification_email {
  8. changxin.lv@126.com
  9. }
  10. notification_email_from dba@dbserver.com
  11. smtp_server 127.0.0.1
  12. smtp_connect_timeout 30
  13. router_id My-HA
  14. }
  15. vrrp_instance VI_1 {
  16. state BACKUP
  17. interface eth0
  18. virtual_router_id 51
  19. priority 120
  20. advert_int 1
  21. nopreempt
  22. authentication {
  23. auth_type PASS
  24. auth_pass 1111
  25. }
  26. virtual_ipaddress {
  27. 192.168.226.88
  28. }
  29. track_script {
  30. check_app
  31. }
  32. }
补充:可以定义多个vrrt_instance,vrrt_script分别绑定不同的服务,实现多个服务的高可用。

阅读(1676) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~