当前访客身份:游客 [ 登录  | 注册加入尚学堂]
启用新域名sxt.cn
新闻资讯

LVS+Heartbeat+Ldirectord

helloworld 发表于 2年前  | 评论(0 )| 阅读次数(951 )|   0 人收藏此文章,   我要收藏

LVS+Heartbeat+Ldirectord


集群技术主要分为三大类:

高可用性(High Available Cluster),例:Linux-HA

负载均衡(Load balancing Cluster),例:LVS、MOSIX

高性能计算(High Performance Computing),例:Beowulf

我们这里使用 RHEL6.5,LVS,Linux-HA,Ldirectord,构造一个高可用的负载均衡集群系统。

 Load Balancer(负载均衡器)

Load Balancer 是整个集群系统的前端,负责把客户请求转发到 Real Server 上。

Backup 是备份 Load Balancer,当 Load Balancer 不可用时接替它,成为实际的 Load Balancer。

Load Balancer 通过 Ldirectord 监测各 Real Server 的健康状况。在 Real Server 不可用时把它从集群中剔除,恢复时重新加入。

系统环境: RHEL6.5x86_64 small install selinux and iptables disabled

Virtual IP             192.168.2.188

192.168.2.162    server62.exampl.com(主节点—调度器)

192.168.2.163    server63.example.com(备用节点)

192.168.2.52      desktop52.example.com(real server)

192.168.2.53      desktop53.example.com(real server)

编辑/etc/hoststs做以上解析

1.HeartBeat

HeartBeat 是 Linux-HA 的高可用性集群软件,它的主要作用是:

•    安装在 Load Balancer 和 Backup 上,运行于 active/standby 模式。

当 Load Balancer 失效时,Backup 自动激活,成为实际的 Load Balancer。

•    切换到 active 模式时,按顺序启动 Virtual IP、IPVS 和 Ldirectord。

切换到 standby 模式时,按顺序关闭 Ldirectord、IPVS 和 Virtual IP。

节点(server62,server63)操作:

1.软件安装:

下载heartbeat-3.0.4-2.el6.x86_64.rpm         

heartbeat-libs-3.0.4-2.el6.x86_64.rpm         

heartbeat-devel-3.0.4-2.el6.x86_64.rpm      

ldirectord-3.9.2-1.2.x86_64.rpm                  

#yum localinstall *

2.配置文件的设置:                                   

#cd /usr/share/doc/heartbeat-3.0.4/

#cp ha.cf haresources authkeys /etc/ha.d/

#cd /etc/ha.d/

#vim/etc/ha.d/ha.cf(主配置文件)

debugfile /var/log/ha-debug

调试日志文件文件,取默认值

logfile /var/log/ha-log

系统运行日志文件,取默认值

logfacility local0

日志等级,取默认值

keepalive 2

心跳频率,自己设定。1:表示 1 秒;200ms:表示 200 毫秒

deadtime 30

节点死亡时间阀值,就是从节点在过了 30 后还没有收到心跳就认为主节点死亡,自己设定

warntime 10

发出警告时间,自己设定

initdead 120

守护进程首次启动后应该等待 120 秒后再启动主服务器上的资源

udpport 694 

心跳信息传递的 udp 端口,使用端口 694 进行 bcast 和 ucast 通信,取默认值(在试验过程中自己设定,以免与其他人造成冲突)

#baud 19200

串口波特率,与 serial 一起使用。

#serial /dev/ttyS0

采用串口来传递心跳信息。

bcast eth1

采用 udp 广播播来通知心跳

#ucast eth1 10.0.0.3

采用网卡 eth1 的 udp 单播来通知心跳,eth1 的 IP

#mcast eth0 225.0.0.1 694 1 0

采用 udp 多播播来通知心跳

auto_failback on

当主节点恢复后,是否自动切回

#stonith baytech /etc/ha.d/conf/stonith.baytech

stonith 用来保证共享存储环境中的数据完整性

watchdog /dev/watchdog

watchdog 能让系统在出现故障 1 分钟后重启该机器,这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。 如果使用该特性,修改系统中/etc/modprobe.conf, 添加如下行

