CentOS 5.3上的高可用负载平衡集群(直接路由方法)
本文介绍如何使用Heartbeat和Ldirectord在CentOS 5.3上设置负载平衡虚拟服务器的LVS集群。负载均衡器位于用户和两个(或多个)后端Apache / IIS Web服务器之间,该服务器具有相同的内容。 负载平衡器不仅将请求分发到两个后端Apache / IIS服务器,还检查后端服务器的运行状况。 如果其中一个关闭,所有请求将自动重定向到其余的后端服务器。
介绍
LVS集群包含一个或多个虚拟服务,每个虚拟服务可以具有零个或多个真实服务器。 虚拟服务的IP地址是最终用户连接到的,并且通常通过DNS通告。 当连接到虚拟服务时,它被分配一个真正的服务器,并且用于该连接的所有数据包被转发到该真实服务器。 Ldirectord是负载平衡虚拟服务器的LVS集群中的监控和管理实际服务器的守护进程。 Ldirectord通常用作Linux-HA的资源。 L 指示器通过周期性地请求已知URL并检查响应是否包含预期响应来监视真实服务器的运行状况。 如果真正的服务器发生故障,那么服务器将被删除,一旦它恢复在线路上,它将被重新激活。 如果所有真正的服务器都关闭,则后台服务器将插入到池中,这将使静态的真正的Web服务器之一回到在线。 通常,后台服务器是localhost。 如果提供HTTP虚拟服务,则运行Apache HTTP服务器是有用的,该服务器返回指示该服务暂时无法访问的页面。
注意:本教程基于我的个人经验和其他一些在互联网上公开的教程。 我不会保证这将为您工作!
初步说明
在本教程中,我将使用以下3个主机:
虚拟IP地址(终端用户连接到此): 10.10.10.53
负载均衡器: ld.example.com
,IP地址: 10.10.10.52
Web服务器1: http1.example.com
,IP地址: 192.168.200.102
Web Server 2: http2.example.com
,IP地址: 192.168.200.103
负载平衡器配置
在负载平衡器系统(ld.example.com)上安装心跳,心跳线程和ipvsadm程序包。
yum install heartbeat heartbeat-ldirector ipvsadm -y
chkconfig ldirectord off
chkconfig heartbeat on
sed -i 's/net.ipv4.ip_forward = 1/net.ipv4.ip_forward = 0' /etc/sysctl.conf
sysctl -p
负载平衡器二次以太网配置
为LVS配置辅助eth0,以将其暴露于外部世界或本地网关。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0:0 BOOTPROTO=none ONBOOT=yes HWADDR=3a:5d:71:ad:67:47 NETMASK=255.255.255.0 IPADDR=10.10.10.52 GATEWAY=10.10.10.1 TYPE=Ethernet
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0 BOOTPROTO=none ONBOOT=yes HWADDR=3a:5d:71:ad:67:47 NETMASK=255.255.255.0 IPADDR=10.10.10.53 TYPE=Ethernet
service network restart
配置ldirectord
在Load Balancer系统上配置ldirectord。
vi /etc/ha.d/ldirectord.cf
checktimeout=30 checkinterval=2 autoreload=yes logfile="/var/log/ldirectord.log" quiescent=no virtual=10.10.10.53:80 fallback=127.0.0.1:80 real=192.168.200.102:80 gate real=192.168.200.103:80 gate service=http request="/check.txt" httpmethod=GET receive="webserverisworking" persistent=100 scheduler=lblc protocol=tcp checktype=negotiate
注意:在virtual = xxxx:80行之后,每行必须以TAB开头。 不要忘记在每一行之前按TAB键。
service ldirectord start
在virtual =
行中,我们将虚拟IP地址(在本例中为10.10.10.53
),在real =
行中,我们列出了我们的Apache / IIS节点(本例中为192.168.200.102
和192.168.200.103
)的IP地址。 在request =
行中,我们列出了httpd
和http2
上的文件名,ldirectord将重复请求查看http1和http2
是否仍然存在。 该文件(稍后将要创建)必须包含receive =
行中列出的字符串。
在scheduler =
行中,可以根据需要使用以下方法之一:rr - wrr - lc - wlc - lblc - lblcr - dh - sh - sed - nq
有关调度程序方法的更多信息,请访问: http : //linux.die.net/man/8/ipvsadm
配置心跳
在负载平衡器系统上配置心跳线。
vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 10 bcast eth0 mcast eth0 225.0.0.1 694 1 0 auto_failback on respawn hacluster /usr/lib/heartbeat/ipfail node ld.example.com
重要提示:作为nodenames,我们必须使用以下输出:
uname -n
vi /etc/ha.d/haresources
ld.example.com ldirectord::ldirectord.cf LVSSyncDaemonSwap::master IPaddr2::10.10.10.53/24/eth0/10.10.10.255
上面第一行的第一个字是输出
uname -n
vi /etc/ha.d/authkeys
auth 3 3 md5 somerandomstring
chmod 600 /etc/ha.d/authkeys
测试
我们检查负载平衡器是否按预期工作:
ip addr sh eth0
负载平衡器应列出虚拟IP地址( 10.10.10.53
):
2: eth0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:c8:6f:2f brd ff:ff:ff:ff:ff:ff
inet 10.10.10.52/24 brd 10.10.10.255 scope global eth0
inet 10.10.10.53/24 brd 10.10.10.255 scope global secondary eth0:0
如果您的测试正常,您现在可以继续配置两个Apache / IIS节点。
群集节点配置(Apache Real Web Servers配置)
在两个Web服务器http1和http2上,apache应该运行一个共同的服务文件(为了被ldirectord检查的目的)。
yum install httpd -y
echo "webserverisworking" > /var/www/html/check.txt
service httpd start
chkconfig httpd on
现在,在每个Web服务器上创建一个环回接口,因此它不直接与您的网络网关/路由器通信。
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
它必须如下所示:
DEVICE=lo:0 IPADDR=10.10.10.53 NETMASK=255.255.255.255 ONBOOT=yes NAME=loopback
vi /etc/sysctl.conf
它必须如下所示:
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_announce = 2
sysctl -p
ifup lo:0
Windows XP / 2003/2008用户!:如果您使用IIS6 / 7作为Web服务器,那么您应该遵循下一步骤,否则只是跳过。
群集节点配置(IIS6 / 7 Real Web Server配置)
1.使用记事本创建文本文件并将其命名为“check.txt”
2.使用“webserverisworking”字符串填写此文件。
3.将文件移动到“C:\ inetpub \ wwwroot”或您的Web文件的任何位置。
如果您使用Windows XP / 2003 IIS Web服务器,那么您应该执行以下步骤:
1.在控制面板中使用“添加硬件”图标安装“Microsoft Loopback Adapter”。
2.将IP设置为10.10.10.53
3.将子网掩码设置为255.255.255.0
4.不要设置网关或DNS
完成!
如果您正在使用Windows 2008 IIS Web服务器,那么您应该执行以下步骤:
1.在控制面板中使用“添加硬件”图标安装“Microsoft Loopback Adapter”。
2.将IP设置为10.10.10.53
3.将子网掩码设置为255.255.255.0
4.不要设置网关或DNS
然后你需要使用以下命令行magic:
netsh interface ipv4 set interface "net" weakhostreceive=enabled
netsh interface ipv4 set interface "loopback" weakhostreceive=enabled
netsh interface ipv4 set interface "loopback" weakhostsend=enabled
注意:首先,您需要将特定适配器从默认的“局域网连接1”重新命名为“net”或“loopback”,分别为
有关详细信息,请参阅以下链接http://blog.loadbalancer.org/direct-server-return-on-windows-2008-using-loopback-adpter/
最后一个考试
使用“ipvsadm”列出ldirectord的当前统计信息。 确保两个真实的服务器IP都列在那里,并具有非零值的权重(因为我们有这个默认设置,应该是1)。 如果没有,请尝试检查日志文件,tddctor上的tcpdump和真实服务器上的apache日志。 如果一切顺利,您将会在多次浏览http://10.10.10.53/(从这些集群节点之外的其他系统)中看到内容更改。 然后在一个Web服务器上停止httpd,再次浏览该URL,现在所有请求都将从其他Web服务器提供。
ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.53:http lblc
192.168.200.102:http Route 1 0 0
192.168.200.103:http Route 1 0 0
有关更多信息,请使用以下命令:
ipvsadm -L -nc
ipvsadm -L -n --rate
ipvsadm -L -n --stats
参考文献
http://bashukhan.com/ha-lb-cluster-on-centos5-without-actual-heartbeat-p
https://www.youcl.com/info/7170
http://www.linuxvirtualserver.org/