您的位置:首页 > 运维架构 > 网站架构

HA集群--高可用集群

2010-03-22 00:18 375 查看
一 知识点:
1 HA集群--高可用集群
2 Ha高可用集群为热备,多用于数据源和关键点(数据库,应用服务器)是单一的服务
器时。
3 HA软件种类
heart beat软件、RHCS3、 RHCS4、RHEL5(Cluster)
4 HA的三种方式
(1)主从式:正常情况下,工作都由主服务器承担,从服务器不工作;只有当主机宕机时,从服务器才开始工作。
另外,正常情况下,只有主服务器mount在存储上,从服务器不进行mount。
从服务器配置要比主服务器配置低一些。
主服务器上必须有vip(虚拟IP)、service(服务)、share storage(公用存储)。一旦主服务器宕机,这三样东西都自动切换到从服务器上。
优点:sharestorage造价低
缺点:性能不稳定,但相对于对称式稳定,因为从服务器只承担一个服务。

(2)对称式:真对于两个不同的服务,两台服务器互为主从关系,没有绝对的主,也没有绝对的从。如:server1既作为MYSQL的主又作为NFS的从,server2既作为MYSQL的从又作为NFS的主,两台服务器虽然同时运行,但只运行自己为主的服务。
两台服务器都mount在存储上,并同时工作。
必须双控制器
优点:
缺点:sharestorage造价高至少3万;一旦,一台机器宕机,两外一台就要负载两个服务,稳定性差

(3)集群式:结合以上两种方式的优点,集群式采用三台或三台以上服务器同时工作,server1有service1为主服务、server2有service2为主服务、server3有servece1和service2为从服务。
正常情况下,server1和server2同时分当不同的服务进行工作,server3作为server1的从服务器和作为server2的从服务器不工作,只有当server11宕机时,server3作为server1的从才开始工作;或当server2宕机时,server3作为server2的从开始工作。 优点:相对于对于对称式,稳定性提高
缺点:sharestorage造价更高;一旦server1和server2同时宕机,server3就要承担两个服务,稳定性能下降,当然这种情况的几率要比对程式低。

5 HA的组成
Member server :以上三种方式的服务器都叫Member Server
service :每种方式数量不同
heart beat :心跳软件,主从服务器检验对方是否存在

6 heart beat三种方式
network :通过以太网定时收发数据包,进行心跳检测
串口连接:通过串口定时收发数据包,进行心跳检测
阵列柜(share storage): 在时间周期内,通过查看参考点--查看数据文件的修改时间、访问时间、建立时间,有没有变化,从而进行细挑检测。主从式不能用此方式,因为两台机器不能同时被mount。
性能稳定性比F5差,有时候会出现宕机现象,但是能节省30万

7 服务器选购
小型机:CPU在4个以下,主板不贵,最便宜的是3000元;
服务器:CPU在4个以上,主板贵
单一故障点:如果一个机器有只有一个CPU、内存则视为单一故障点
无单一故障点服务器:网卡,内存等都是冗余的,

8仲裁
光凭心跳有无不能判断对方是否宕机,如:心跳方式为network,当主服务器的CPU被僵尸进程(死进程)占用,而网卡并没有问题心跳不会断, 这样如果不及时切换,client就无法正常访问服务。此时就需要另外一个机制进行判断,即仲裁。仲裁是借助第三方来判断主从服务器状态,只有当仲裁不能成功,又没有了心跳后,才能判定为宕机。将进行切换,故障转移。
仲裁:一般由默认网关当仲裁,如果担心一个不够,就设置一堆机器作为仲裁。用ping_grup设置。能访问仲裁,就说明是好的

9 Share storage
被视为磁盘,被mount为sd。软Raid被mound为md,硬Raid被mound为sd

