返回介绍

最佳实践 22:LVS+Keepalived 实战精讲

发布于 2025-04-20 17:44:42 字数 5893 浏览 0 评论 0 收藏

LVS+Keepalived 配置过程详解

本节以上节图 4-2 所示的架构图进行 LVS+Keepalived 的实战,其中会指出需要注意的关键点。

步骤 1 在 LVS1 和 LVS2 上,执行以下命令,打开转发:

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0 -> net.ipv4.ip_forward = 1
# sysctl -p

步骤 2 在 LVS1 和 LVS2 上,关闭 iptables 或者添加 FORWARD 为 accept。因不同服务器要求的策略不同,在此不再进行统一设定。

步骤 3 在 LVS1 和 LVS2 上,安装 ipvsadm 和 Keepalived。使用的命令如下:

# yum -y install ipvsadm
# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
# cd keepalived-1.2.19
# ls -al
# ./configure --disable-fwmark
输出结果如下:
Keepalived configuration
------------------------
Keepalived version       : 1.2.19
Compiler                 : gcc
Compiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib                : -lssl -lcrypto -lcrypt 
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
IPVS use libnl           : No
fwmark socket support    : No
Use VRRP Framework       : Yes 
Use VRRP VMAC            : No
SNMP support             : No
SHA1 support             : No
Use Debug flags          : No
# make
# make install
# mkdir /etc/keepalived
# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig
# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/sbin/keepalived /sbin/
# chkconfig --add keepalived
# chkconfig keepalived on 设置开机启动

步骤 4 配置 LVS1 和 LVS2 的 Keepalived,其中 LVS1 的配置文件 keepalived.conf 内容如下所示(LVS2 的配置文件根据注释的提示进行相应修改即可):

global_defs {
    notification_email {
        xufengnju@163.com #配置负载均衡器检查后端服务器失败后的报警接收邮件
    }
    notification_email_from NJCTC-LVS-38@notify.smtp.gcloud
    smtp_server 10.168.110.249 #该服务器配置为 SMTP Relay 服务,如 sendmail 等
    smtp_connect_timeout 5
    router_id NJCTC-LVS-28 #此处,2 台负载均衡器配置不同
}
vrrp_sync_group  VG_1 {
    group {
        VI_1
    }
}
vrrp_instance VI_1 {
    state MASTER #此处,LVS2 上为 BACKUP
    interface eth0
    track_interface {
        eth0
    }
    garp_master_delay 30
    virtual_router_id 52
    priority 150 #此处,LVS2 上为 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4mE8jR
    }
     virtual_ipaddress {
          10.1.6.18/32 dev eth0
    }
}

