High Avalibility Cluster

集群基本概念:

1、HA Resource

由集群控制的IP地址、服务等

2、FailOver

活动节点故障后,活动节点上的资源全都转移到备份节点

3、FailBack

活动节点状态恢复后,资源转回到活动节点的动作

4、资源粘性

资源是否更倾向于运行在当前节点

HA集群层次架构:

RA:Resource Agent资源代理

LSB脚本:Linux Standard Base

能够接受start | stop | restart | status 4个参数的脚本

由这些脚本负责完成资源的管理

CRM:Cluster Resource Manager 集群资源管理器

负责计算、比较集群节点的事务信息

DC:Designated Coordinator

属于CRM的一部分

在集群节点中选择一个节点作为DC,进行集群节点状态信息进行计算/比较

DC中包括以下两个引擎:

PE:Policy Engine 策略引擎

负责进行集群节点事务信息的计算,比较

TE:Transaction Engine 事务引擎

PE对信息计算结束后,由TE指定集群资源应该转移到哪个节点

LRM:Local Resource Manager

属于CRM的一部分

运行在每个集群节点上,负责接收TE的指令,执行资源转移的操作

Messaging Layer:集群事务信息层

负责传递集群节点的事务信息(心跳信息、资源粘性值等信息)

基于UDP协议工作

以上三个层次的功能可以由不同的软件实现。

RG:Resource Group资源组

将多个资源归为一组,实现资源的共同转移

资源约束:Constraint

排列约束:Colation Constraint

定义资源是否能够运行在同一个节点上

正值:资源可以运行在同一个节点上

负值:资源不可以运行在同一个节点上

位置约束:Location Constraint

通过定义score(分数)来完成约束,定义资源是否更倾向于运行在哪个节点

正值:倾向于此节点

负值:倾向于逃离此节点

顺序约束:Order Constraint

定义资源启动或关闭的顺序

以上score(分数)有如下两个特殊的值:

-inf:负无穷

inf:正无穷

STONITH

当active节点故障时,passive节点会抢夺其资源,为避免active由于假死再次抢夺资源,通过一定的方法使active节点彻底失效

split-brain:脑裂

集群节点无法获取对方的状态信息,产生脑裂

后果之一会导致双方共同争夺共享存储,导致数据损坏

资源隔离:避免产生脑裂

节点级别隔离:STONITH

资源级别隔离

例如,FC SAN switch可以实现在存储资源级别控制某节点是否可以正常访问

STONITH

用于隔离集群节点

STONITH设备

1、Power Distribution Units (PDU) 电源交换机

需要向厂商申请专门用于管理STONITH功能的管理组件

2、Uniterruptible Power Supplies (UPS)

3、Blade Power Control Devices 刀片服务的电源控制设备

4、Lights-out Devices(IBM RSA, HP IL0,Dell DRAC)

服务器自带的管理模块

5、Testing Devices

STONITH的实现

1、stonithd进程

2、STONITH Plug-ins

多节点的高可用集群

ha-aware application:

可以借助Messageing Layer信息传递的功能,实现对集群服务及节点的管理

CRM的目的:

可以为那些本身不具备HA能力的软件提供高可用的功能

quorum:法定票数

每个集群节点都具有一定数量的法定票数,当某个节点的票数小于半数时,节点等待其他节点对自己进行判决

集群的全局资源策略(without_quorum_policy):

当某个节点的票数小于半数时(不具备法定票数的时候),对自身上运行的集群资源的处理机制:

1、freeze

不再接收新的请求,对已经接入的请求继续提供服务

2、stop

停止自身的集群资源

3、ignore

无论法定票数是否满足与否,仍然继续提供服务

Failover Domain:故障转移域

集群资源倾向于转移的节点的集合

集群运行模型:

N--M:

n个节点运行M个服务,n>m;例如4个节点上运行3个服务

N--N:

N个节点运行N个服务

资源类型:

根据资源运行的场景不同,分为如下4类:

1、primitive

某一时刻只能运行在同一个节点上的资源

2、clone

可同时运行在多个节点上的资源

3、group

是个资源容器,将多个集群资源归类到一起

4、master/slave

独特的clone类资源

只能运行在两个节点上,其中一个节点为master主节点,另外一个为slave节点

RA class 类别:

1、Legacy

heartbeat v1版本的RA

