技术开发 频道

集群技术实战:实现负载均衡和HA

    第二步,通过Edge Component来进行负载均衡和HA(High Availability)的配置。这样,就可以实现系统的高性能并且保证系统的高可用性。 

    A.可以使用光盘安装或者使用iso安装,安装时需要打上最新的补丁。这里要注意,补丁的安装很关键,在本次实战中,我们通过介质来安装,在安装时只选择安装产品的lic文件。安装完毕后,把已经安装的包全部卸载掉,使用最新的包来安装,再把lic文件copy回去。 

    B.安装完Edge Component,在任意路径下执行命令“dsserver”启动服务,并执行命令“lbadmin”,进入配置向导。

右键点击【分派器】,选择【连接到主机】, 右键点击【主机】,选择【启动执行程序】, 右键点击【执行程序】,选择【添加集群】, 右键点击【集群】,选择【添加端口】, 右键点击【端口】,选择【添加服务器】。将集群两个节点主机的IP输入。因Edge Component和HTTP Server安装在一台机器上,故需要对集群进行“并置”设置。

C.配置Edge Component和HTTP服务器的并置

在GUI方式下,添加完HTTP服务器后,点击所添加的HTTP服务器,在右边的配置界面页,选择【Collocated (“已配置”)】为yes;或者,通过命令行方式:
dscontrol server set clustername:80:http_name collocated y
clustername集群地址,这是一个虚IP,客户端请求将根据LB的配置被分发到两台服务器中的某一台。

D.在应用服务器上配置loopback

在命令行中分别执行(IP-A,IP-B分别为服务器的IP地址):

ifconfig lo0 alias IP-A netmask 255.255.255.0
ifconfig lo0 alias IP-B netmask 255.255.255.0

 之后重启IHS:

/opt/IBMIHS /bin/apachectl stop /opt/IBMIHS /bin/apachectl start

    然后在浏览器上用集群地址访问,测试是否配置成功。

    E.解除集群地址的配置。因为在HA的环境里,集群地址是要交给LB的脚本自动配置,而不是这样固定配置的。退出服务器A上的LB管理界面,停止LB服务:

dsserver stop

    F.在另一台LB的服务器B上,完全重复以上A-E的所有操作。特别是当LB验证安装配置成功后,一定要按照上一步,取消集群地址的配置。

    G. 可以使用以下脚本在命令行中实现HA的配置,当然,你也可以选择GUI的方式来配置主分发器和副分发器的配置。但是,依旧需要对goActive、goStandby、goInOp和highavailChange四个脚本的配置,这几个脚本在安装目录的/samples下有样本文件(.sample),进行简单修改即可。这里,我们将通过命令行的方式来对主分发器和副分发器进行配置,然后添加四个脚本文件。

    主分发器配置(以下脚本中serverA即为服务器A的IP,serverB即为服务器B的IP):

dscontrol set loglevel 1 dscontrol executor start dscontrol executor set fintimeout 30 dscontrol highavailability heartbeat add serverA serverB dscontrol highavailability backup add primary=serverA auto port dscontrol highavailability reach add netmaskIP dscontrol cluster add clusterIP address clusterIP primaryhost serverA dscontrol cluster set clusterIP proportions 49 50 1 0 dscontrol port add clusterIP 0:80 reset no dscontrol server add clusterIP:80: serverB address serverB dscontrol server set clusterIP:80: serverB weight 12 dscontrol server add clusterIP:80:serverA address serverA dscontrol server set clusterIP:80:serverA collocated y #(并置) dscontrol manager start manager.log 10004 dscontrol advisor start Http clusterIP:80 Http_clusterIP_80.log

副分发器配置:

dscontrol set loglevel 1 dscontrol executor start dscontrol executor set fintimeout 30 dscontrol highavailability heartbeat add serverB serverA dscontrol highavailability backup add backup auto 12345 dscontrol highavailability reach add netmaskIP dscontrol cluster add clusterIP address clusterIP primaryhost serverA dscontrol cluster set clusterIP proportions 49 50 1 0 dscontrol port add clusterIP:80 reset no dscontrol server add clusterIP:80:serverA address serverA dscontrol server set clusterIP:80:serverA weight 12 dscontrol server add clusterIP:80:serverB address serverB dscontrol server set clusterIP:80:serverB collocated y dscontrol manager start manager.log 10004 dscontrol advisor start Http clusterIP:80 Http_clusterIP_80.log


    完成分发器的配置后,我们来添加脚本。在serverA和serverB上的/opt/ibm/edge/lb/servers/bin目录下添加以下四个文件,并使root用户对其具有执行权(脚本中你要将CLUSTER设置为你自己的设定的集群地址):

文件

内容

goActive #!/bin/bash
CLUSTER=192.168.0.30
INTERFACE=eth0:1
NETMASK=255.255.255.0
BCAST=192.168.0.255
# Delete cluster ip on loop back and change sysctl settings
ip addr show lo | grep -q $CLUSTER
if [ $? -eq 0 ]; then
echo "delete $CLUSTER on loop back"
ip addr del $CLUSTER dev lo
fi
sysctl -w net.ipv4.conf.all.arp_ignore=0
sysctl -w net.ipv4.conf.all.arp_announce=0
# Add cluster ip on eth1
echo "Adding device alias"
ifconfig $INTERFACE $CLUSTER netmask $NETMASK broadcast $BCAST up
#!/bin/bash
CLUSTER=192.168.0.30
INTERFACE=eth0:1
# deactive eth0:1 interface
echo "Deleting the device alias(es)"
ifconfig $INTERFACE down
# add loop device alias and setup sysctl conf
ip addr add $CLUSTER/32 scope host dev lo
sysctl -w net.ipv4.conf.all.arp_ignore=3
sysctl -w net.ipv4.conf.all.arp_announce=2
goInOp #!/bin/bash
CLUSTER=192.168.0.30
INTERFACE=eth0:1
# deactive eth0:1 interface
echo "Deleting the device alias(es)"
ifconfig $INTERFACE down
# add loop device alias and setup sysctl conf
ip addr add $CLUSTER/32 scope host dev lo
sysctl -w net.ipv4.conf.all.arp_ignore=3
sysctl -w net.ipv4.conf.all.arp_announce=2
highavailChange #!/bin/bash
DATE=`date`
OUTPUT="$DATE LB just ran $1."
echo $OUTPUT >> /opt/ibm/edge/lb/servers/logs/lb.log
echo $OUTPUT | mail -s "highavailChange" root@localhost
goStandby #!/bin/bash
CLUSTER=192.168.0.30
INTERFACE=eth0:1
# deactive eth0:1 interface
echo "Deleting the device alias(es)"
ifconfig $INTERFACE down
# add loop device alias and setup sysctl conf
ip addr add $CLUSTER/32 scope host dev lo
sysctl -w net.ipv4.conf.all.arp_ignore=3
sysctl -w net.ipv4.conf.all.arp_announce=2
#!/bin/bash
CLUSTER=192.168.0.30
INTERFACE=eth0:1
# deactive eth0:1 interface
echo "Deleting the device alias(es)"
ifconfig $INTERFACE down
# add loop device alias and setup sysctl conf
ip addr add $CLUSTER/32 scope host dev lo
sysctl -w net.ipv4.conf.all.arp_ignore=3
sysctl -w net.ipv4.conf.all.arp_announce=2


    至此,我们的应用系统集群就建立好了,可以使用各种方式来测试一下两台主机的工作情况,比如拔掉主服务器的网线,看服务是不是能自动切换到备机,即通过集群地址是不是能够访问我们部署的应用。正常的工作状态下,你可以通过每台主机的IP或者集群地址来访问部署的应用程序,如果其中一台主机的服务宕掉,你仍旧也可以通过集群地址来访问我们的应用程序。

0
相关文章