virtual_server 10.1.6.18 80 {
    delay_loop 5
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP

    real_server 10.1.6.21 80 {
        weight 10
        #对后端服务器使用 HTTP 协议进行健康检查
        HTTP_GET {
            url {
                path /test.html
                digest eff5bc1ef8ec9d03e640fc4370f5eacd
            }
            connect_port 80
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 10.1.6.44 80 {
        weight 10
      #对后端服务器使用 HTTP 协议进行健康检查
        HTTP_GET {
            url {
                path /test.html
                digest eff5bc1ef8ec9d03e640fc4370f5eacd
            }
            connect_port 80
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
} 

注意

(1)2 台负载均衡器 LVS1 和 LVS2 之间使用 vrrp 协议进行组播通信,如有 iptables 则需要允许,否则出现脑裂现象。我们建议在初次配置时先禁用 iptables。

(2)负载均衡器对后端的健康检查,可以使用 TCP Connect 或者 HTTP GET,在网站类应用负载均衡方案中,推荐使用 HTTP GET,可以进行应用层检查,防止出现端口存在但无法提供业务的情况。Keepalived 配置文件中 digest 的获取,使用该软件自带的 genhash 工具,genhash→help。

步骤 5 配置后端服务器 Web1 和 Web2 禁用 Arp 对虚拟 IP 的响应。使用的命令如下:

# vi /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# sysctl -p

步骤 6 配置后端服务器 Web1 和 Web2 的虚拟 IP。使用的命令如下:

# ifconfig lo:0 10.1.6.18 netmask 255.255.255.255 broadcast 10.1.6.18 up
# route add -host 10.1.6.18 dev lo:0

步骤 7 启动负载均衡器 LVS1 和 LVS2 上的 Keepalived。使用的命令如下:

# service keepalived start

LVS 重要参数

LVS 的重要参数,位于/proc/sys/net/ipv4/vs/目录下,如下所示:

# ls -al /proc/sys/net/ipv4/vs/
total 0
dr-xr-xr-x 2 root root 0 Dec  5 14:39 .
dr-xr-xr-x 6 root root 0 Dec  5 14:39 ..
-rw-r--r-- 1 root root 0 Dec  5 14:39 am_droprate
-rw-r--r-- 1 root root 0 Dec  5 14:39 amemthresh
-rw-r--r-- 1 root root 0 Dec  5 14:39 cache_bypass
-rw-r--r-- 1 root root 0 Dec  5 14:39 drop_entry
-rw-r--r-- 1 root root 0 Dec  5 14:39 drop_packet
-rw-r--r-- 1 root root 0 Dec  5 14:39 expire_nodest_conn
-rw-r--r-- 1 root root 0 Dec  5 14:39 expire_quiescent_template
-rw-r--r-- 1 root root 0 Dec  5 14:39 nat_icmp_send
-rw-r--r-- 1 root root 0 Dec  5 14:39 secure_tcp
-rw-r--r-- 1 root root 0 Dec  5 14:39 sync_threshold

以下 2 个参数对于 LVS 的转发行为有重要作用。

(1)expire_nodest_conn

expire_nodest_conn 的值有两种:0—禁用,默认值;非 0—启用。默认值是 0,在负载均衡器发现目标后端服务器不可用时会丢弃包。在某些情况下可能有用,例如用户的监控程序删除了后端服务器(因为过载或者判断错误)然后又添加回服务池,那么这个连接可以继续。

如果启用了该特性,负载均衡器会立即使该连接过期,然后客户端会得到通知连接已经关闭。

(2)expire_quiescent_template

expire_quiescent_template 的值有两种:0—禁用,默认值;非 0—启用。如果非 0,那么负载均衡器当发现被调度的后端服务器处于静止期(权重为 0)会立即使持久连接过期,并被发送到新的服务器。

以下参数对 LVS 同步状态有重要作用。

(3)sync_threshold

sync_threshold 的默认取值为 3—默认值。表示一个连接上收到至少多少个包之后,才开始进行连接状态的同步。一个连接的状态在以下情况下会被同步:它收到的包的数量用 50 取余等于该设定值时,取值范围 0~49。

LVS-DR 模式的核心提示与优化

LVS-DR 模式的核心提示与优化如下:

- LVS-DR 模式,因后端服务器上同样配置了虚拟 IP,如果在客户端进行 ARP 请求的时候,后端服务器以自身的 MAC 地址进行了回复,则起不到负载均衡的效果,此时客户端直接连到了某台后端服务器上。

- 后端服务器的虚拟 IP 必须绑定到 lo:0 上,同时指定子网掩码是 255.255.255.255,否则 ARP 禁用会出现异常。

- 持久连接(Persistence)的问题。持久连接使同一个客户端在超时时间内(ipvsadm–p 参数指定,Keepalived 中的 persistence_timeout 指令)会持续地连接到同一台后端服务器,这个是 4 层上的持久连接。来自客户端的每个新的连接会重置该超时时间。

- Keepalived 对后端服务器的健康检查,推荐使用应用层检查方式,另外可以配置 Keepalived 使用管理员自定义的脚本进行健康检查(MISC_CHECK 指令)。

- 负载均衡器之间使用 vrrp 协议进行高可用设置时,禁用 iptables 或者打开对 vrrp 协议的支持。

- LVS 集群中的负载均衡器,推荐使用 16GB 及以上内存,同时采用多队列网卡提高网卡吞吐量减少处理延时。

- LVS 集群中的后端服务器,根据 IO 密集型和 CPU 密集型 2 类,可以分别使用 RAID10、SSD 及高频多核 CPU 来优化。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。