keepalived

                     Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。在非LVS群集环境中使用时Keepalived也可以作为热备软件使用。

                      Keepalived采用VRRP(virtual  router  redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案-----由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

热备组内的每台服务器都可以成为主服务器,虚拟IP地址(VIP)可以在热备组内的服务器之间进行转移,所以也称为漂移IP地址,使用Keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如eth0:0),而是由Keepalived根据配置文件自动管理。

        主服务器的配置:

安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-develpopt-devel等支持库,除此之外,在LVS群集环境中应用时,也需要用到ipvsadm管理工具。

安装ipvsadm软件包:

编译安装Keepalived

使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行makemake install进行安装。

使用keepalived服务

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用servicechkconfig工具来对keepalived服务程序进行管理了。

主服务器的配置

Keepalived服务的配置目录位于/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一个子目录samples/,提供了许多配置样列作为参考。在keepalived的配置文件中,使用”global_defs {……}”区段指定全局参数。使用”vrrp_instance  实例名称 {……}”区段指定VRRP热备参数,注释文字以”!”符号开头。

相关配置及主要配置项解释如下:

! Configuration File for keepalived        #!表示注释

global_defs {

  notification_email {

       [email protected]  #接收警报的 email 地址,可以添加多个

  }

  notification_email_from root@localhost

  smtp_server 127.0.0.1  #使用本机转发 email

  smtp_connect_timeout 30

  router_id  LVS_DEVEL  #load balancer 的标识 ID,即本服务器的名称标识

}

vrrp_instance  VI_1 {    #定义VRRP热备实例

   state MASTER   #热备状态,MASTER表示主服务器;SLAVE表示备用服务器;当有多台备用的服务器,热备状态改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态

   interface eth0   #HA 监测网络接口即承载VIP地址的物理接口

   virtual_router_id 50   #虚拟路由器的ID号。主、备机的 virtual_router_id必须相同

   priority 150    #主机的优先级,数值越大优先能越高。备份机改为 50

   advert_int 1  #主备之间的通告间隔秒数(心跳频率)

   authentication {   #认证信息,每个热备组保持一致

       auth_type PASS   #认证类型,主备切换时的验证

       auth_pass 1111   #密码字串

   }

   virtual_ipaddress {    #指定漂移地址(VIP),可以有多个

        172.16.16.172    #HA 虚拟 ip,可加多个

   }

}

virtual_server 172.16.16.172 80 {  #虚拟服务器地址(VIP)、端口

   delay_loop 6    #健康检查的间隔时间(秒),每隔 6 秒查询 realserver状态

   lb_algo rr    #lvs 调度算法,这里使用轮询

   lb_kind DR   #lvs 负载均衡机制,这里使用直连路由

!   persistence_timeout  50  #同一 IP 的连接 50 秒内被分配到同一台 realserver

   protocol TCP  # TCP 协议检查 realserver 状态

   real_server 172.16.16.177  80 {  #第一个WEB节点的地址、端口

       weight 1    #节点的权重

       TCP_CHECK {    #健康检查方式

            connect_port 80  #检查的目标端口

            connect_timeout 3  #故障重试秒数(即连接超时)

            nb_get_retry 3  #重试延迟(即重试次数)

            delay_before_retry 3  #重试间隔(秒)

       }

   }

   real_server 172.16.16.178  80 {  #第二个WEB节点的地址、端口

       weight 1

       TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

       }

   }

}

配置主调度器:修改keepalived.conf文件中的全局参数、热备参数、WEB服务器池配置,相关配置参数如下图:

重新启动keepalived服务

2)配置从调度器:

从调度器的配置与主调度器基本相同,也包括全局参数、热备参数、服务器池配置,只需要调整router_idstateprority参数即可,其余内容完全相同,配置完成以后重启keepalived服务。

安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-develpopt-devel等支持库,除此之外,在LVS群集环境中应用时,也需要用到ipvsadm管理工具。

安装ipvsadm软件包:

编译安装Keepalived

使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行makemake install进行安装。

使用keepalived服务

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用servicechkconfig工具来对keepalived服务程序进行管理了。

