Linux下VS/DR+heartbeat实现高可用负载均衡服务

 

HEARBEAT介绍

Heartbeat 是可以从 Linux-HA 项目 Web 站点公开获得的软件包之一。它提供了所有 HA 系统所需要的基本功能,比如启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享 IP 地址的所有者等。它通过串行线、以太网接口或者同时使用二者来监测特定服务(或多个服务)的健康状况。当前版本支持两节点配置,使用专门的 heartbeat“pings”来检查服务的状态和可用性。

LINUX heartbeat使用一个心跳协议,心跳协议意味着消息规则的在两个或更多节点之间发送,如

果消息没有在给定的节点间接收到,就会认为这个节点是失效的并且运行某种失败切换或恢复动

作,LINUX heartbeat使用标准的以太网接口来发送心跳消息。

当LINUX heartbeat被初始化设置好以后,需要选择一个节点作为主节点,当主节点的心跳启动以

后,它将分配一个虚拟IP地址给主节点的网络接口,外部的进程和应用等将按照这个方式访问这

个节点,如果主节失效,那么在集群中的另一个节点将为这个虚拟IP地址启动一个接口并且用地址转换保证所有访问这个IP的请求都绑定到本机,也就是IP自动漂移到本机,这种就是IP地址

接管。

每一个虚拟IP地址都可以被看作是一个资源,它被封装作为程序其工作方式类似于UNIX的INIT

脚本,这意味着它能够启动和停止,并且它也能够被查询是否正在运行,用这种方式,LINUX

heartbeat能够根据用heartbeat协议,根据节点间通信的状态启动或停止这些虚拟IP。

 

 

 

LINUX HEARTBEAT的配置

三个最关键的修改文件: <"/etc/ha.d/authkeys">

<"/etc/ha.d/haresources">

<"/etc/ha.d/ha.cf">

