使用心跳和Ldirectord设置负载平衡群集

时间:2020-03-21 11:42:32  来源:igfitidea点击:

我们将在CentOS 6上使用Heartbeat和Ldirector设置负载平衡器。

注意

Ldirectord已从RHEL 6默认存储库中删除,并被Piranha取代。

从RHEL 6.6开始,除了Piranha负载平衡软件外,Red Hat还提供对HAProxy和keepalived的支持。

Piranha已从RHEL 7默认存储库中删除,并替换为HAProxy并保持连接状态。

软件

本文使用的软件:

  • CentOS的6.7
  • Heartbeat 3.0.4
  • Ldirectord 3.9.5
  • ipvsadm 1.26

网络和IP地址

我们的网络设置如下:

  • 10.8.8.0/24-可以访问Internet的LAN。

我们将使用的虚拟机的主机名和角色:

  • lvs-ldir01-具有心跳的活动ldirectord路由器,
  • lvs-ldir02-具有心跳的备用ldirectord路由器,
  • lvs-ldir03/lvs-ldir04-真实服务器,均运行预配置的Apache Web服务器。

有关更多信息,请参见下面的架构。

直接路由Real Server节点配置

在每个真实服务器节点(lvs-ldir03和lvs-ldir04)上,为要用于真实服务器的VIP 10.8.8.45和协议组合运行以下命令:

# iptables -t nat -A PREROUTING -p tcp -d 10.8.8.45 --dport 80 -j REDIRECT

上面的命令将使真实服务器处理发给VIP和端口的数据包。
确保重新启动后保存并还原了防火墙更改:

# service iptables save

Ldirectord设置

Linux Director守护程序(ldirectord)是一个后台进程计算机程序,用于监视和管理Linux虚拟服务器(LVS)集群中的真实服务器。
Ldirectord通过定期请求一个已知的URL并检查响应是否包含预期的字符串来监视实际服务器的运行状况。

尽管ldirectord用于监视和管理LVS群集中的实际服务器,但心跳信号用作负载平衡器(ldirectord)的故障转移监视器。

安装

必须在lvs-ldir01和lvs-ldir02这两个路由器上都重复ldirectord安装步骤。

安装ldirectord的依赖项:

# yum install -y ipvsadm perl-libwww-perl perl-IO-Socket-INET6 perl-Net-SSLeay perl-MailTools

确保已加载IP虚拟服务器Netfilter内核模块:

# modprobe ip_vs

epel5存储库中提供了一个相当旧的(2010-03-21)heartbeat-ldirectord v2.1.4软件包,但现在已将其删除。

我们将使用2013年7月26日发布的ldirectord v3.9.5软件包。

从http://rpm.pbone.net/index.php3/stat/4/idpl/23860919/dir/centos_6/com/ldirectord-3.9.5-3.1.x86_64.rpm.html下载,或者在此处获取(直接链接)并安装。

# rpm -Uvh ldirectord-3.9.5-3.1.x86_64.rpm

在启动时禁用,因为它将由心跳管理:

# chkconfig ldirectord off

配置

创建“ /etc/ha.d/ldirectord.cf”文件并添加以下内容:

# Global Directives
checkinterval = 5
checktimeout = 10
autoreload = no
logfile = "/var/log/ldirectord.log"
#logfile="local0"
quiescent = yes
## virtual = x.y.z.w:p
# protocol = tcp|udp
# scheduler = rr|wrr|lc|wlc
# real = x.y.z.w:p gate|masq|ipip [weight]
## Virtual Server for HTTP
virtual = 10.8.8.45:80
	real = 10.8.8.48:80 gate 1
	real = 10.8.8.49:80 gate 1
	service = http
	protocol = tcp
	request = "lbcheck.html"
	receive = "found"
	scheduler = wlc
	checktype = negotiate

“ virtual =“下的指令必须以[TAB]开头,而不是空格。
真正的Web服务器上必须存在具有“ found”内容的lbcheck.html文件。

有关此处未介绍的配置指令,请参见“ man ldirectord”。

在lvs-ldir01路由器上测试ldirectord:

# /etc/init.d/ldirectord start

我们应该看到这样的东西:

# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
TCP  10.8.8.45:80 wlc
  -> 10.8.8.48:80