options softdog nowayout=0

这样在系统启动的时候,在内核中装入"softdog"内核模块,用来生成实际的设备文件

/dev/watchdog

node server62.example.com

主节点名称,与 uname –n 保持一致。排在第一的默认为主节点,所以不要搞措顺序

node server63.example.com

副节点名称,与 uname –n 保持一致

ping 192.168.0.251(网关)

respawn hacluster /usr/lib64/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster

默 认 heartbeat 并不检测除本身之外的其他任何服务,也不检测网络状况。所以当网络中断时,并不会进行 Load Balancer 和 Backup 之间的切换。可以通过 ipfail 插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为ping 的节点。

#vim authkeys (认证文件,文件的权限必须是 600)

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

#chmod 600 authkeys

#modprobe softdog(自动生成/dev/watchdog)

#ll /dev/watchdog  

#vi /etc/rc.local    在最后加入

modprobe softdog

#cd /etc/modprobe.d/

#modinfo softdog

# cd /etc/ha.d/

# vim haresources (资源文件)

在最后加入

server62.example.com IPaddr::192.168.2.188/24/eth0:0 httpd

这 个文件中定义了实现集群所需的各个软件的启动脚本,这些脚本必须放在/etc/init.d 或者/etc/ha.d/resource.d 目录里 IPaddr 的作用是启动 Virutal IP,它是 HeartBeart 自带的一个脚本;httpd 是 apache 服务的启动脚本。

#yum install httpd

#ll /etc/init.d/httpd 

# service httpd start

#/etc/init.d/heartbeat start

#ifconfig

#tail /var/log/ha-log(查看日志文件)

#cd /var/www/html/

# echo `hostname` > index.html

分 别查看日志,是否有报错,服务正常的话 server62 上多了个 eth0:0 接口,若没有出现,请等待一会,再使用 ifconfig 查看,若还是没有 eth0:0 接口出现,检查配置文件是否正确!若停止server62 上的 heartbeat 服务,则server63 会接管,并产生一个 eth0:0 接口!

3.测试:

web访问192.168.2.188

这时会显示server62的hostname,关闭server62的heartbeat服务,再刷新页面,server63的heartbeat服务就会自动接管,显示server63的hostname。

2.lvs(linux virtual server)

IPVS IPVS是LVS集群系统的核心软件,它的主要作用是: • 安装在Load Balancer上,把发往Virtual IP的请求转发到Real Server 上。

IPVS的负载均衡机制有三种: 

• Virtual Server via NAT (VS/NAT)

• Virtual Server via IP Tunneling (VS/TUN)

• Virtual Server via Direct Routing (VS/DR)

IPVS的负载调度算法有十种:

• 轮叫(Round Robin )

 • 加权轮叫(Weighted Round Robin ) 

• 最少链接(Least Connections )

• 加权最少链接(Weighted Least Connections ) 

• 基于局部性的最少链接(Locality-Based Least Connections ) 

• 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication ) 

• 目标地址散列(Destination Hashing  ) 

• 源地址散列(Source Hashing )

 • 最短期望延迟(Shortest Expected Delay) 

• 无须队列等待(Never Queue )

本次实现基于DR模式的LVS的安装配置

VS/DR利用 大多数internet服务的非对称特点,负载均衡器只负责调度,而服务器直接将响应返回给客户,可以极大程度提高整个集群系统的吞吐量。

主节点(server62)

1.ipvsadm软件安装

#yum install ipvsadm

2.LVS配置

#ipvsadm -A -t 192.168.2.188:80 -s rr    ##使用ipvsadm安装LVS服务,并定义调度算法为rr

#ipvsadm -l(查看是否存在转发列表)

#ipvsadm -C    ##清空ipvs转发表

#ipvsadm -a -t 192.168.2.188:80 -r 192.168.2.52:80 -g    ##添加第一台realserver

#ipvsadm -a -t 192.168.2.188:80 -r 192.168.2.53:80 -g    ##添加第二台realserver

#service ipvsadm save

#vim /etc/sysctl.conf

net.ipv4.ip_forward =   ##打开内核转发功能

#sysctl -p

#ifconfig eth0:1 192.168.2.12 netmask 255.255.255.0 up        ##添加对外的虚拟网卡(这一步非常重要)

#service httpd stop(将访问交于realserver:desktop52,desktop53)

3.Apache服务搭建

在realserver(desktop52和desktop53)都进行如下操作

#yum install -y httpd

#cd /var/www/html/

#echo `hostname` >  index.html 

#service httpd restart

4.真实服务器设置

在realserver(desktop52和desktop53)都进行如下操作

#yum install -y arptables_jf

#ifconfig eth0:0 192.168.2.188 netmask 255.255.255.255 up

#arptables -A IN -d 192.168.2.188 -j DROP

#arptables -A OUT -s 192.168.2.188 -j mangle --mangle-ip-s 192.168.2.52 (desktop53上是arptables -A OUT -s 192.168.2.188 -j mangle --mangle-ip-s 192.168.2.53)

#service arptables_jf save

这会导致真实服器忽略所有针对虚拟 IP 位址的 ARP 請求,并改变任何向外的 ARP 回应,把原先包含虚拟 IP 的 ARP回应改为真实服务器的 IP。唯一应该要回应任何 VIP 的 ARP 请求的节点,為目前正在启用中的 LVS节点。


做完以上配置在主服务器上查看是否添加成功(有以下显示就说明已添加成功)

#ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.188:http rr
  -> 192.168.2.52:http            Route   1      0          0         
  -> 192.168.2.53:http            Route   1      0          0      

realserver端也有一个虚拟网卡

~~~

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:BC:BB:E6  
              inet addr:192.168.2.188  Bcast:192.168.2.188  Mask:255.255.255.255
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 

                                                                     ~~~

5.LVS测试:

通过web访问192.168.2.188就会实现轮转调度,刷新页面,显示是desktop52.example.com和desktop52.example.com

3.ldirectord    (lvs和heartbeat的整合)

Ldirectord的作用是:

• 监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加。

节点操作:

1.软件安装

下载安装包

ldirectord-3.9.2-1.2.x86_64.rpm      

yum localinstall *

#cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d

# cd /etc/ha.d 

2.配置文件设置

#vim ldirectord.cf

# Sample for an http virtual service
virtual=192.168.2.188:80
        real=192.168.2.52:80 gate
        real=192.168.2.53:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255

        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"

#       receive="Test Page"
#       virtualhost=www.x.y.z

#ll ldirectord.cf 

#ipvsadm -C

#ipvsadm -L

#vim haresources 

server62.example.com IPaddr::192.168.2.188/24/eth0:0 httpd ldirectord

#ldirectord 的作用是启动 ldirectord 监控程序,它会使 ldirectord.cf 中定义的 lvs 生效,并监听其健康状态

3.服务配置:

#ifconfig

#ifconfig eth0:0 down

#/etc/init.d/ldirectord start

#yum install perl-IO-Socket-INET6

#service httpd stop

#/etc/init.d/ldirectord stop

#/etc/init.d/heartbeat stop

4.真实服务器配置

#chkconfig httpd on

#chkconfig arptables_jf on

5.测试:

1).访问虚拟ip查看能否访问到两台realserver节点的httpd服务。刷新页面显示不同内容,说明实现了轮转循环。

2).停掉负载主节点的heartbeat服务,备用节点自动接管任务。当两个节点的heartbeat都停掉时,就会转到本地。

3).交替stop掉或者全部stop掉两台realserver的httpd服务,查看转发列表的变化。

测试方法主要还有以下几种:

1). 将主HA的heartbeat服务关闭,或者关闭主HA机器,在备HA节点查看IP地址,LVS列表是否正常。通过IE访问测试访址是否正常。

2). 由于设置的回切,当主HA节点恢复后,看是否正常回切。

3). 关闭其中一个real节点的应用(即hppd服务),查看LVS列表是否将其real节点清除。恢复real节点应用后,查看LVS列表,是否被添加进来

4.维护:

日志文件有/var/log/messages;/var/log/ha-log;/var/log/ldirectord.log,查看以上文件中的相关信息,做出相应的调整。


分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183