1 配置/etc/ha.d/ha.cf(只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/ha.cf

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

debugfile /var/log/ha-debug #写debug信息到这个文件中

logfile /var/log/ha-log          #写运行日志到这个文件中

keepalive 2 #设置心跳时间为2秒

deadtime 30 #设置离最近一次心跳多长时间没有心跳时表明节点失败

warntime 10 #设置离最近的一次心跳多长时间没有心跳时发出警告

initdead120        #机器重启动或是刚开机时,网络能正确开始工作的时间,最小设置为deadtime的两倍

udpport 694 #bcast/ucast方式心跳通讯所用的UDP端口

#baud 19200 #串口的波特率,使用串口作心跳时需设置

#serial /dev/ttyS0 #串口设备名,使用串口作心跳时需设置

bcast eth0 #使用哪一个设备(网卡)做心跳

#bcast eth1 eth2 #使用多个设备(网卡)做心跳时的设置

auto_failback on #当主节点从失败状态恢复时是否恢复其主节点的身份,即应用是否返回到其自身运行

                                 #on 返回

                                 #off 不返回,其它节点继续作为主节点运行

                                 #legacy 当所有节点都不支持自动返回时,将自身设为自动返回

node gfs132  #节点的主机名或域名,需在/etc/hosts文件或

node gfs133 #所有节点都以node开始的行列出

ping 172.20.16.2 #ping节点,不属于cluster内的节点,通常选一台路由器或交换机作为Ping节点,

#ipfail模块通过此节点来验证网络的连通性,可指定多个Ping节点

respawn hacluster /usr/lib64/heartbeat/ipfail #由heartbeat调用并监视ipfail模块

2 配置/etc/ha.d/haresources (只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/haresources

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

gfs132 172.20.16.99 mysqld mon    #设置heartbeat管理的资源或服务

#格式为:主节点主机名或域名 浮动IP 服务名

#主节点主机名或域名为ha.cf中node行中指定的任一节点

#浮动IP 为对外提供访问的IP,主节点失败后会自动漂移到其它节点,继续对外提供服务.

#服务名为 heartbeat管理的服务

#注意,此文件内容所有节点必须保持一致。

3 配置/etc/ha.d/authkeys(只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/authkeys

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

auth 3 #设置认证方式

#1 crc #格式为:auth <number>

3 md5 Hello! #<number> <authmethod>

[<authkey>] 说明:

#如果是用心跳是用交叉线直接对连两个节点,用crc方式即可,CPU占用最少

#如果心跳位于不安全的网络,如通过共用交换机连接节点,则选用sha1或md5

#sha1占用CPU资源更多,但是更安全,md5安全性及CPU占用率居中

#sha1和md5都需要提供认证KEY,即用来加密的KEY

#注意,此文件权限必须设置为600

4  copy以上配置文件到其它节点

scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys [email protected]:/etc/ha.d/

5  分别设置各节点/etc/ha.d/authkeys文件权限

chmod 600 /etc/ha.d/authkeys (文件权限必须设置为600,否则heartbeat不能正常启动)

#至此安装完毕

     LINUX HEARTBEAT启动和停止

1  LINUX HEARTBEAT启动

在两个节点分别运行service heartbeat start,如果能成功启动因该回显:

[root@ARCHITECT ~]# service heartbeat start

Starting High-Availability services:

[ OK ]

  2   LINUX HEARTBEAT停止

在两个节点分别运行service heartbeat stop,如果能成功停止应回显:

[root@ARCHITECT ~]# service heartbeat stop

Stopping High-Availability services:

[ OK ]

 

 

拓扑图:

 

 

image 

 

 

HA-heartbeat-1:

 

image

挂载光盘:

[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom

安装ipvsadm:

[root@node1 heartbeat-2.1.4]# yum install -y ipvsadm

写条目:

[root@node1 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 -g
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 –g

保存

[root@node1 ~]# service ipvsadm save

[root@node1 ha.d]# service ipvsadm start
Clearing the current IPVS table:                           [  OK  ]
Applying IPVS configuration:                               [  OK  ]
[root@node1 ha.d]# service ipvsadm stop
Clearing the current IPVS table:                           [  OK  ]

安装heartbeat:

[root@localhost ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm –nogpgcheck

进入目录:

[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/

拷贝文件:

[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/

[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/

 

[root@node1 heartbeat-2.1.4]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

进入/etc/ha.d/目录:

[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# ll
total 80
-rw-r--r-- 1 root root   645 Oct 10 16:12 authkeys
-rw-r--r-- 1 root root 10539 Oct 10 16:11 ha.cf
-rwxr-xr-x 1 root root   745 Jul 24  2009 harc
-rw-r--r-- 1 root root  5905 Oct 10 16:12 haresources
drwxr-xr-x 2 root root  4096 Oct 10 16:10 rc.d
-rw-r--r-- 1 root root   692 Jul 24  2009 README.config
drwxr-xr-x 2 root root  4096 Oct 10 16:16 resource.d
-rw-r--r-- 1 root root  7862 Jul 24  2009 shellfuncs

 

编辑修改ha.cf文件:

[root@node1 ha.d]# vim ha.cf

 

91 #bcast  eth0            # Linux
92 #bcast  eth1 eth2       # Linux
93 #bcast  le0             # Solaris
94 bcast   eth1            # Solaris

212 #node   ken3
213 #node   kathy
214 node    node1.a.com
215 node    node2.a.com

 

生成通过md5加密的随机数:

[root@node1 ~]# dd if=/dev/random bs=512 count=1 |openssl md5
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.000127271 seconds, 1.0 MB/s
bbdf2b9865f7d1ed1a8a781369e0e7ba    
[root@node1 ~]#

 

编辑修改authkeys文件:

[root@node1 ha.d]# vim authkeys

23 #auth 1
24 #1 crc
25 #2 sha1 HI!
26 #3 md5 Hello!
27 auth 3
28 3 md5 bbdf2b9865f7d1ed1a8a781369e0e7ba    //md5加密数

 

[root@node1 ha.d]# chmod 600 authkeys

 

编辑修改haresources文件:

[root@node1 ha.d]# vim haresources

45 node1.a.com 192.168.10.100/24/eth0/192.168.10.255  ipvsadm

 

 

 

HA-heartbeat-2:

 

image

挂载光盘:

[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom

安装ipvsadm:

[root@node1 heartbeat-2.1.4]# yum install -y ipvsadm

写条目:

[root@node1 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 -g
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 –g

保存

[root@node1 ~]# service ipvsadm save

[root@node1 ha.d]# service ipvsadm start
Clearing the current IPVS table:                           [  OK  ]
Applying IPVS configuration:                               [  OK  ]
[root@node1 ha.d]# service ipvsadm stop
Clearing the current IPVS table:                           [  OK  ]

安装heartbeat:

[root@localhost ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm –nogpgcheck

进入目录:

[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/

拷贝文件:

[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/

[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/

 

[root@node1 heartbeat-2.1.4]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

进入/etc/ha.d/目录:

[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# ll
total 80
-rw-r--r-- 1 root root   645 Oct 10 16:12 authkeys
-rw-r--r-- 1 root root 10539 Oct 10 16:11 ha.cf
-rwxr-xr-x 1 root root   745 Jul 24  2009 harc
-rw-r--r-- 1 root root  5905 Oct 10 16:12 haresources
drwxr-xr-x 2 root root  4096 Oct 10 16:10 rc.d
-rw-r--r-- 1 root root   692 Jul 24  2009 README.config
drwxr-xr-x 2 root root  4096 Oct 10 16:16 resource.d
-rw-r--r-- 1 root root  7862 Jul 24  2009 shellfuncs

 

编辑修改ha.cf文件:

[root@node1 ha.d]# vim ha.cf

 

91 #bcast  eth0            # Linux
92 #bcast  eth1 eth2       # Linux
93 #bcast  le0             # Solaris
94 bcast   eth1            # Solaris

212 #node   ken3
213 #node   kathy
214 node    node1.a.com
215 node    node2.a.com

 

生成通过md5加密的随机数:

[root@node1 ~]# dd if=/dev/random bs=512 count=1 |openssl md5
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.000127271 seconds, 1.0 MB/s
bbdf2b9865f7d1ed1a8a781369e0e7ba    
[root@node1 ~]#

 

编辑修改authkeys文件:

[root@node1 ha.d]# vim authkeys

23 #auth 1
24 #1 crc
25 #2 sha1 HI!
26 #3 md5 Hello!
27 auth 3
28 3 md5 bbdf2b9865f7d1ed1a8a781369e0e7ba    //md5加密数

 

[root@node1 ha.d]# chmod 600 authkeys

 

编辑修改haresources文件:

[root@node1 ha.d]# vim haresources

45 node1.a.com 192.168.10.100/24/eth0/192.168.10.255  ipvsadm

 

 

 

 

 

 

 

 

 

 

web服务器上的配置:

 

web1服务器上的配置:

Ip信息:

N9ZDGG1_BN{`OV6CV2NL`4B

 

 

安装web:

[root@localhost ~]# yum install httpd   //安装web服务器

[root@localhost ~]# cd /var/www/html/

[root@localhost html]# vim index.html

其内容为:

web1(192.168.10.2)

 

[root@localhost html]# service httpd restart   //重启web服务

 

添加下列条目到/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf

[root@localhost ~]# sysctl –p                       //使其生效

 

[root@localhost ~]# route add -host 192.168.10.100 dev lo:0  //保证用vip还回

 

 

 

web2服务器上的配置:

Ip信息:

}VBDQE50P}6GEFKTN(L@D`N

 

安装web:

[root@localhost ~]# yum install httpd   //安装web服务器

[root@localhost ~]# cd /var/www/html/

[root@localhost html]# vim index.html

其内容为:

web2(192.168.10.3)

 

[root@localhost html]# service httpd restart   //重启web服务

 

添加下列条目到/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf

[root@localhost ~]# sysctl –p                       //使其生效

 

[root@localhost ~]# route add -host 192.168.10.100 dev lo:0  //保证用vip还回

测试:

用pc访问:

image

 

 

刷新页面后:

 

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章