2、LSB脚本

/etc/init.d/目录下的所有脚本都是基于LSB的脚本

3、OCF(Open Cluster Framework)脚本

不同的provider内置提供不同的OCF脚本,例如:

pacemaker

linbit(实现drbd)

4、STONITH

专门用于管理硬件STONITH设备

提供Messaging Layer功能的软件

1、heartbeat(v1,v2,v3)

heartbeat v3

heartbeat

pacemaker

cluster-glue

2、corosync(rhel 6.0)

需要配合pacemaker提供CRM功能

3、cman(rhel 5.0)

4、keepalived

专门为lvs Director提供高可用功能使用

5、ultramonkey

提供CRM功能的软件

1、heartbeat v1,自带资源管理器

同时提供Messaging Layer和CRM功能

提供CRM功能的组件是haresource,heartbeat v1自带的管理器

2、heartbeat v2,自带资源管理器

haresource

crm

3、heartbeat v3:资源管理器crm发展为独立的项目pacemaker

pacemaker

4、rgmanager

为cman提供CRM管理功能

高可用集群共享存储

磁盘接口类型:

IDE:  133M/s

SATA3:6G/s

Ultra SCSI: 320M/s

SAS:6G/s

USB 3.0: 400M/s

机械硬盘

随机读写

顺序读写

固态硬盘

IDE,SCSI:并行

SATA,SAS,USB:串行

存储类型:

DAS

Direct Attached Storage

直接接到主板总线,BUS

NAS

Network Attached Storage

文件服务器,文件级别

SAN

Storage Area Network

存储区域网络

IP SAN: iSCSI

FC SAN

SCSI:Small Computer System Interface

宽带

16 target

窄带

8 target

配置高可用集群注意事项 :

1、节点名称必须与uname -a命令看到的名称一致

2、配置基于密钥进行SSH通信

3、各集群节点时间必须同步

4、在/etc/hosts文件中配置各节点的主机名与IP地址解析条目

案例:HA WEB

系统:rhel 6.3 x32

IP1:10.1.1.1    server1.bj.com

IP2:10.1.1.2  server2.bj.com

VIP:10.1.1.254

1、配置两台机器的IP地址及计算机名称

2、编辑两台机器的/etc/hosts文件,确保两台机器可以通过主机名称通信

3、配置两台计算机基于密钥的SSH远程

1)在10.1.1.1上生成key

# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

52:58:3c:04:3a:58:8d:f0:0c:92:58:be:f0:ac:a8:e4 [email protected]

The key‘s randomart image is:

+--[ RSA 2048]----+

|oo+..o.+o        |

|oo *...oo        |

|. o = . ..       |

| + . . .         |

|  +   . S        |

|..     .         |

|o.               |

|+                |

|.E               |

+-----------------+

2)将公钥传递给10.1.1.2

# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

3)测试ssh远程,可以看到server2.bj.com上的IP

# ssh server2.bj.com ‘ifconfig‘

eth0      Link encap:Ethernet  HWaddr 00:0C:29:22:89:6F

inet addr:10.1.1.2  Bcast:10.1.1.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe22:896f/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:1498 errors:0 dropped:0 overruns:0 frame:0

TX packets:1354 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:146902 (143.4 KiB)  TX bytes:185101 (180.7 KiB)

Interrupt:18 Base address:0x2024

同样的方法在10.1.1.2上配置基于密钥的SSH远程

4、配置两台计算机时间同步

# service ntpd stop

# chkconfig ntpd off

# ntpdate 10.1.1.2

# crontab -e

*/5 * * * *  /usr/sbin/ntpdate 10.1.1.2  &> /dev/null

同样的方法配置10.1.1.2与10.1.1.1同步

在两台机器上分别安装httpd,并建立测试首页

# yum install -y httpd

启动httpd服务,测试网页访问是否正常;测试完成后,将httpd关闭,并调整为开机自动关闭

# service httpd stop

停止 httpd:                                               [确定]

# chkconfig httpd off

5、在两台计算机上安装heartbeat软件

软件下载地址:https://dl.fedoraproject.org

# yum localinstall -y --nogpgcheck libnet-1.1.6-7.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm

# yum localinstall --nogpgcheck heartbeat-2.1.4-11.el5.i386.rpm heartbeat-devel-2.1.4-11.el5.i386.rpm heartbeat-gui-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm

heartbeat软件包说明:

1、heartbeat - Heartbeat subsystem for High-Availability Linux

2、heartbeat-devel - Heartbeat development package

3、heartbeat-gui - Provides a gui interface to manage heartbeat clusters

4、heartbeat-ldirectord - Monitor daemon for maintaining high availability resources

为lvs的ipvs高可用提供规则自动生成及后端服务器状态检查的功能

5、heartbeat-pils - Provides a general plugin and interface loading library

装载库的插件及接口

6、heartbeat-stonith - Provides an interface to Shoot The Other Node In The Head

提供STONITH功能的接口

6、编辑heartbeat配置文件

三个配置文件:

1、密钥文件,600,authkeys

2、heartbeat服务的配置 ha.cf

3、资源管理配置文件

haresources

# cp /usr/share/doc/heartbeat-3.0.4/authkeys ha.cf haresources /etc/ha.d/

# chmod 600 /etc/ha.d/authkeys

编辑/etc/ha.d/authkeys文件

使用md5算法计算出随机数字作为密钥

# dd if=/dev/random bs=512 count=1 | md5sum

记录了0+1 的读入

记录了0+1 的写出

8字节(8 B)已复制,19.3129 秒,0.0 kB/秒

d0597a8d45f4ead4fced69ec99f96af5  -

# vim /etc/ha.d/authkeys

在文件最后添加如下内容:

auth 1

1 sha1 d0597a8d45f4ead4fced69ec99f96af5

编辑/etc/ha.d/ha.cf主配置文件

# vim /etc/ha.d/ha.cf

//指定集群节点的名称

node    server1.bj.com

node    server2.bj.com

//指定传递集群事务信息的方式为广播

bcast   eth0            # Linux

编辑/etc/ha.d/haresources文件,定义集群资源

# vim /etc/ha.d/haresoures

在文件最后添加如下内容:

定义IP地址资源及服务资源

server1.bj.com  IPaddr::10.1.1.254/24/eth0 httpd

由于server2上的heartbeat配置文件与server1相同 ,因此直接复制配置文件

# scp -p /etc/ha.d/haresources /etc/ha.d/ha.cf /etc/ha.d/authkeys server2:/etc/ha.d/

7、启动heartbeat服务

# service heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

# ssh server2 ‘service heartbeat start‘

Starting High-Availability services: 2015/08/27_15:36:59 INFO:  Resource is stopped

Done.

查看日志/var/log/messgage

# tail -30 /var/log/messages

Aug 27 15:36:30 localhost heartbeat: [30438]: info: G_main_add_TriggerHandler: Added signal manual handler

Aug 27 15:36:30 localhost heartbeat: [30438]: info: G_main_add_SignalHandler: Added signal handler for signal 17

Aug 27 15:36:30 localhost heartbeat: [30438]: info: Local status now set to: ‘up‘

Aug 27 15:36:30 localhost heartbeat: [30438]: info: Link 10.1.1.100:10.1.1.100 up.

Aug 27 15:36:30 localhost heartbeat: [30438]: info: Status update for node 10.1.1.100: status ping

Aug 27 15:36:30 localhost heartbeat: [30438]: info: Link server1.bj.com:eth0 up.

Aug 27 15:37:00 localhost heartbeat: [30438]: info: Link server2.bj.com:eth0 up.

Aug 27 15:37:00 localhost heartbeat: [30438]: info: Status update for node server2.bj.com: status up

Aug 27 15:37:00 localhost harc(default)[30449]: info: Running /etc/ha.d//rc.d/status status

Aug 27 15:37:00 localhost heartbeat: [30438]: info: Comm_now_up(): updating status to active

Aug 27 15:37:00 localhost heartbeat: [30438]: info: Local status now set to: ‘active‘

Aug 27 15:37:00 localhost heartbeat: [30438]: info: Status update for node server2.bj.com: status active

Aug 27 15:37:00 localhost harc(default)[30467]: info: Running /etc/ha.d//rc.d/status status

Aug 27 15:37:10 localhost heartbeat: [30438]: info: local resource transition completed.

Aug 27 15:37:10 localhost heartbeat: [30438]: info: Initial resource acquisition complete (T_RESOURCES(us))

Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30522]: INFO:  Resource is stopped

Aug 27 15:37:11 localhost heartbeat: [30486]: info: Local Resource acquisition completed.

Aug 27 15:37:11 localhost heartbeat: [30438]: info: remote resource transition completed.

Aug 27 15:37:11 localhost harc(default)[30565]: info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp

Aug 27 15:37:11 localhost ip-request-resp(default)[30565]: received ip-request-resp IPaddr::10.1.1.254/24/eth0 OK yes

Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Acquiring resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 httpd

Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30616]: INFO:  Resource is stopped

Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 start

Aug 27 15:37:11 localhost IPaddr(IPaddr_10.1.1.254)[30701]: INFO: Using calculated netmask for 10.1.1.254: 255.255.255.0

Aug 27 15:37:11 localhost IPaddr(IPaddr_10.1.1.254)[30701]: INFO: eval ifconfig eth0:0 10.1.1.254 netmask 255.255.255.0 broadcast 10.1.1.255

Aug 27 15:37:11 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.

Aug 27 15:37:11 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.

Aug 27 15:37:11 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.

Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30675]: INFO:  Success

Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Running /etc/init.d/httpd  start

查看本地80端口启动

# netstat -antp | grep :80

tcp        0      0 :::80                       :::*                        LISTEN      30816/httpd

查看本地在eth0网卡上配置了vip

# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:6A:65:5F

inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe6a:655f/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:13236 errors:0 dropped:0 overruns:0 frame:0

TX packets:10156 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:5251806 (5.0 MiB)  TX bytes:1784036 (1.7 MiB)

Interrupt:18 Base address:0x2024

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:6A:65:5F

inet addr:10.1.1.254  Bcast:10.1.1.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Interrupt:18 Base address:0x2024

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:2 errors:0 dropped:0 overruns:0 frame:0

TX packets:2 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:168 (168.0 b)  TX bytes:168 (168.0 b)

在客户端使用http://10.1.1.254可以查看到server1.bj.com网页

模拟资源转移

在server1上执行如下命令,将server1转移为standby备份节点

# cd /usr/share/heartbeat/

# ./hb_standby

Going standby [all].

查看日志可以看到其他节点已经接收了资源

# tail /var/log/messages

Aug 27 15:47:20 localhost ResourceManager(default)[30888]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 stop

Aug 27 15:47:20 localhost IPaddr(IPaddr_10.1.1.254)[30971]: INFO: ifconfig eth0:0 down

Aug 27 15:47:20 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.

Aug 27 15:47:20 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30945]: INFO:  Success

Aug 27 15:47:20 localhost heartbeat: [30875]: info: all HA resource release completed (standby).

Aug 27 15:47:20 localhost heartbeat: [30438]: info: Local standby process completed [all].

Aug 27 15:47:20 localhost heartbeat: [30438]: WARN: 1 lost packet(s) for [server2.bj.com] [633:635]

Aug 27 15:47:20 localhost heartbeat: [30438]: info: remote resource transition completed.

Aug 27 15:47:20 localhost heartbeat: [30438]: info: No pkts missing from server2.bj.com!

Aug 27 15:47:20 localhost heartbeat: [30438]: info: Other node completed standby takeover of all resources.

在server2上分别查看vip和80端口是否开启

# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:22:89:6F

inet addr:10.1.1.2  Bcast:10.1.1.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe22:896f/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6323 errors:0 dropped:0 overruns:0 frame:0

TX packets:5233 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1492002 (1.4 MiB)  TX bytes:840576 (820.8 KiB)

Interrupt:18 Base address:0x2024

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:22:89:6F

inet addr:10.1.1.254  Bcast:10.1.1.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Interrupt:18 Base address:0x2024

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:19 errors:0 dropped:0 overruns:0 frame:0

TX packets:19 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1951 (1.9 KiB)  TX bytes:1951 (1.9 KiB)

# netstat -antp | grep :80

tcp        0      0 :::80                       :::*                        LISTEN      30585/httpd

在客户端浏览器中http://10.1.1.254会看到server2.bj.com网页

在10.1.1.3上搭建nfs服务器,nfs服务器中存储网页文件;两台网站分别将nfs共享目录自动挂载到/var/www/html目录中,并测试文件系统资源 切换

1、在10.1.1.3上搭建nfs服务

# cat /webdata/index.html

<h1> nfs web page </h1>

# cat /etc/exports

