设为首页 收藏本站
查看: 649|回复: 0

[经验分享] keepalived实现lvs双主架构及状态切换的通知

[复制链接]

尚未签到

发表于 2018-12-30 06:10:50 | 显示全部楼层 |阅读模式
  理论部分:
  keepalived:为lvs开发的(director: HA  ipvs rules, health check),能够为LVS生成规则,并检测后部real server的健康状态。主要是在两个或多个节点上实现vrrp协议选举机制。主节点称为Master,从节点称为Backup。它也可以为其它服务做高可用。
    
  vrrp 虚拟冗余路由协议 (virtual redundent routing protocol),在两台或多台设备上配置同一个虚拟IP地址和虚拟MAC地址,在实际工作时,这些设备根据某种法则选举出一个主设备,当主设备故障时,其它设备会再根据某种法则选举出另一个主设备。这样在一台节点挂掉后,会有从节点设备顶上,就实现了路由设备的高可用。客户端需要把网关配置成虚拟IP就可以。
  Keepalived在配置好所的节点同时启动时,所有节点都工作在从节点模式,这时都无法响应请求,所有节点会根据事先定义的优先级来计算出那个节点是主节点。优先级从1到255间的数值,数据越大优先级越高。当选举了主节点后,主节点才可以响应用户的请求。不过只有主节点才可以响应用户的请求。在选举主节点的过程中,如果大家的优先级一样,就会根据各自的IP来比较,IP大的优先级高。选举出主节点后,主节点会每隔一定的时间向其它备节点通告心跳信息,通告时会带有优先级。从节点在收到通告后,会拿到通告中的优先级和自己的优先级做比较,一但发现自己的优先级比心跳信息中的优先级高,就会取而代之成为主节点。当挂掉的主节点重新上线,这时是否会把主节点抢过来,就需要事先定义Keepalived是否为抢占模式preempt 抢占模式和nopreempt 非抢占模式。在虚拟IP切换时会有切换时间,切换过程中会造成无法响应客户端的请求。因为一个虚拟IP同时只能让一台设备工作,从设备只能做备份,为了让从也备也分摊一部分流量可以做多组虚拟IP。每个设备都是主节点,所有节点间相互做备份。每组虚拟路由间用虚拟路由器标示(VRID)。VRID用数据标识,1到255之间的数字。
  Keepalived软件的组件
  IPVS:用来和ipvs接口交互的工具,为ipvs应用生成的规则。
  NETLINK:通过NETLINK组件来配置网络接口,和监控网络接口。
  IPVS wrapper:为ipvs生成规则,并借助Checkers监视后端的real server。
  Nnetlink Reflector:向其它节点发送通告信息
  VRRP Stack:Keepalived的VRRP实现
  Checkers:用来为ipvs生成的规则中的各real server健康状态检测的。可以基于tcp检测,可以根据应用层协议检测。
  WatchDog:用来检测Keepalive各个工作组件的健康状态。各个组件会每隔一定的时间向WatchDog通告下自己,如果长时间没有收到通告,WatchDog会重启这个没有发送通告的组件。它存在的主要是用来实现不会因为Keepalived内部问题导致集群不正常。
  

  Keepalived 是一个轻量级调度器,适用场景:lvs , nginx代理,haproxy代理。
  

  节点的状态:
  master        主节点状态
  backup      从状态
  Initialized  初始化状态,keepalived服务刚启动时的状态。
  -------------------------------------------------------------------------------------------
  操作部分
  -------------------------------------------------------------------------------------------
  实验拓扑图

  实验环境:
  1,4台服务器操作系统为centos6.5。
  2,两台webserver为httpd,使用yum安装。并且测试可以正常访问web服务。
  3,两台lvs节点keepalived使用yum安装。
  4,lvs使用dr模式工作。
  5,客户机是一台win8。
  6,每个lvs节点定义sorry server为本机。
  实验目标:
  1,使用keepalived实现lvs的高可用,并且监测后端real server的健康状态。
  2,了解keepalived的工作原理和适用场景。
  -------------------------------------------------------------------------------------------
  配置大体过程:
  1,为两台web服务器安装启动httpd服务,并配置vip。
  2,为两台lvs服务器安装并配置keepalived。
  3,测试各个配置是否正常工作

  4,为两台keepalived配置状态切换后的报警机制

  -------------------------------------------------------------------------------------------
  首先保证两台服务器web访问正常,sorry server也可以正常作。
  为两台web服务器分别配置vip,先定义linux内核对于arp协议的响应方式。

# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore            
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  配置虚拟ip,并且指定请求是那个Ip,响应时就使用那个ip响应。
# ifconfig lo:0 192.168.1.16 netmask 255.255.255.255 broadcast 192.168.1.16
# ifconfig lo:1 192.168.1.18 netmask 255.255.255.255 broadcast 192.168.1.18
# route add -host 192.168.1.16 dev lo:0 # route add -host 192.168.1.18 dev lo:1      注意: 为了重启后配置生效,需要把这些写到配置文件中。或都写一个脚本,开机自动设定配置信息也可。
  为两台lvs服务器分别安装keepalived,并且编辑配置文件。
# yum -y install keepalived  第一个lvs的主配置文件内容如下。
! Configuration File for keepalived
global_defs {
   notification_email {
admin@wukui.com
   }
   notification_email_from lvsadmin@wukui.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DIRECTOR
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
192.168.1.16/24
    }
}
virtual_server 192.168.1.16 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80
    net_mask 255.255.255.0
    real_server 172.16.2.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 172.16.2.17 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 2
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
192.168.1.18/24
    }
}
virtual_server 192.168.1.18 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 1
    protocol TCP
    sorry_server 127.0.0.1 80
    net_mask 255.255.255.0
    real_server 172.16.2.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 172.16.2.17 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}第二个lvs节点配置内容如下
! Configuration File for keepalived
global_defs {
   notification_email {
admin@wukui.com
   }
   notification_email_from lvsadmin@wukui.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DIRECTOR
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
192.168.1.16/24
    }
}
virtual_server 192.168.1.16 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80
    net_mask 255.255.255.0
    real_server 172.16.2.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 172.16.2.17 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 2
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
192.168.1.18/24
    }
}
virtual_server 192.168.1.18 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 1
    protocol TCP
    sorry_server 127.0.0.1 80
    net_mask 255.255.255.0
    real_server 172.16.2.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 172.16.2.17 80 {
        weight 1
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}LVS两台节点配置好Keepalived后分别启动。启动命令:
# service keepalived start       注:keepalived启动后的详细工作日志都记录在/var/log/messages中。可以使用tail -f /var/log/messages 监视。
keepalived启动后开启做相应的测试工作:    1,关闭其中一台keepalived服务,到另一台节点上查看是否把资源转移到了本机上。查看方法:        使用:ip addr show 命令来查看vip是否配置在本地,或查看日志的详细记录    2,在客户端浏览器分别访问 192.168.1.16 和 192.168.1.18 ,确定可以访问到。按上面的配置,lvs负载均衡有持久会话,所以大概在一分钟以内同一个客户端会一直打开一个real server的页面。    3,把后端所有real server 服务器的httpd进程关闭,然后再访问vip,测试 sorry server是否可以正常工作。
在上面的配置中还没有加入keepalived主从切换或都出现错误的报警通知。需要再两台节点的主配置文件中每个实例中加入以下配置。这个配置根据实际情况是否需要来配置。很多情况下,监控软件定义发送邮件报警级别设置不当,导致我们运维人员收到的邮件过多,看不过来还不如不报警呢!下面为示例:vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 2
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.18/24
    }
    notify_master "/bin/echo '节点1状态切换到master' | mail -s '节点1状态切换' root@localhost"
    notify_backup "/bin/echo '节点1状态切换到backup' | mail -s '节点1状态切换' root@localhost"
    notify_fault "/bin/echo '节点1状态切换到fault' | mail -s '节点1状态切换'root@localhost"
}    测试,在命令行中使用mail命令查看邮件是否收到。这里只是发给本机。
    根据节点状态切换可以触发某一个操作,就可以定义自己的脚本来完成很多任务,想向空间无限大!!!






  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657339-1-1.html 上篇帖子: CentOS6.6环境下布署LVS+keepalived 下篇帖子: Centos7系统keepalived备机启动后自动从backup切换成master
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表