Route   1

0

0

-> 10.8.8.49:80

Route   1

0

0

让我们停止ldirectord服务:

# /etc/init.d/ldirectord stop

心跳设置

心跳是Linux-HA的基本高可用性子系统。

安装方式

必须在lvs-ldir01和lvs-ldir02这两个路由器上都重复心跳安装步骤。

例如,我们可以配置一个路由器节点,然后将rsync config配置到另一路由器节点:

# rsync -ah --progress /etc/ha.d/Hyman@theitroad:/etc/ha.d/

安装心跳:

# yum install -y heartbeat

在启动时启用:

# chkconfig heartbeat on

启用转发:

# sed -i 's/net.ipv4.ip_forward = 1/net.ipv4.ip_forward = 0' /etc/sysctl.conf
# sysctl -p

配置

创建“ /etc/ha.d/ha.cf”文件并添加以下内容:

logfile /var/log/ha.log
logfacility local0
debug 0
# Disable the Pacemaker cluster manager
# crm off|on|respawn
crm off
# Interval between heartbeat packets
keepalive 2
# How quickly Heartbeat should decide that a node in a cluster is dead
deadtime 6
# Which port Heartbeat should listen on
udpport 694
# Which interfaces Heartbeat sends UDP broadcast traffic on
bcast eth0
# Automatically fail back to a "primary" node (deprecated)
auto_failback off
# What machines are in the cluster. Use "uname -n"
node lvs-ldir01.hl.local
node lvs-ldir02.hl.local

配置iptables防火墙以允许心跳和HTTP通信:

# iptables -A INPUT -s 10.8.8.0/24 -p udp --dports 694 -j ACCEPT
# iptables -A INPUT -s 10.0.0.0/8 -p tcp --dports 80 -j ACCEPT

保存防火墙规则:

# service iptables save

ldirector可以通过心跳轻松启动和停止。
将ldirectord放在“ /etc/ha.d/resource.d/”目录下,然后我们可以在“ /etc/ha.d/haresources”中添加一行,如下所示:

lvs-ldir01.hl.local IPaddr::10.8.8.45 ldirectord::ldirectord.cf

现在,在lvs-ldir01和lvs-ldir02这两个路由器上启动心跳服务:

# /etc/init.d/heartbeat start

此时,应该将虚拟IP分配给主路由器上的eth0接口:

# ip ad show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 08:00:27:ff:46:00 brd ff:ff:ff:ff:ff:ff

inet 10.8.8.46/24 brd 10.8.8.255 scope global eth0

inet 10.8.8.45/24 brd 10.8.8.255 scope global secondary eth0

inet6 fe80::a00:27ff:feff:4600/64 scope link

valid_lft forever preferred_lft forever
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
TCP  10.8.8.45:80 wlc
  -> 10.8.8.48:80

Route   1

0

15

-> 10.8.8.49:80

Route   1

0

16

故障转移测试

在主路由器节点lvs-ldir01上停止heartbear服务:

[Hyman@theitroad ~]# /etc/init.d/heartbeat stop

lvs-ldir02节点应处于活动状态:

[Hyman@theitroad ~]# ip ad show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 08:00:27:ff:47:00 brd ff:ff:ff:ff:ff:ff

inet 10.8.8.47/24 brd 10.8.8.255 scope global eth0

inet 10.8.8.45/24 brd 10.8.8.255 scope global secondary eth0

inet6 fe80::a00:27ff:feff:4700/64 scope link

valid_lft forever preferred_lft forever

摘录自“ /var/log/ha.log”:

lvs-ldir02.hl.local heartbeat: [4808]: info: mach_down takeover complete.
lvs-ldir02.hl.local heartbeat: [4808]: WARN: node lvs-ldir01.hl.local: is dead
lvs-ldir02.hl.local heartbeat: [4808]: info: Dead node lvs-ldir01.hl.local gave up resources.
lvs-ldir02.hl.local heartbeat: [4808]: info: Link lvs-ldir01.hl.local:eth0 dead.

现在,如果我们在lvs-ldir01节点上启动心跳服务,由于“ auto_failback on”,资源将从lvs-ldir02转移回lvs-ldir01.

故障排除

检查日志“ /var/log/ha.log”和“ /var/log/ldirectord.log”。