/webdata 10.1.1.0/24(ro)

# service nfs start

# showmount -e 10.1.1.3

Export list for 10.1.1.3:

/webdata 10.1.1.0/24

2、在主节点上停止备份节点的heartbeat服务及自身的heartbeat服务

# ssh server2 ‘service heartbeat stop‘

# service heartbeat stop

3、编辑/etc/ha.d/haresources配置文件,添加Filesystem资源

# vim /etc/ha.d/haresouces

server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd

将/etc/ha.d/haresources配置文件复制到节点server2.bj.com

# scp /etc/ha.d/haresources server2:/etc/ha.d/

4、启动本地的heartbeat服务,启用备份节点的heartbeat服务

# service heartbeat start

# ssh server2 ‘service heartbeat start‘

在客户端浏览器中输入 http://10.1.1.254可以查看到nfs服务器网页

在主节点运行/usr/share/heartbeat/hb_standby脚本,转换为备份节点,客户端浏览同样是nfs服务器页面

在server2节点上分别查看vip/filesystem/servcice资源转换成功

查看日志可以看到资源转换过程

# tail -40 /var/log/messages

Aug 27 16:28:52 localhost heartbeat: [31714]: info: server2.bj.com wants to go standby [all]

Aug 27 16:28:53 localhost heartbeat: [31714]: info: standby: acquire [all] resources from server2.bj.com

Aug 27 16:28:53 localhost heartbeat: [1566]: info: acquire all HA resources (standby).

Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Acquiring resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd

Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[1608]: INFO:  Resource is stopped

Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 start

Aug 27 16:28:53 localhost IPaddr(IPaddr_10.1.1.254)[1698]: INFO: Using calculated netmask for 10.1.1.254: 255.255.255.0

Aug 27 16:28:53 localhost IPaddr(IPaddr_10.1.1.254)[1698]: INFO: eval ifconfig eth0:0 10.1.1.254 netmask 255.255.255.0 broadcast 10.1.1.255

Aug 27 16:28:53 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.

Aug 27 16:28:53 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.

Aug 27 16:28:53 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.

Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[1667]: INFO:  Success

Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[1804]: INFO:  Resource is stopped

Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/ha.d/resource.d/Filesystem 10.1.1.3:/webdata /var/www/html nfs start

Aug 27 16:28:53 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[1887]: INFO: Running start for 10.1.1.3:/webdata on /var/www/html

Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[1879]: INFO:  Success

Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/init.d/httpd  start

Aug 27 16:28:53 localhost heartbeat: [1566]: info: all HA resource acquisition completed (standby).

Aug 27 16:28:53 localhost heartbeat: [31714]: info: Standby resource acquisition done [all].

Aug 27 16:28:54 localhost heartbeat: [31714]: info: remote resource transition completed.

Aug 27 16:40:22 localhost heartbeat: [31714]: info: server1.bj.com wants to go standby [all]

Aug 27 16:40:23 localhost heartbeat: [31714]: info: standby: server2.bj.com can take our all resources

Aug 27 16:40:23 localhost heartbeat: [2040]: info: give up all HA resources (standby).

Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Releasing resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd

Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/init.d/httpd  stop

Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/ha.d/resource.d/Filesystem 10.1.1.3:/webdata /var/www/html nfs stop

Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: Running stop for 10.1.1.3:/webdata on /var/www/html

Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: Trying to unmount /var/www/html

Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: unmounted /var/www/html successfully

Aug 27 16:40:23 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[2110]: INFO:  Success

Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 stop

Aug 27 16:40:23 localhost IPaddr(IPaddr_10.1.1.254)[2263]: INFO: ifconfig eth0:0 down

Aug 27 16:40:23 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.

Aug 27 16:40:23 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[2235]: INFO:  Success

Aug 27 16:40:23 localhost heartbeat: [2040]: info: all HA resource release completed (standby).

Aug 27 16:40:23 localhost heartbeat: [31714]: info: Local standby process completed [all].

Aug 27 16:40:24 localhost heartbeat: [31714]: WARN: 1 lost packet(s) for [server2.bj.com] [1856:1858]

Aug 27 16:40:24 localhost heartbeat: [31714]: info: remote resource transition completed.

Aug 27 16:40:24 localhost heartbeat: [31714]: info: No pkts missing from server2.bj.com!

