keepalived高可用

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

  LVS集群的实现,是由多台设备如httpd,nginx主机,php-fpm动态资源主机,MySQL主机,以及Session Server等主机交织构成的,随着访问资源量的日益增加而呈向外扩展的模式,而在这样的LVS模式下,主要的设备就是调度器与后端RS,这两者的能否正常运行决定了我们所架设的服务能否正常提供服务;所以针对于调度器Directory与真实机RS的高可用是势在必行的,但是LVS本身并没有提供高可用的;

  keepalived,实现LVS的高可用,针对于Directory的高可用与后端的RS健康检测,由我们自己设定检测间隙时间;而keepalived这种高可用机制其实是基于vrrp协议来运行的,vrrp协议,又为虚拟冗余路由协议;其主要运行原理如两台路由器,对外表示为一台路由器,即使用一个虚拟的IP地址VIP作为该路由器对外的IP地址,外部其他主机的网关,将两台路由器一个设置为MASTER,一个设置为BACKUP;MASTER作为对外的路由器,将虚拟IP地址给予该路由器,而BACKUP路由器则作为备份路由器存在,在MASTER工作时并不占用任何资源,而当MASTER路由器出现问题down掉的时候,BACKUP路由器就会出来充当MASTER路由器,将虚拟IP地址重新分配给他,并向网络中发布一条免费的arp报文,这个免费报文主要是发送其新生成的MASTER的MAC地址,新的MAC地址格式大概为00-00-5E-00-01-{VRID},通告其路由变换,告诉网络中的主机现在这个路由器是我;如果有多个BACKUP时,则需要进行BACKUP之间的选举操作,即根据BACKUP之间的优先级进行选择;在一同一组的路由器上都会存在一个虚拟ID,VRID,用于标识这个路由是这个组中的一员,这样才能在组中进行选举;

  优先级:选举成为MASTER的主要参考标准,取值范围是0-255

  0:表示该路由器不参与选举,除非所有路由器都down掉了;

  255:该优先级一设置便为MASTER;

  其余1-254按越大,优先级越大来设置;

  抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,就会立即夺过其MASTER的身份;若BACKUP优先级高于MASTER的路由器,就会将其MASTER身份夺过来;

  非抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,并不会夺过其MASTER进程,而是作为BACKUP重新选举;

  为了提高VRRP协议的安全性,其还提供了认证功能:

  1.字符串认证在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP 报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。 

  2.MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在Authentication Header(认证头)中。收到VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。

  keepalived为LVS提供的高可用机制,并不需要我们使用ipvsadm设置集群服务,只需要在keepalived主配置文件/etc/keepalived/keepalived.conf中设置相关属性,上下文,便可以自动生成调度器对外的虚拟IP地址与集群服务规则;还可以基于脚本调用接口通过执行脚本完成脚本中所定义的规则,对后端的RS或者Directory的状态进行邮件备份等相关操作;

  HA Cluster配置的前提:

  1.保证各个主机之间的时间差距不超过1秒,需要使用时间服务器,让其余所有的主机都遵照其时间进行同步;如ntpd,chrony;

   时间服务器:

   ①安装ntp软件包

     yum -y install ntp

   ②修改配置文件:/etc/ntp.conf

   ③在时间服务器开启ntpd服务

   其余主机:

   ①安装ntp包

   ②#ntpdate IP地址

  2.各个节点之间可以通过主机名互相通信;(对于ka并非必须)

  3.一定要确保iptables和selinux不会阻碍各个节点间的数据通信;

  4.为了安全考虑,各个节点之间的root用户可以基于密钥认证的ssh互相通信(非必须)

  

  安装keepalived:

    yum install -y keepalived(在本地光盘中存在)

  keepalived的配置文件:

    主配置文件:/etc/keepalived/keepalived.conf

    主程序文件:/usr/sbin/keepalived


  我们对于keepalived的配置主要在/etc/keepalived/keepalived.conf中的三部分

  ①GLOBAL CONFIGURATION:用于全局配置,主要是相关邮件信息的发件人与收件人,邮件服务器的地址一般为本机即127.0.0.1;最重要的是,需要设置组播IP地址,不能与其他地址相重;

  ②VRRPD CONFIGURATION:用于配置调度器的相关信息,调度器的状态MASTER,BACKUP,调度器优先级,VRID以及向外的虚拟VIP地址,并留下了关于显示调度器状态变化的脚本接口,如notify_master,notify_backup,notify_fault;

  ③LVS CONFIGURATION:用于设置调度器下的真实服务器,设置真实服务器的RIP,PORT,权重等,最重要的是对后端RS的健康状态检测,HTTP,SSL,TCP三种检测方式,其中HTTP检测较为全面,可以针对回应时间,url内容变化判断RS的健康状态,而TCP则较为粗糙;

  

  项目实例:

  利用keepalived高可用lvs调度器,并分别使用NAT和DR模型的lvs服务负载均衡一个PHP应用,如phpMyAdmin;

  DR模型下:

    DR模型的配置在上一节配置过,在这里就只讲述针对于上一节的DR模型做出了哪些改变!

    ①keepalived的高可用首先的第一点就是要保证各个设备的时间同步,为此我们需要设置一个时间同步服务器,让其余设备对其同步;

    安装时间同步软件:

    yum install -y ntp

    在时间服务器修改配置文件/etc/ntpd.conf(第一台调度器172.16.72.10主机)

    设置那些客户端主机可以以此主机作为时间服务器:

    d53e361faaf7fa13378524bb3b468a0a.jpg-wh_

    允许172.16网段的主机

    146e1439b2f47d10306f14f7961e4769.jpg-wh_

     设置本机为时间服务器,上面的server全部注释掉,那些是其他网络中的时间服务器;


    设置好之后启动ntpd服务

    systemctl start ntpd.service


    客户端主机针对该服务器校准时间:

    #ntpdate 172.16.72.10(时间服务器IP)


   ②添加一台虚拟机作为第二台调度器,IP地址为172.16.72.4

   将设置在第一台调度器上eno16777736:0的VIPdown掉,我们将在keepalived中生成虚拟的VIP;

   安装keepalived在两台调度器上;

   yum -y install keepalived

   针对其配置文件进行配置

   GLOBAL:

   d16bc9cda8146d14a407db009c100d5a.jpg-wh_

   notification_email:邮件接收方的地址,为本机root用户;

   notification_email_from:邮件发送方的地址;

   smtp_server:邮件服务器IP地址;

   router_id drct1:设置路由器ID,仅为了区别不同设备而已;如不修改不影响服务;

   vrrp_mcast_group4 224.220.220.200: 发送vrrp通告的目的IPv4组播地址;

   

   VRRP:

   f9f1ebad7990436ccf098eea68ca53ac.jpg-wh_

   设置调度器:

     state MASTER:该调度器的状态为MASTER;

     interface:针对于哪个网卡接口;

     priority:优先级,MASTER的优先级需要高于BACKUP的,在抢占模式下;

     authentication:设置认证;

     virtual_ipaddress:虚拟VIP地址;

   注意:设置双实例时,只需要更改其vrrp_instance的名称,优先级与state即可;


    LVS:

    28dd375b668c077c6a7d6a31dcfe31c3.jpg-wh_

    delay_loop:服务轮询的时间;

    lb_algo:使用的调度算法;

    lb_kind:使用的模型;DR or NAT;

    persistence_timeout:长连接时间;

    sorry_server:当后端RS全都不能工作时,在本调度器的http服务中设置sorry界面;

    

    设置RS:

    60d58564958e3b8072c03b721723eae9.jpg-wh_

    

     7b582cde0b9f95a9711a2c3983b53a43.jpg-wh_

     real_server后为RIP;

     设置权重,在此设置的HTTP检测,对指定url进行监测,状态码为200则正常;

     nb_get_retry 3:健康检测重试的次数;

     delay_before_retry 1:重试之前的延迟时长;

     connect_timeout 3:连接超时时长;多长时间没有回应就有问题;

     

     将调度器1的keepalived配置好后,将相同文件传送到第二台调度器的

     /etc/keepalived/keepalived.conf,进行修改;

     如:172.16.72.4调度器的配置:

     75fef7639d942ff85e70201ee66c759b.jpg-wh_

    修改状态为BACKUP,优先级即可;

    38f63867d82e98e9c78aeaefc5d5e390.jpg-wh_

   08e6cf17bc0190a3189db997e0e17f9a.jpg-wh_

   197928ffbd74ccf4f4b697be06e64888.jpg-wh_

    

   重启keepalived

   #systemctl start keepalived.service

   启动后keepalived设备会自动加载ipvsadm系统服务

   c392fa4f1743f994bb64e78574599530.jpg-wh_

   MASTER设备会自动生成一个虚拟VIP地址:

   c280dcd7567dc2f833bf973dcb7f21ce.jpg-wh_

   而BACKUP设备则不会生成,但其会自动生成ipvs集群服务;

   这个时候down掉MASTER设备,BACKUP设备就会自动转为MASTER设备了;

   down调度器1:

   #killall keepalived

   #systemctl stop keepalived.service

   

   简单测试一下基于keepalived高可用的DR集群是否生效;

   编辑两个index.html文件分别在两个RS的DocumentRoot下;

   因为是wrr基于权重的算法:

   5c35a23c704f56bac0584070b4c7fbb0.jpg-wh_

   

   设置MySQL共享存储,基于NAS的NFS:

   将172.16.72.7的数据库信息复制到一个目录中,并将该目录设为共享目录;由RS1 172.16.72.6挂载,并修改数据库相关配置文件/etc/my.cnf;

   大概步骤:

   /etc/exports:

   efbb2eb2f38a4aa4a70fb714e83bafe6.jpg-wh_

   #exportfs -ar

   93ce7b8e4d4f7e612f2ed2855f5bd15e.jpg-wh_

   RS1配置:

   e6521eb9d77627917330fd30fe376ad8.jpg-wh_

   修改/etc/my.cnf:

   8525277142b169797f745863cf6f382c.jpg-wh_

   

   访问phpMyAdmin:

   0902889c0fb19ef9527060c51d24d548.jpg-wh_

   0bd4f1050d6a453ce49fc8f106a0917d.jpg-wh_

   连续两次访问(相隔一段持久连接的访问)

   ea0b7484e377a8b4b40a430b34842d84.jpg-wh_

   由上图可知,两次访问的RS各不相同,因为之前实验很多次,所以其顺序有些奇怪;


  NAT模型下:

   NAT模型下的keepalived高可用,同样基于上一篇博客的nat模型,IP配置如下:

    DIR1:

       eno16777736:172.16.72.4 

       eno33554976:192.168.72.4

    DIR2:

       eno16777736:172.16.72.5

       eno33554976:192.168.72.5

    RS1:

       eno16777736:192.168.72.6

    RS2:

       eno16777736:192.168.72.7

    由keepalived高可用设备虚拟出来的IP:

    VIP:

      eno16777736:0 172.16.72.1/16 面向外网

    DIP: 

      eno33554976:0 192.168.72.4/24 面向内网

    ①校准时间

    ②安装keepalived

    yum install -y keepalived

    ③配置DIR1的keepalived

    582195844c49919beae2c8432cac65f3.jpg-wh_

    d7f63a3e9dacc57d91a667bfc44d6cc1.jpg-wh_

    outside设置的是面对外网的VIP

    4bbe001dadbfca4a6282307549939243.jpg-wh_

    inside设置的是面对内网的DIP

    两者需在不同的组中,所以其virtual_router_id需要不一样以区分;

    接下来的配置基本上与nat模式一般无二;

    ed9f95e748bb0811c17d98cfca5de71a.jpg-wh_

    7e7cf3e4570f4b83026c47c6ce91a4e0.jpg-wh_

    

    DIR2的keepalived配置:

    ee494331bbf8eb09769635d0bd30413f.jpg-wh_

    06b0d043ebcdc34d2d465151f300ac38.jpg-wh_ 

    30d5332a4f884578c33842691fabb000.jpg-wh_

    1e40a25571f33978af307047aa5239aa.jpg-wh_

   bfbcb195f640fbd39ae11d260a78fd52.jpg-wh_

   DIR1,DIR2启动keepalived服务;在MASTER主机DIR1与BACKUP主机DIR2上自动生成相关集群服务;

   561f45936efd3e3e4623089fb9de4d41.jpg-wh_

   

   至于后端RS的httpd,php-fpm,Mariadb服务,基本就与之前讲述的一样,不需要变化;

   以下是我利用客户端进行的测试:无持久连接下

   6a4ded4de2809c560bd7faf8f8a922ef.jpg-wh_

   

   物理机访问phpMyAdmin:

   0f6aefb3b5e4dc38cabffb898a9c3215.jpg-wh_

   由DIR1上:可知访问的是192.168.72.7

   09e9e463f9316b23d7de9fb595b05377.jpg-wh_

   隔一段时间再次访问,因为设置了持久连接:

   访问的是192.168.72.6了

   bab7c6898f97c68ae9fae5518a1dfddc.jpg-wh_


   断开DIR1的keepalived后,DIR2就自动成为MASTER:

   1daa658f41861a45ad4aed2d3d0297b6.jpg-wh_

   重新启动DIR1后,DIR2就自动变为BACKUP,因为默认启动抢占模式

   fcda58897035b852e06df6c88da3d20e.jpg-wh_

    

   本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1976074

     

     



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
监控 应用服务中间件 nginx
使用Keepalived实现双机热备,实现服务高可用
使用Keepalived实现双机热备,实现服务高可用
97 0
|
7月前
|
运维 负载均衡 监控
keepalived+LVS实现高可用性集群
通过结合keepalived和LVS,你可以创建一个高可用性的负载均衡集群,确保服务器的稳定性和性能。这对于托管Web服务、应用服务器等关键服务的服务器集群非常有用。
129 1
|
7月前
|
应用服务中间件 网络安全 nginx
Keepalived双机热备
在一个 LVS 服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但 是对外表现为一个虚拟 IP,主服务器会发送 VRRP 通告信息给备份服务器,当备份服务器收不到 VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
149 1
|
存储 负载均衡 网络协议
keepalived双机热备
keepalived双机热备
375 0
|
监控 负载均衡 网络协议
keepalived实现服务高可用
第1章 keepalived服务说明 1.1 keepalived是什么?   Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。
2723 0
|
Linux 网络架构
LVS+keepalived高可用
LVS+keepalived高可用
211 0
LVS+keepalived高可用
|
网络架构
Keepalived 介绍、安装、配置(高可用)
1、keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。 2、VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。
1230 0
|
监控 负载均衡 网络协议
|
网络协议 开发工具 网络架构