HA Cluster工作模型
- A/P:两节点集群,active,passive:工作于主备模型
HA Service通常只有一个,HA Resource可能有多个 - A/A:两节点集群,active/active,工作于双主模型
- N-M:N个节点,M个服务,活动节点为M,备用节点为N-M
- N-N:N个节点,N个服务,节点宕机,服务N-1中的其中一个节点迁移
partitioned cluster
出现分区集群的时候,我们会进行投票系统投票选举那边的集群可以继续对外提供服务,而without quorum的集群将要进行怎么样处理,我们也是可以对其进行配置的,常见的处理方式有:
- stopped:停止
- ignore:忽略
- freeze:冻结
- suicide:自杀
资源的倾向性
资源的分配在一个高可用的集群中是有CRM进行管理的,而不同的CRM进行管理资源的方式也是不同的:
- rgmanager:通过迁移域(failover domain)的方式进行管理,每个迁移域有相应的节点优先级(node priority)
- pacemaker:
- 资源黏性:运行于某个节点的倾向性
- 资源约束:
- – 位置约束:资源对于运行某个节点的倾向性
- – 排列约束:资源运行于一处的倾向性
- – 顺序约束:启动的先后顺序
a->b->c 启动
c->b->a 关闭
heartbeat v1扩展
前面我们完成了对于一个网站服务,我们可以通过迁移服务和ip来完成一个web服务的迁移,但是如果针对一个真正可用性的网站服务来说程序目录所在的文件系统,甚至数据库及数据库数据目录都是需要进行故障迁移的,然后这里我们简单演示下文件系统怎么进行迁移,对于数据库的迁移也可以参考httpd的迁移。
我们需要先布置一套共享文件系统,这里使用nfs文件系统:
1 | ~]# yum install -y nfs-utils |
2 | ~]# mkdir /data |
3 | ~]# chown -R apache.apache /data |
4 | ~]# vim /etc/export |
5 | /data 10.211.55.0/24(rw,no_root_squash) |
6 | ~]# service nfs start |
node1
1 | ~]# yum install -y showmount |
2 | ~]# mkdir /data |
3 | ~]# showmount -e 10.211.55.39 |
4 | Export list for 10.211.55.39: |
5 | /data 10.211.55.0/24 |
6 | ~]# vim /etc/ha.d/haresources |
7 | node1 10.211.55.24/24/eth0/10.211.55.255 Filesystem::10.211.55.39:/data::/data::nfs httpd |
8 | ~]# service heartbeat restart |
9 | ~]# mount |
10 | /dev/mapper/VolGroup-lv_root on / type ext4 (rw) |
11 | proc on /proc type proc (rw) |
12 | sysfs on /sys type sysfs (rw) |
13 | devpts on /dev/pts type devpts (rw,gid=5,mode=620) |
14 | tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") |
15 | /dev/sda1 on /boot type ext4 (rw) |
16 | /dev/mapper/VolGroup-lv_home on /home type ext4 (rw) |
17 | none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) |
18 | sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) |
19 | 10.211.55.39:/data on /data type nfs (rw,vers=4,addr=10.211.55.39,clientaddr=10.211.55.45) |
20 | |
21 | ~]# scp /etc/ha.d/haresources node2:/etc/ha.d/ |
22 | ~]# ssh node2 'service heartbeat restart' |
23 | |
24 | 测试: |
25 | ~]# cd /usr/lib64 |
26 | ~]# ./hb_standby #手动迁移 |
node2
1 | ~]# mount |
2 | /dev/mapper/VolGroup-lv_root on / type ext4 (rw) |
3 | proc on /proc type proc (rw) |
4 | sysfs on /sys type sysfs (rw) |
5 | devpts on /dev/pts type devpts (rw,gid=5,mode=620) |
6 | tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") |
7 | /dev/sda1 on /boot type ext4 (rw) |
8 | /dev/mapper/VolGroup-lv_home on /home type ext4 (rw) |
9 | none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) |
10 | sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) |
11 | 10.211.55.39:/data on /data type nfs (rw,vers=4,addr=10.211.55.39,clientaddr=10.211.55.46) |
12 | ~]# ifconfig |
13 | eth0 Link encap:Ethernet HWaddr 00:1C:42:E2:B9:94 |
14 | inet addr:10.211.55.46 Bcast:10.211.55.255 Mask:255.255.255.0 |
15 | inet6 addr: fdb2:2c26:f4e4:0:21c:42ff:fee2:b994/64 Scope:Global |
16 | inet6 addr: fe80::21c:42ff:fee2:b994/64 Scope:Link |
17 | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
18 | RX packets:1477092 errors:0 dropped:0 overruns:0 frame:0 |
19 | TX packets:940506 errors:0 dropped:0 overruns:0 carrier:0 |
20 | collisions:0 txqueuelen:1000 |
21 | RX bytes:309576127 (295.2 MiB) TX bytes:139032529 (132.5 MiB) |
22 | |
23 | eth0:0 Link encap:Ethernet HWaddr 00:1C:42:E2:B9:94 |
24 | inet addr:10.211.55.24 Bcast:10.211.55.255 Mask:255.255.255.0 |
25 | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
26 | ~]# netstat -ntlp |
27 | Active Internet connections (only servers) |
28 | Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name |
29 | tcp 0 0 0.0.0.0:48978 0.0.0.0:* LISTEN - |
30 | tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5961/sshd |
31 | tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1414/master |
32 | tcp 0 0 :::80 :::* LISTEN 15910/httpd |
33 | tcp 0 0 :::22 :::* LISTEN 5961/sshd |
34 | tcp 0 0 :::33495 :::* LISTEN - |
35 | tcp 0 0 ::1:25 :::* LISTEN 1414/master |
上述我们就实现了一个httpd程序完整的资源迁移过程,httpd的运行资源有监听的ip,文件系统的程序文件,httpd程序。