使用Piranha设置负载平衡LVS(直接路由)集群
这篇文章主要基于上一篇关于使用Piranha设置负载平衡LVS(NAT)群集的文章,但是本文旨在说明如何使用直接路由而不是NAT配置LVS群集。
软件
本文使用的软件:
- CentOS的6.7
- Piranha 0.8.6
- ipvsadm 1.26
直接路由与NAT
如前所述,Linux LVS集群由两个基本组组成:LVS路由器和真实服务器。
为了防止单点故障,每个组将包含两个成员系统。
根据CentOS文档,活动路由器在群集中扮演两个角色:
- 为了平衡真实服务器上的负载,
- 在每个真实服务器上检查服务的完整性。
备用路由器的工作是监视活动路由器,并在发生故障时承担其角色。
直接路由允许真实服务器直接处理数据包并将其路由到发出请求的用户,而无需通过LVS路由器传递所有传出数据包。
在这种情况下,LVS路由器仅需通过直接路由处理客户端到服务器的一半连接,并且响应数据包可以遵循通往客户端的单独网络路由。
这可以提高虚拟服务器的可伸缩性,并减少出现网络性能问题的可能性(因为LVS路由器仅处理传入的数据包)。
网络和IP地址
我们的网络设置如下:
- 10.10.1.1/24-可以访问Internet的LAN。
我们将使用的虚拟机的主机名和角色:
- lvs-d01-活动的LVS路由器,
- lvs-d02-备用LVS路由器,
- lvs-d03/lvs-d04-真实服务器,均运行带有SSL的预配置Apache Web服务器。
有关更多信息,请参见下面的架构。
LVS-D01和LVS-D02节点的网络配置
lvs-d01节点上的网络配置:
[Hyman@theitroad ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static PEERDNS=no USERCTL=no IPADDR=10.10.1.21 NETMASK=255.255.255.0 GATEWAY=10.10.1.1
lvs-d01上的路由表:
[Hyman@theitroad ~]# ip ro 10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.21 169.254.0.0/16 dev eth0 scope link metric 1002 default via 10.10.1.1 dev eth0
lvs-d02节点上的网络配置:
[Hyman@theitroad ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static PEERDNS=no USERCTL=no IPADDR=10.10.1.22 NETMASK=255.255.255.0 GATEWAY=10.10.1.1
lvs-d02上的路由表:
[Hyman@theitroad ~]# ip ro 10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.22 169.254.0.0/16 dev eth0 scope link metric 1002 default via 10.10.1.1 dev eth0
LVS-D03和LVS-D04真实服务器节点的网络配置
lvs-d03节点上的网络配置:
[Hyman@theitroad ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static PEERDNS=no USERCTL=no IPADDR=10.10.1.23 NETMASK=255.255.255.0 GATEWAY=10.10.1.1
lvs-d03上的路由表:
[Hyman@theitroad ~]# ip ro 10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.23 169.254.0.0/16 dev eth0 scope link metric 1002 default via 10.10.1.1 dev eth0
lvs-d04节点上的网络配置:
[Hyman@theitroad ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static PEERDNS=no USERCTL=no IPADDR=10.10.1.24 NETMASK=255.255.255.0 GATEWAY=10.10.1.1
lvs-d04上的路由表:
[Hyman@theitroad ~]# ip ro 10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.24 169.254.0.0/16 dev eth0 scope link metric 1002 default via 10.10.1.1 dev eth0
LVS路由器安装
配置LVS-D01节点
安装ipvsadm和Piranha软件包:
# yum install -y piranha ipvsadm
确保已加载IP虚拟服务器Netfilter内核模块:
# modprobe ip_vs
设置Piranha配置工具的密码:
# /usr/sbin/piranha-passwd
设置密码后,启动piranha-gui服务:
# /etc/init.d/piranha-gui start
请注意,在使用Piranha配置工具完成配置之前,我们不需要启动脉冲服务。
在LVS路由器上,需要设置四种服务才能在启动时激活:
# chkconfig piranha-gui on # chkconfig pulse on # chkconfig iptables on # chkconfig sshd on
多端口服务和防火墙标记需要iptables服务。
SSH服务用于远程登录,我认为这应该可以自我解释。
添加防火墙规则以允许HTTP访问Piranha WebUI:
# iptables -A INPUT -s 10.10.1.0/24 -p tcp --dport 3636 -j ACCEPT
为我们正在平衡的流量(HTTP和HTTPS)添加一条规则:
# iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
配置LVS-D02节点
安装ipvsadm:
# yum install -y ipvsadm
启用服务:
# chkconfig pulse on # chkconfig iptables on # chkconfig sshd on
从lvs-d01节点复制“ sysctl.conf”:
[Hyman@theitroad ~]# scp /etc/sysctl.conf Hyman@theitroad:/etc/
为我们正在平衡的流量(HTTP和HTTPS)添加一条规则:
# iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
使用Piranha完成直接路由配置后,请从lvs-01节点复制“ lvs.cf”文件:
[Hyman@theitroad ~]# scp /etc/sysconfig/ha/lvs.cf Hyman@theitroad:/etc/sysconfig/ha/
多端口服务
我们将使用多端口服务(HTTP和HTTPS),因此需要使用防火墙标记将不同但相关的协议捆绑在一起。
但是,分配防火墙标记的工作必须由Piranha配置工具之外的网络数据包过滤器iptables执行。
在lvs-d01和lvs-d02这两个路由器上分配防火墙标记:
# iptables -t mangle -A PREROUTING -p tcp -d 10.10.1.20/32 -m multiport --dport 80,443 -j MARK --set-mark 80
其中10.10.1.20是我们的虚拟IP地址。
保存iptables规则,以便它们在重新启动后得以恢复:
# service iptables save
直接路由Real Server节点配置
在每个真实服务器节点(lvs-d03和lvs-d04)上,为要用于真实服务器的VIP 10.10.1.20和协议组合运行以下命令:
# iptables -t nat -A PREROUTING -p tcp -d 10.10.1.20 -m multiport --dport 80,443 -j REDIRECT
上面的命令将使真实服务器处理发给VIP和端口的数据包。
确保重新启动后保存并还原了防火墙更改:
# service iptables save
使用Piranha的LVS直接路由配置
将网络浏览器导航到http://10.10.1.31:3636/。
配置主服务器并选择直接网络类型(应为默认选项)。
添加并配置虚拟服务器。
10.10.1.20是我们的虚拟IP地址。
防火墙标记用于捆绑端口80上的HTTP连接和端口443上的HTTPS连接。
持久性就像一个计时器。
设置为30秒。
当客户端连接到服务时,LVS会记住30s的最后一次连接。
添加并激活真实服务器。
通过添加lvs-d02节点的IP地址来配置冗余。
现在,在配置并保存所有内容后,请在lvs-d01节点上启动脉冲服务:
# service pulse start
此时,我们应该能够通过HTTP和HTTPS浏览虚拟IP 10.10.1.20。
在lvs-d02节点上启动脉冲服务。
它应该充当备份节点。
检查活动的lvs-d01节点上的LVS状态:
# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn FWM 80 wlc persistent 30 -> 10.10.1.23:80 Route 1 0 0 -> 10.10.1.24:80 Route 1 0 0
lvs.cf
下面显示了“ /etc/sysconfig/ha/lvs.cf”的内容,以供参考。
[Hyman@theitroad ~]# cat /etc/sysconfig/ha/lvs.cf serial_no = 5 primary = 10.10.1.21 service = lvs backup_active = 1 backup = 10.10.1.22 heartbeat = 1 heartbeat_port = 539 keepalive = 2 deadtime = 6 network = direct debug_level = NONE monitor_links = 1 syncdaemon = 0 virtual http_server { active = 1 address = 10.10.1.20 eth0:1 vip_nmask = 255.255.255.255 fwmark = 80 port = 80 persistent = 30 send = "GET/HTTP/1.0\r\n\r\n" expect = "HTTP" use_regex = 0 load_monitor = none scheduler = wlc protocol = tcp timeout = 6 reentry = 15 quiesce_server = 0 server lvs-d03 { address = 10.10.1.23 active = 1 weight = 1 } server lvs-d04 { address = 10.10.1.24 active = 1 weight = 1 } }