- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 22:LVS+Keepalived 实战精讲
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 来优化。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论