keepalived主要有两大功能,一个是LB,一个是VRRP+failover,其中LB功能和LVS的功能类似,都是通过在LB上配置RS,监控RS的状态,将从client来的请求发送给对应算法的RS处理。前期我们安装了LVS,体验了一下LVS的DR模式,现在,我们用一下keepalive的LB功能。
环境介绍:
两台主机:CentOS_client_101和CentOS_client_102,地址分别为192.168.245.101和102,上面分别运行了nginx,页面上分别打印的是自己的IP地址信息。然后通过直接地址访问,发现是可以访问的。
下面,我们到100上面,去安装keepalived工具,然后通过配置100的keepalive,实现LB功能。实际上还是VS和RS的故事。
keepadlive工具,是Linux内核中自带的,可以通过yum直接安装,也可以通过下载源码编译安装。这里我们选择下载源码安装,安装的过程没有特殊要求,直接一路下一步就行,唯一要注意,就是要创建一个系统内核软连接。
ln -s /usr/src/kernels/2.6.32-696.el6.x86_64/ /usr/src/linux
在进行编译的时候,如果出现如下的提示信息,需要安装对应的软件包。
configure: error: libnfnetlink headers missing
这就需要安装libnfnetlink-devel软件包。直接通过yum就可以安装。
编译完成之后,会出现一个如下图所示的提示信息。
然后直接make&&make install 就可以了。安装完成后,还是养成一个好的习惯,创建一个软连接,ln -s keepalived-2.0.5/ keepalived,然后在软连接目录中,开始进行操作。
默认的配置文件,存放在安装目录下,keepalived/etc/keepalived/keepalived.conf,启动命令在sbin目录下,一般情况下只要配置这个配置文件就可以启动了。这个配置文件主要分成两个部分,一个是全局的配置信息,主要包含告警通知、snmp、smtp服务器信息等。第二部分就是VRRP或者是LB的信息了。
一把选择先将该模板配置信息进行一个备份,然后再进行相应的修改。单独做LB貌似没成功,不知道原因是什么。原因是因为VIP没有被配置出来,LB上需要先配置出来一个VIP,然后才能进行ipvs的事情,所以还是得要有一个VRRP INSTANCE。可以先做一个VRRP INSTANCE,然后再做一个LVS组。这样就可以了。编译安装的版本太高,可能有不可预知的问题,需要还是用yum install来安装。
只能想一个其他的办法,也就是这两台RS做一个VRRP组,虚拟出一IP来供用户访问。这种情况下,和LVS相比,不需要在主机上做ARP的抑制,因为VIP和RS在同一张网卡上,而且VIP只在一台主机上出现。
在两台RS上分别配置conf文件,一台为主,一台为备,用来确定两个VRRP INSTANCE为同一个GROUP的表示为VRRP-ID字段,两台RS上面该字段一定要相同。
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX1 #用来标识该VRRP INSTANCE的名称,在同一个group中,该router_id不能相同 } vrrp_instance VI_1 { state MASTER #指定master主机 interface eth0 #指定心跳组播端口,实际上也是VIP的绑定接口 virtual_router_id 200 #唯一标识多个router的多个VRRP INSTANCE为一组的字段 priority 150 #优先级,越大越优先,在vote阶段,值越大,越能成为master advert_int 1 #master的通告间隔 authentication { #心跳校验方式 auth_type PASS auth_pass 1111 } virtual_ipaddress { #VIP,可以配置多个VIP 192.168.245.200 } }
主节点的配置如上所示,备节点的配置和主节点的配置,唯一的区别,就是在router_id、state和priority。
配置好了该配置文件后,可以通过sbin目录下的keepalived文件进行启动,启动的具体帮助,可以通过keepalived --help来查看。
/application/keepalived/sbin/keepalived -f /application/keepalived/etc/keepalived/keepalived.conf
-f是指定配置文件所在地位置。整个keepalived的日志文件,是写入到/var/log/messages文件中,通过监控该日志文件,可以观察keepalived的启动过程。
Jul 14 08:12:48 CentOS_client_101 Keepalived[1400]: Starting Keepalived v2.0.5 (06/29,2018) Jul 14 08:12:48 CentOS_client_101 Keepalived[1400]: Running on Linux 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 (built for Linux 2.6.32) Jul 14 08:12:48 CentOS_client_101 Keepalived[1400]: Opening file '/application/keepalived/etc/keepalived/keepalived.conf'. Jul 14 08:12:48 CentOS_client_101 Keepalived[1401]: Starting VRRP child process, pid=1402 Jul 14 08:12:48 CentOS_client_101 Keepalived_vrrp[1402]: Registering Kernel netlink reflector Jul 14 08:12:48 CentOS_client_101 Keepalived_vrrp[1402]: Registering Kernel netlink command channel Jul 14 08:12:48 CentOS_client_101 Keepalived_vrrp[1402]: Opening file '/application/keepalived/etc/keepalived/keepalived.conf'. Jul 14 08:12:48 CentOS_client_101 Keepalived_vrrp[1402]: Registering gratuitous ARP shared channel Jul 14 08:12:48 CentOS_client_101 Keepalived_vrrp[1402]: (VI_1) Entering BACKUP STATE (init) Jul 14 08:12:52 CentOS_client_101 Keepalived_vrrp[1402]: (VI_1) Entering MASTER STATE
进入master状态的RS,会拥有VIP,通过ip addr可以查看到该VIP
[root@CentOS_client_101 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:bc:8a:38 brd ff:ff:ff:ff:ff:ff inet 192.168.245.101/24 brd 192.168.245.255 scope global eth0 inet 192.168.245.200/32 scope global eth0 inet6 fe80::20c:29ff:febc:8a38/64 scope link valid_lft forever preferred_lft forever
这个时候,我们将备机也启动,观察一下日志。备机是不会进入master状态,也就没有VIP。这个时候我们可以做一个ping测试,当主备进行切换的时候,ping测试的情况。
主备能做切换。这个时候,再次启动master主机,日志信息如下:
Jul 14 17:08:01 CentOS_client_101 Keepalived[1418]: Starting Keepalived v2.0.5 (06/29,2018) Jul 14 17:08:01 CentOS_client_101 Keepalived[1418]: Running on Linux 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 (built for Linux 2.6.32) Jul 14 17:08:01 CentOS_client_101 Keepalived[1418]: Opening file '/application/keepalived/etc/keepalived/keepalived.conf'. Jul 14 17:08:01 CentOS_client_101 Keepalived[1419]: Starting VRRP child process, pid=1420 Jul 14 17:08:01 CentOS_client_101 Keepalived_vrrp[1420]: Registering Kernel netlink reflector Jul 14 17:08:01 CentOS_client_101 Keepalived_vrrp[1420]: Registering Kernel netlink command channel Jul 14 17:08:01 CentOS_client_101 Keepalived_vrrp[1420]: Opening file '/application/keepalived/etc/keepalived/keepalived.conf'. Jul 14 17:08:01 CentOS_client_101 Keepalived_vrrp[1420]: Registering gratuitous ARP shared channel Jul 14 17:08:01 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) Entering BACKUP STATE (init) Jul 14 17:08:02 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) received lower priority (100) advert from 192.168.245.102 - discarding Jul 14 17:08:02 CentOS_client_101 Keepalived_vrrp[1420]: Kernel/system configuration issue causing multicast packets to be received but IP_MULTICAST_ALL unset Jul 14 17:08:03 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) received lower priority (100) advert from 192.168.245.102 - discarding Jul 14 17:08:04 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) received lower priority (100) advert from 192.168.245.102 - discarding Jul 14 17:08:05 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) received lower priority (100) advert from 192.168.245.102 - discarding Jul 14 17:08:05 CentOS_client_101 Keepalived_vrrp[1420]: (VI_1) Entering MASTER STATE
在这个模式中,由于默认开启了抢占模式,所以会直接进行抢占VIP。关闭抢占是在VRRP instance中添加 nopreempt即可。