文档章节

LVS+Heartbeat+Ldirectord

lee_ypp
 lee_ypp
发布于 2014/07/25 11:36
字数 2539
阅读 975
收藏 51

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

                    --leeypp@gmail.com









© 著作权归作者所有

共有 人打赏支持
lee_ypp
粉丝 65
博文 46
码字总数 67139
作品 0
程序员
私信 提问
加载中

评论(2)

nihoma
nihoma
写的挺不错的,学习了0
Euray
Euray
学习了,标记下

暂无文章

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部