Aug 27 16:40:24 localhost heartbeat: [31714]: info: Other node completed standby takeover of all resources.

CRM:Cluster Resource Manager

为那些本身不支持HA功能的应用程序提供调用的基础平台

haresource(heartbeat v1)

crm,haresource(heartbeat v2)

pacemaker(heartbeat v3)

rgmanager(RHCS)

crmd:提供管理集群资源的API (例如在heartbeat v1中haresource配置文件就是一个管理集群资源的接口)

GUI

CLI

Resource Type:

primitive(native)基本资源

group

clone

例如:

STONITH

Cluster Filesystem集群文件系统(gfs2/ocfs2)

dlm:Distributed Lock Manager分布式锁管理器

集群文件系统利用dlm机制通知各节点文件锁的状态

master/slave

drbd:distributed replaction block device分布式复制块设备

在一个集群服务中,如果定义了多个资源,默认情况下,资源是平均分配的;如果想让多个资源运行在同一个节点上,可以定义资源组或者通过排列约束完成

资源粘性:

资源是否倾向于留在当前节点

正数:倾向

负数:离开

资源约束:

location

colocation

order

使用crm进行集群资源管理时,由CIB保存集群资源的配置信息

CIB:Cluster Information Base集群信息库

xml格式

在ha.cf文件中启用crm后,haresource文件中定义的资源将会失效;如果想让crm读取haresource文件中定义的集群资源,可以执行/usr/lib/heartbeat中的haresource2cib.py脚本,该脚本会将haresource文件中定义的资源转换为crm可以读取的xml格式的文件保存到/var/lib/heartbeat/crm目录中

crmd进程默认监听在tcp 5560端口

配置基于crm的heartbeat

1、关闭server1和server2上的Heartbeat服务

# ssh server2 ‘service heartbeat stop‘

# service heartbeat stop

2、修改server1上的/etc/ha.d/ha.cf配置文件,并将其复制到server2上

在文件最后添加如下内容:

# vim /etc/ha.d/ha.cf

crm respawn

3、在server1和server2分别启动heartbeat服务

# service heartbeat start

# ssh server2 ‘service heartbeat start‘

查看机器的5560/tcp端口正常开启

# netstat -tnpl | grep :5560

tcp        0      0 0.0.0.0:5560                0.0.0.0:*                   LISTEN      23771/mgmtd

通过crm_mon监控命令可以查看到当前有两个集群节点,没有集群资源

# crm_mon

4、打开heartbeat gui界面,配置集群资源

在使用gui界面,需要输入hacluster用户名及密码,hacluster用户存在,需要手动设置密码

# echo "redhat" | passwd --stdin hacluster

# hb_gui &

输入要连接集群节点的IP地址及用户名、密码;

集群节点IP要写DC所在节点的IP,通过crm_mon命令可以查看到哪个节点是DC

连接成功后,界面如下所示:

定义vip和httpd服务资源,定义完毕后,可以看到两个资源是均衡分散在两个不同的节点上运行的

定义资源组webgroup,使vip和httpd资源同时运行在同一个节点上

删除httpd资源,在webgroup组中添加filesystem资源,自动挂载nfs的共享存储

定义排列约束将httpd与webstore资源放在一起

定义排列约束,将webip与webstore资源放在一起

定义顺序约束决定资源的启动顺序

当前资源运行在server2上,将server2转为standby后,资源会转移到server1上。当将server2转为active后,资源会自动转回到server2上,如果想让资源保留在server1上不转回,可以通过定义资源粘性完成

如果想让资源更倾向于运行在server2上,可以定义位置约束完成

配置基于heartbeat v2,crm实现MySQL高可用集群

/etc/my.cnf  ---> /etc/mysql/mysql.cnf

--default-extra-file=

1、准备nfs服务器,建立逻辑卷/dev/myvg/mydata,并自动挂载到/mydata目录;在/mydata目录中建立数据目录data;并将data目录的属主、组分别设置为mysql用户 ,并/mysqldata目录通过nfs导出

建立mysql用户时,确保mysql用户的uid与gid一致

# lvscan

ACTIVE            ‘/dev/myvg/mydata‘ [5.00 GiB] inherit

# groupadd -g 27 mysql

# useradd -u 27 -g 27 mysql

# chown -R myql.mysql /mydata/data

# cat /etc/exports

/webdata 172.16.100.0/24(ro)

