CentOS 5.3上的高效高可用负载平衡群集(直接路由方法)

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.102192.168.200.103 )的IP地址。 在request =行中,我们列出了httpdhttp2上的文件名,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/

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