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即可。