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




















































你可能感兴趣的:(status,IP地址,资源管理器)