10 watchdog看门狗
监控heartbeat这个进程本身是否正常
有心跳,CPU被僵尸进程占用,如何判断?利用看门狗服务器在间隔时间内定时向看门狗发送数据包,RHCS 3 4 RHEL5(Cluster) heart beat软件都有给看门狗喂食功能
如果没有发送,
看门狗分类:
软看门够,
硬看门狗:往串口上发送
[root@stu1 ~]# modprobe softdog
[root@stu1 ~]# ls /dev/watchdog
/dev/watchdog
[root@stu1 ~]# echo 1 > !$

11 可编程电源控制器:
当主服务器宕机,从服务器会通过网络告诉可编程电源控制器使主服务器关机重启,针对于有加电自启功能的服务器。

二 HA配置
实验目的:通过配置heartbeat实现LVS的Director的备份,并通过ldirector监控
realserver
配置要点:
Heart beat
Member server
share storage
仲裁
故障转移,故障转移域
相关IP:
192.168.0.254 stu254.uplooking.com #NGW
192.168.0.1 stu1.uplooking.com #Director(主服务器)
61.1.1.1 #vip
192.168.0.2 stu2.uplooking.com #backup(从服务器)
192.168.0.3 stu3.uplooking.com #realserver1_RIP1
192.168.0.4 stu4.uplooking.com #realserver2_RIP2

(一)安装
[root@stu1 ~]# mount 192.168.0.254:/var/ftp/pub/ /mnt
[root@stu1 ~]# cd /mnt/heartbeat/
[root@stu1 heartbeat]# rpm -ivh --force --nodeps *
122个安装包

