LVS+Heartbeat+Ldirectord

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 不可用时把它从集群中剔除,恢复时重新加入。

•Server Array(服务器群)

Server Array 是一组运行实际应用服务的机器,比如 WEB, Mail, FTP, DNS,Media 等等。

在实际应用中,Load Balancer 和 Backup 也可以兼任 Real Server 的角色。

•Shared Storage(共享存储)

Shared Storage 为所有 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/modprob.d, 编辑softdog.conf添加如下行

options softdog

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

/dev/watchdog

node server62.example.com

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

node server63.example.com

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

ping 192.168.2.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  

#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

#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"            检测Test Page这个页面,假如该页面不存在就认为该主机是down的,就不再连接

#       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

#yum install perl-IO-Socket-INET6

#/etc/init.d/ldirectord start

#service httpd stop

#/etc/init.d/heartbeat reload

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,查看以上文件中的相关信息,做出相应的调整。

                    [email protected]









你可能感兴趣的:(LVS+Heartbeat+Ldirectord)