文档章节

LVS+Heartbeat+Ldirectord

lee_ypp
 lee_ypp
发布于 2014/07/25 11:36
字数 2539
阅读 960
收藏 51
点赞 1
评论 2

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
粉丝 64
博文 45
码字总数 58692
作品 0
程序员
加载中

评论(2)

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

暂无文章

JPA @MappedSuperclass 注解说明

基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。 1.@MappedSuperclass注解只能标准在类上:@Target({java.lang....

海博1600
8分钟前
0
0
Scala Configuration 相关API

Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档。 读取配置...

Landas
今天
1
0
使用cookie技术 记住账号

1. 效果 2. 实现过程 2.1 前端 将用户的选中传递给后台 这个参数的获取是 参考:https://my.oschina.net/springMVCAndspring/blog/1860498 // var rememberLogin = $("#rememberLoginId").i...

Lucky_Me
今天
1
0
《趣谈网络协议》02之网络分层的真实含义

一、提出问题 1.提出问题 当你听到什么二层设备、三层设备、四层 LB 和七层 LB 中层的时候,是否有点一头雾水,不知道这些所谓的层,对应的各种协议具体要做什么“工作”? 2.这四个问题你弄...

aibinxiao
今天
2
0
Python3学习日志二 Python中的集合set和字典dict

1.集合set 定义一个集合set 我们可以看到定义集合set有两种不同的形式,如果要定义一个空的集合set不能用{}而是要用set();另外,集合是无序的,而且set中的元素是不可重复的,如果你定义了一...

Mr_bullshit
今天
0
0
adb 操作指令详解

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。...

孟飞阳
今天
0
0
nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
今天
1
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
今天
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
今天
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部