/mydata 172.16.100.0/24(rw,no_root_squash)

# exportfs -rav

exporting 172.16.100.0/24:/mydata

exporting 172.16.100.0/24:/webdata

2、分别在server1和server2上挂载nfs目录,并测试本地mysql用户是否可以向data目录中创建文件

server1操作:

# groupadd -g 27 mysql

# useradd -g 27 -u 27 mysql

# mount -t nfs 172.16.100.253:/mydata /mydata

# su - mysql

# touch /mydata/data/a

测试创建文件没有问题后,卸载/mydata

# umount /mydata

使用同样的方法在server2上创建用户,并测试用户的写入权限

3、在server1和server2分别安装mysql

server1:

# yum install -y mysql-server

初始化mysql时,需要有数据目录,因此暂时先手动挂载nfs目录,初化化完毕后再次卸载

# mount -t nfs 172.16.100.253:/mydata /mydata

修改mysql配置文件,在配置文件中指定数据目录位置

# vim /etc/my.cnf

datadir= /mydata/data

# scp /etc/my.cnf server2:/etc/

# service mysqld start

# umount /mydata

# service mysqld stop

# chkconfig mysqld off

server2上同样安装mysql软件 ,不需要初始化;

4、配置集群资源

5、在nfs上安装mysql客户端工具,并测试连接mysql

# mysql -u root -p -h 172.16.100.252

连接成功后,任意创建测试数据库及表;切换集群节点,在nfs上同样可以正常连接mysql

时间: 2024-10-11 11:14:41

High Avalibility Cluster的相关文章

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

ActiveMQ集群Master-Slave + Broker Cluster模式

一.简介 Master-Slave集群: 由至少3个节点组成,一个Master节点,其他为Slave节点.只有Master节点对外提供服务,Slave节点处于等待状态.当主节点宕机后,从节点会推举出一个节点出来成为新的Master节点,继续提供服务. 优点是可以解决多服务热备的高可用问题,缺点是无法解决负载均衡和分布式的问题. Broker Cluster集群: Broker-Cluster部署方式中,各个broker通过网络互相连接,并共享queue.当broker-A上面指定的queue-A

redis cluster (2) 相关命令参考及慢查询

实例关闭命令 redid-cli  shutdown  说明:关闭时强制 bgsave 所以需要一些时间    注:在start时,需要先加载数据到内存,数据加载完毕之后 redis 才会listen 端口 集群相关命令 1.CLUSTER INFO 打印集群的信息   2.CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息.  3.CLUSTER FAILOVER 手动故障转移,需要在转移的主节点的从节点上执行 节点 相关命令 1.CLUSTER MEE

HA Cluster 之 OpenAIS---corosync

OpenAIS---corosync  =============================================================================== 概述: =============================================================================== 回顾: HA解决方案:OpenAIS(开放式应用接口标准)  1.介绍 ★HA解决方案: vrrp协议:keepalived SA

MariaDB数据库介绍之四、Galera Cluster

一.Galera Cluster Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API. 二.Galera  Cluster的功能和优势 功能: multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除 新节点加入数据自动复制 并行复制,行级 优势: 因为是multi-

Windows 配置Reids集群 Redis Cluster

1. 下载安装Redis Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: 下载Redis 启动服务 redis-server redis.windows.conf 客户端连接 redis-cli.exe -h 127.0.0.1 -p 6379 2. 安装Ruby并配置环境 安装Ruby,Windows可以安装RubyInstaller,下载地址: http://railsinstaller.o

Windows Server2016+SQL Server 2016 Cluster安装及配置

Windows Server2016+SQL Server 2016 Cluster 安装及配置 我们知道,近期微软正式发布了Windows Server2016和SQL Server Cluster 2016,所以借此机会来尝试一下Windows Server2016+SQL Server Cluster 2016安装及配置,对于相关功能的优化及升级需要在官网上自己查看整理.大概就是windows server2016跟windows10页面框架结构差不多,SQL Server2016从安装上

MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构.下图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节

【Redis】Redis学习(二) master/slave、sentinal、Cluster简单总结

项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.Sentinal模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis还是很轻松的,做为一个key/value数据库也是可以胜任的.单节点部署参照:http://www.cnblogs.com/yiwangzhibujian/p/7053840.html 中的初级教程. 二.主从模式(m