配置从调度器:修改keepalived.conf文件,只修改红线标注的参数,其他参数和主调度器的配置文件完全一样。修改的地方如下图所示:

重新启动keepalived服务

在同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同。不同之处主要在于服务器的名称标识、热备状态、优先级。

服务器的名称标识(router_id):建议为每个参与热备的服务器指定不同的名称

热备状态(state):至少应有一台主服务器,状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP.

优先级(priority):数值越大则取得VIP控制权的优先级越高,回此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

3)测试主、从调度器:

若防火墙不关闭的话可以在input链上建规则.

iptables -I INPUT -p ip -d 224.0.0.18 -jACCEPT

:VRRP协议的通告报文使用固定的组播地址224.0.0.18,用IP 报文作为传输协议进行协议报文的传送。

当启动keepalived服务后,实际状态为MASTER的主服务器取得VIP控制权,并将eth0接口自动添加VIP地址,通过ip命令可以查看(注意:ifconfig命令看不到)

查看主服器的eth0接口信息:

从调度器服务器上启动keepalived服务,此时主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此在备用服务器中将不会为eth0接口添加VIP地址。

此时查看从服务器的eth0接口信息:

Keepalived的日志消息保存在/var/log/messages文件中,在测试主、从故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以连通性测为例

internet的测试机上执行ping  172.16.16.172  �Ct,(172.16.16.172VIP地址),能够正常ping通,说明主服务器以接管VIP地址,并及时响应客户机的请求。

禁用主服务器的eth0网卡,发现ping测试会中断34个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机的请求。

重新启用主服务器的eth0网卡,发现ping测试再次中断34个包即恢复正常,说明主服务器已恢复正常,并夺回VIP地址的控制权。

在这述过程中可以查看日志记录来了解MASTERSLAVE状态的迁移记录。

2LVS+HA ----配置负载调度器(ipvsadm

要在主、从负载调度器主机上分别配置负载调度器,加载ip_vs模块,安装ipvsadm软件包.这里使用的是LVS-DR模式,需要调整/proc系统的内核响应参数。

sysctl.conf添加如下内容:

详细配置参考我在前面介绍的LVS-DR的有关设置。

3在共享存储设备主机上配置共享存储服务(这里使用NFS发布共享服务),具体操作如下:

修改/etc/exports文件,内容如下:

/opt/wwwroot  192.168.7.0/24(rw,sync,no_root_squash)

允许192.168.7.0/24网段的主机访问NFS的共享。

参考LVS+NAT方式的虚拟服务器中有关NFS的防火墙设置或将NFS服务器的防火墙规则清除。

4LVS+HA ---配置服务器池中的WEB节点服务器(172.16.16.177172.16.16.178)

根据所选择的群集工作模式不同(DRNAT),节点服务器的配置也有些差异。以DR模式为例。除了需要调整/proc系统的ARP响应参数以外,还需要为虚拟接口lo:0配置VIP地址。具体参考前面有关LVS-DR的配置。所以WEB节点的配置和LVS-DR配置是一样的。

使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIPMAC地址,避免发生冲突。

  1. 调整/proc响应参数


    sysctl.conf添加如下内容:


    注:上图中参数的含义:

    net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.lo.arp_ignore = 1
    arp_ignore:
    定义了网卡在响应外部ARP请求时候的响应级别
    0
    :默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
    1
    :总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应

net.ipv4.conf.default.arp_announce= 0 net.ipv4.conf.all.arp_announce = 0

net.ipv4.conf.lo.arp_announce= 0

定义了网卡在向外宣告自己的MAC-IP时候的限制级别
有三个值:
0
:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1
:尽量避免响应ARP请求中MAC不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应
2
:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应

执行sysctl  -p使修改生效

  1. 配置虚拟IP地址(VIP-----节点服务器1的配置

    在每个节点服务器,同样需要具有VIP地址172.16.16.172,但此地址仅用作发送WEB响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地以避免通信紊乱。


    修改内容如下:


    //特别注意:子网掩码必须为全1

    重启network脚本使修改后的IP生效。


你可能感兴趣的:(linux)