CentOS/Redhat Linux:安装Keepalived为Web群集提供IP故障转移

时间:2020-01-09 10:43:19  来源:igfitidea点击:

Keepalived为LVS群集提供了强大而健壮的运行状况检查。
它在多层上实现了用于服务器故障转移的健康检查框架,并通过VRRPv2堆栈来处理导向器故障转移。
如何为nginx或者lighttpd等反向代理服务器安装和配置Keepalived?
如果您使用LVS Director在生产环境中对服务器池进行负载平衡,则可能需要一个健壮的健康检查和故障转移解决方案。
这也适用于反向代理服务器,例如nginx。

拓扑

Internet-
         |
    =============
    | ISP Router|
    =============
         |
         |
         |      |eth0 -> 192.168.1.11 (connected to lan) 
         |-lb0==|
         |      |eth1 -> 192.54.1.1 (vip master)
         |
         |      |eth0 -> 192.168.1.10 (connected to lan)
         |-lb1==|
                |eth1 -> 192.54.1.1 (vip backup)

其中:

  • lb0 Linux盒通过eth1直接连接到Internet。这是主负载均衡器。
  • lb1 Linux盒通过eth1直接连接到Internet。这是备用负载平衡器。如果主控网络失败,它将变为活动状态。
  • 192.54.1.1该IP在lb0和lb1服务器之间移动。它称为虚拟IP地址,由keepalived管理。
  • eth0连接到LAN和所有其他后端软件,例如Apache,MySQL等。

您需要在lb0和lb1上都安装以下软件:

  • 为IP故障转移保持活力。
  • iptables过滤流量
  • nginx或者lighttpd反转代理服务器。

DNS设置应如下所示:

  • theitroad.com我们的示例域名。
  • lb0.theitroad.com 192.54.1.11(分配给eth1的真实IP)
  • lb1.theitroad.com 192.54.1.12(分配给eth1的真实IP)
  • www.theitroad.com 192.54.1.1(Web服务器的VIP)未将此IP分配给任何接口。

安装Keepalived

访问keepalived.org以获取最新的源代码。
您可以使用wget命令下载相同的文件(您需要在lb0和lb1上都安装keepalived):

# cd /opt
# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
# tar -zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19

安装内核头文件

您需要安装以下软件包:

  • "内核头文件"包含C头文件,这些文件指定Linux内核与用户空间库和程序之间的接口。头文件定义了构建大多数标准程序所需的结构和常量,以及重建glibc软件包所需的结构和常量。
  • kernel-devel这个软件包提供了足以针对内核软件包构建模块的内核头文件和makefile。

确保已安装内核头文件和内核开发包。
如果不是,请输入以下内容进行相同的安装:

# yum -y install kernel-headers kernel-devel

编译keepalived

执行以下命令:

# ./configure --with-kernel-dir=/lib/modules/$(uname -r)/build

输出示例:

checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
...
.....
..
config.status: creating keepalived/check/Makefile
config.status: creating keepalived/libipvs-2.6/Makefile

Keepalived configuration
-----------------------
Keepalived version       : 1.1.19
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto 
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use Debug flags          : No

编译并安装相同的文件:

# make && make install

创建所需的软链接

输入以下命令以创建服务并在RHEL/CentOS运行级别#3上运行该服务:

# cd /etc/sysconfig
# ln -s /usr/local/etc/sysconfig/keepalived .
# cd /etc/rc3.d/
# ln -s /usr/local/etc/rc.d/init.d/keepalived S100keepalived
# cd /etc/init.d/
# ln -s /usr/local/etc/rc.d/init.d/keepalived .

配置

您的主要配置目录位于/usr/local/etc/keepalived,配置文件名为keepalived.conf。
首先,备份现有配置:

# cd /usr/local/etc/keepalived
# cp keepalived.conf keepalived.conf.bak

在" lb0"上按如下所示编辑keepalived.conf:

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101
        authentication {
            auth_type PASS
            auth_pass Add-Your-Password-Here
        }
        virtual_ipaddress {
                192.54.1.1/29 dev eth1
        }
}

在`lb1'上编辑keepalived.conf(注意优先级设置为100,即备份负载均衡器):

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 100
        authentication {
            auth_type PASS
            auth_pass Add-Your-Password-Here
        }
        virtual_ipaddress {
                192.54.1.1/29 dev eth1
        }
}

保存并关闭文件。
最后,按照以下步骤在lb0和lb1上开始保持活动:

# /etc/init.d/keepalived start

验证:Keepalived是否正常工作

/var/log/messages将跟踪VIP:

# tail -f /var/log/messages

输出示例:

Nov 21 04:06:15 lb0 Keepalived_vrrp: Netlink reflector reports IP 192.54.1.1 added
Nov 21 04:06:20 lb0 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 192.54.1.1

验证分配给eth1的VIP:

# ip addr show eth1

输出示例:

3: eth1:  mtu 1500 qdisc pfifo_fast qlen 10000
    link/ether 00:30:48:30:30:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.54.1.11/29 brd 192.54.1.254 scope global eth1
    inet 192.54.1.1/29 scope global secondary eth1

ping故障转移测试

打开UNIX/Linux/OS X桌面终端,然后执行以下命令ping通VIP:

# ping 192.54.1.1

登录到lb0并停止服务器或者关闭网络:

# halt

在几秒钟内,VIP应该从lb0移至lb1,并且您应该不会看到ping下降的情况。
在lb1上,您应该在/var/log/messages中获得以下内容:

Nov 21 04:10:07 lb1 Keepalived_vrrp: VRRP_Instance(VI_1) forcing a new MASTER election
Nov 21 04:10:08 lb1 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Nov 21 04:10:09 lb1 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Nov 21 04:10:09 lb1 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Nov 21 04:10:09 lb1 Keepalived_healthcheckers: Netlink reflector reports IP 192.54.1.1 added
Nov 21 04:10:09 lb1 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 192.54.1.1