(二)配置
主服务器配置
1 COPY以下4个文件作为配置文件的模板
[root@stu1 ~]# cp /usr/share/doc/heartbeat-2.1.2/ha.cf /etc/ha.d/
[root@stu1 ~]# cp /usr/share/doc/heartbeat-2.1.2/authkeys /etc/ha.d/
[root@stu1 ~]# cp /usr/share/doc/heartbeat-2.1.2/haresources /etc/ha.d/
[root@stu1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.2/ldirectord.cf /etc/ha.d/

2 查看主机名和主机IP,在所有membersever中同步/etc/host中的主机名和IP地址,作为主机名的解析,从而提高访问速度。
[root@stu1 ~]# hostname
stu1.uplooking.com
[root@stu1 ~]# vi /etc/hosts
1 # Do not remove the following line, or various programs
2 # that require network functionality will fail.
3 127.0.0.1 localhost.localdomain localhost
4 ::1 localhost6.localdomain6 localhost6
更改为:
1 # Do not remove the following line, or various programs
2 # that require network functionality will fail.
3 127.0.0.1 localhost.localdomain localhost
4 ::1 localhost6.localdomain6 localhost6
5 192.168.0.1 stu1.uplooking.com
6 192.168.0.2 stu2.uplooking.com
7 192.168.0.3 stu3.uplooking.com
8 192.168.0.4 stu4.uplooking.com

3 配置heartbeat的检测机制
[root@stu1 ~]# vi /etc/ha.d/ha.cf
28 #debugfile /var/log/ha-debug #troubleshooting时使用,这里不用,所以标记
33 logfile /var/log/ha-log #日志文件
38 logfacility local0 #日志类型
52 #keepalive 2 #多长时间作一次心跳
60 deadtime 30 #多长时间认为死掉了,30秒较为合适
65 warntime 5 #警告时间,通常为deadtime时间的一半
75 initdead 120 #第一次心跳连接时间。机器启动时由于初始化动作较多所需时间较长, 为了避免通由心跳deadtime时间30秒判定主服务器状态为宕机,因此设置要大些。
80 udpport 694 #网线方式进行心跳udp 694
000 # 串口方式,先设置波特率,在设置串口文件,如/dev/ttys0,两边要保持一直
82 # Baud rate for serial ports...
83 #
84 #baud 19200 #波特率
85 #
86 # serial serialportname ...
87 #serial /dev/ttyS0 # Linux #设备文件
88 #serial /dev/cuaa0 # FreeBSD
89 #serial /dev/cuad0 # FreeBSD 6.x
90 #serial /dev/cua/a # Solaris
91 #
93 # What interfaces to broadcast heartbeats over?
000 # 广播方式,由于以太网广播会影响网络性能;所以此方式常用于点对点的广播,方法是使用交叉线来连接两台server。
95 #bcast eth0 # Linux
96 #bcast eth1 eth2 # Linux
97 #bcast le0 # Solaris
98 #bcast le1 le2 # Solaris
99 #
000 # 组播方式:给相同群的设备设置同一个多播号,只有相同群号的才接收组播包,从而降低广播包对网络性能的影响
117 # mcast eth0 225.0.0.1 694 1 0
119 # Set up a unicast / udp heartbeat medium
120 # ucast [dev] [peer-ip-addr]
122 # [dev] device to send/rcv heartbeats on
123 # [peer-ip-addr] IP address of peer to send packets to
124 # 单播方式,点到点的收发数据包
125 ucast eth0 192.168.0.2 #指定对方的IP,即主指向从,从指向主
161 auto_failback on #当主恢复正常,自动进行切换
000 #
000 #支持可编程电源控制器。baytech 10.0.0.3 网络方式, /dev/ttyS串口方式
199 #stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
200 #stonith_host ken3 rps10 /dev/ttyS1 kathy 0
201 #stonith_host kathy rps10 /dev/ttyS1 ken3 0
211 watchdog /dev/watchdog #设置watchdog,监控heartbeat这个进程本身是否正常

000 #设置主机名。主机名要与/etc/hosts里的对应。先设置的节点的主机名所对应的主机视为主服务器。这样就能区分主从了。注意:这里不能设置IP地址,因为IP地址较主机名更会经常改变。
215 #node ken3
216 #node kathy
217 node stu1.uplooking.com #第一个是主服务器
218 node stu2.uplooking.com #后面的是从服务器
000 #仲裁:一般由默认网关当仲裁,如果担心一个仲裁不够,可以设置多个仲裁。方法是利用ping_grup来添加一堆机器。
226 #ping 10.10.10.254
227 ping 192.168.0.254 #设置网关为仲裁
234 #ping_group group1 10.10.10.254 10.10.10.253 #设置多个仲裁
000 #
000 #如果仲裁出现问题,就用root身份去执行命令ipfail。Ipfail的意义是宣告ip失效如主宕机了,就以root身份宣告主的IP失效,以免他人连接失效的IP。
260 #respawn hacluster /usr/lib/heartbeat/ipfail
266 #apiauth ipfail gid=haclient uid=hacluster
改为
260 respawn root /usr/lib/heartbeat/ipfail
266 apiauth ipfail gid=root uid=root

4 配置heartbeat的切换操作
/etc/ha.d/ha.cf文件设置了heartbeat的检验机制,没有执行机制。下面来设置当主服务器出现问题heartbeat的执行机制。其内容为:当仲裁裁决主服务器宕机后,该怎样进行切换操作。切换内容有IP地址的切换、服务的切换、共享存储的切换,通过切换这3个内容,使从服务器具有主服务器的同样IP、SERVICE、SHARESTORAGE,从而使client没有察觉。由于本实验里LVS没有共享存储,所以这里不需要设置共享存储的切换,如果是mysql就需要设置。
[root@stu1 ~]# vim /etc/ha.d/haresources
44 #node-name resource1 resource2 ... resourceN #节点的名字,切换第一个资源 ... 第N个资源
56 stu1.uplooking.com IPaddr::61.1.1.1/24/eth0:0 ipvsadm #这里一定设置为主server的名字,以及切换后要拥有的virtul ip地址(其应绑定的网卡),切换后要启用的服务。如IPVSADM(服务脚本的名字)由service ipvsadm save影响的那个文件/etc/sysconfig/ipvsadm

5 配置群组验证
通过群组的验证,来判别其是否为member server,如果是可执行切换操作,如果不是,则不进行。放在内网用auth 1即可,放在外网用加密算法,这样会更加安全。
[root@stu1 ~]# vim /etc/ha.d/authkeys
23 auth 1
24 1 crc #crc是求和算法
25 #2 sha1 HI! #sha1为hash加密,Hi为被加密了的值
26 #3 md5 Hello!

6 设置验证权限
拥有者为rw权限
[root@stu1 ~]# chmod 600 /etc/ha.d/authkeys

7 配置LVS
主服务器除配置以上三个配置文件外,还需配置LVS
[root@stu1 ~]# ipvsadm -C #清空以前的LVS配置
[root@stu1 ~]# ipvsadm -A -t 61.1.1.1:80 -s rr
[root@stu1 ~]# ipvsadm -a -t 61.1.1.1:80 -r 192.168.0.3 -m
[root@stu1 ~]# ipvsadm -a -t 61.1.1.1:80 -r 192.168.0.4 -m
[root@stu1 ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]

8 添加vip
[root@stu1 ~]# ifconfig eth0:1 61.1.1.1
[root@stu1 ~]# ifconfig eth0:1 del 61.1.1.1
[root@stu1 ~]# ifconfig eth0:0 61.1.1.1
9 停止和启动ipvsadm服务
[root@stu1 ~]# service ipvsadm stop #ipvsadm服务会由/etc/ha.d/haresources文件里设置的服务脚本自动启动:stu1.uplooking.com IPaddr::61.1.1.1/24/eth0:0 ipvsadm
[root@stu1 ~]# service heartbeat start #启动心跳服务

从服务器配置
1 COPY主服务器上的相关配置文件
[root@stu2 ~]# scp 192.168.0.1:/etc/hosts /etc/hosts #最好是手动同步此文件内容
[root@stu2 ~]# scp 192.168.0.1:/etc/sysconfig/ipvsadm /etc/sysconfig/
[root@stu2 ~]# scp 192.168.0.170:/etc/ha.d/ha.cf 192.168.0.170:/etc/ha.d/haresources
authkeys 192.168.0.170:/etc/ha.d//etc/ha.d/
注意:此步骤用主copy本地文件给从更为方便。

2 修改配置
[root@stu2 ~]# vi /etc/ha.d/ha.cf
125 ucast eth0 192.168.0.1 #指定对方的IP,即主指向从,从指向主。如为广播方式或组播方式则不需要更改。
[root@stu2 ~]# chmod 400 /etc/ha.d/authkeys
3 停止和启动ipvsadm服务
[root@stu2 ~]# service ipvsadm stop #ipvsadm服务会由/etc/ha.d/haresources文件里设置的服务脚本自动启动:stu1.uplooking.com IPaddr::61.1.1.1/24/eth0:0 ipvsadm
[root@stu2 ~]# service heartbeat start #启动心跳服务

(三)测试:
1 主从两边都作以下操作
[root@stu1 ~]# modprobe iptable_nat 
[root@stu1 ~]# service ipvsadm stop
[root@stu1 ~]# service heartbeat start
[root@stu1 ~]# lsmod | grep dog
softdog 9941 2

2 服务器查看
主服务器上查看
[root@stu1 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:E0:4C:34:FD:B5
inet addr:61.1.1.1 Bcast:61.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:185 Base address:0x8c00
[root@stu1 ~]# ipvsadm -L -n
TCP 6.1.1.85:80 rr
-> 192.168.0.3:80 Route 1 0 0
-> 192.168.0.4:80 Route 1 0 0
从服务器上查看
[root@stu1 ~]# ifconfig
不显示vip的设备和vip
[root@stu1 ~]# ipvsadm -L -n
不显示realserver
3 拔掉主服务器网线 #表示心跳停止

4 服务器查看
从服务器上查看
[root@stu2 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:E0:4C:34:FD:B5
inet addr:61.1.1.1 Bcast:61.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:185 Base address:0x8c00
[root@stu2 ~]# ipvsadm -L -n
TCP 6.1.1.85:80 rr
-> 192.168.0.3:80 Route 1 0 0
-> 192.168.0.4:80 Route 1 0 0
主服务器上查看
[root@stu1 ~]# ifconfig
不显示vip的设备和vip
[root@stu1 ~]# ipvsadm -L -n
不显示realserver
说明切换成功,从已经代替了主的服务

(四)Troubleshooting
1 先看所有机器的 /etc/hosts是否相同
2 查看三个配置文件
[root@stu1 ha.d]# grep -v '^#' /etc/ha.d/ha.cf |grep -v '^$'
注意:vim /etc/ha.d/ha.cf里第一个node节点为主, vim /etc/ha.d/haresources里添加的节点的名字一定是主服务器的hostname
3查看
ifconfig #查看vip
IPVSADM -Ln #查看realserver如果没有就先启动该服务,如果还没有就查看日志
tail /var/log/message
tail /var/log/ha-log
4 通常问题为第一次心跳没有建立
5 服务器总是重启,可能是kill -9 heartbeat了,因为没有人喂狗了

三 配置HA监控realserver的功能
1 先配置好并启动lvs(ipvs)和heartbear
2 配置realserver的监控功能
[root@stu1 ha.d]# cd /etc/ha.d/
[root@stu1 ha.d]# vi ldirectord.cf
11 # Global Directives
12 checktimeout=3 #如果间隔3秒钟都没有收到返回的测试页,则说明realserver宕机了,作为Director就不用它来提供reaserver的服务了。
13 checkinterval=1 #每间隔1秒钟,访问testpage,正常情况下访问应该成功,如果访问不成功,延时超过3秒钟,就说明realserver宕机了,作为Director就不用它来提供reaserver的服务了。
14 #fallback=127.0.0.1:80 #这里是面对全局的,下面的配置fallback=127.0.0.1:80 gate 是面向局部的。这里不启用
15 autoreload=yes #当realserver好了以后,自动加回到队列
16 #logfile="/var/log/ldirectord.log" #日志文件
17 #logfile="local0"
18 #emailalert="admin@x.y.z" #email报告服务
19 #emailalertfreq=3600
20 #emailalertstatus=all
21 quiescent=yes
22
23 # Sample for an http virtual service
24 virtual=61.1.1.1:80 #指定vip和端口(服务)
25 real=192.168.0.170:80 gate #指定realserver。Dr方式是gate ,NAT方式masg ,隧道方式是ipip
26 real=192.168.0.125:80 gate
27 fallback=127.0.0.1:80 gate #如果所有的realserver都坏了,侦测不到了,则让clinet直接登录Director本身的80端口,从而给client展示一个出错画面。
28 service=http #HA只能监控http ftp这两个服务
29 request="test_uplookingerror.html" #checkinterval=1 Director访问的测试页面,每台realserver都要设置一个测试页面且名称和内容相同。
30 receive="Test Page is good" #测试页面返回的结果,我认为29和30行应该在apache服务器上设置被访问的页面名称和页面内容。如果返回的内容不是这个说明realserver服务有问题。
31 # virtualhost=some.domain.com.au #设置虚拟主机,一般不用设置
32 scheduler=wlc #选择调度算法
33 #persistent=600
34 #netmask=255.255.255.255
35 protocol=tcp
36 checktype=negotiate
37 checkport=80 #对应service=http

3 检验上面设置是否生效
[root@stu1 ~]# service ldirectord start
[root@stu1 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Port LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 6.1.1.85:80 rr
-> 192.168.0.170:80 Masq 1 0 0
-> 192.168.0.171:80 Masq 1 0 0
IP Virtual Server version 1.2.1 (size=4096)
如果weight为0而不是1,就说明realserver 192.168.0.3坏了
[root@stu1 ~]# service ldirectord stop

4 让ldirectord服务在心跳服务启动后自动启动
[root@stu1 ~]# vim haresources
56 stu1.uplooking.com IPaddr::61.1.1.1/24/eth0:0 ipvsadm ldirectord

5 [root@stu1 ~]# service heartbeat start

6 [root@stu1 ha.d]# scp ldirectord.cf haresources 192.168.0.4:/etc/ha.d/ #COPY给从
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: