rhcs实现mysql高可用。仲裁磁盘

rhcs的集群套件,在只有两个节点的时候,叫双节点模式。启动集群的时候,两个节点必须同时启动,否则另外一个节点会等待非常久。其中一个节点故障,另外一个备用节点会接管故障节点的资源。集群继续有效。故障节点修复之后重新上线可以加入集群。

如果集群的节点>2个。那么集群的默认仲裁策略就有点特殊:
	仲裁策略:集群套件判断整个集群是否继续有效。有效的话,集群中的剩余节点继续可以接管资源对外提供服务,无效的话,所有剩下的节点都不接管资源。

node1	node2	node3
		X	 有效节点:无效节点 = 2:1 集群继续有效
	X	X	 有效节点:无效节点 = 1:2 集群无效

node1	node2	node3	node4
		X	X 	有效节点:无效节点 = 2:2 集群继续无效


	总结:默认仲裁策略下,集群要继续工作,有效节点数量必须大于无效节点

	为了让多个节点的集群中,能够让集群尽管剩下少数的有效节点,集群都能继续有效的工作,需要引入“仲裁磁盘”。仲裁磁盘是一个共享的块设备。在集群中,仲裁磁盘模拟成有效票(模拟成有效节点)。
node1	node2	node3
	X	X	 有效节点+仲裁磁盘投票:无效节点 = (1+2):2 集群有效

node1	node2	node3	node4
	X	X	X 	有效节点+仲裁磁盘投票:无效节点 = (1+3):2 集群继续无效

	总结: 仲裁磁盘投票的数量如果是N-1(N是集群的节点书)的话,那么可以保证集群尽管剩下一个节点,集群都能继续工作。



	仲裁磁盘的另外一个作用: 工作中的集群节点在仲裁磁盘上都会有属于自己的一个块区域,每隔一段时间就会定时更新属于自己区域里的数据,并且查看集群中其余节点的区域的信息是否更新,如果更新了就说明该节点是健康的,如果已经连续多次没有更新,就说明该节点已经失效了(不健康),那么该节点就会被“fence”掉。  起到“节点健康”判断的作用,是原来的网络组播心跳的冗余判断手段。




使用RHCS实现MySQL和Apache的HA集群

			   客户端请求
		 	       |||
	  |---------------------|-----------------| <---产生网络
	node1 		     node2		node3
	  |---------|-----------| ----------------|<---心跳网络1
		  虚拟fence(宿主机),iscsi存储(共享数据+仲裁磁盘)



引入:
	仲裁磁盘
	使用集群逻辑卷clvm+集群文件系统gfs2
	两个失效域


必要的准备:
	FQDN主机名 node1.upl.com
	必须静态IP和网关
	必须把实现中相关的机器做好主机名和IP的绑定,绑定/etc/hosts


要求:
	共享存储使用集群文件系统

node1(主节点)
	eth0	192.168.29.11	<---生产网络
	eth1	192.168.89.11	<---心跳网络,主机名绑定所在网络,virbr7
	gw	192.168.29.1

node2
	eth0	192.168.29.12
	eth1	192.168.89.12
	gw	192.168.29.1

node3
	eth0	192.168.29.13
	eth1	192.168.89.13
	gw	192.168.29.1



两个失效域:
	webfail:  node1和node2  
		竞争的资源:  
			vip1: 192.168.29.128
			httpd

	dbfail:	  node2和node3
		竞争的资源:  
			vip1: 192.168.29.129
			把数据目录挂载到共享存储的集群文件系统
			mysqld



集群逻辑卷:
	在普通的逻辑卷的基础上增加了集群功能,能够原本只能在单机使用的逻辑卷信息在集群中通过心跳组播等手段在各个集群节点中共享。
	集群逻辑卷必须是在集群环境下使用,必须是先有了集群关系(启动cman之后)才能使用的。

应用程序
虚拟文件系统
文件系统驱动 gfs2
集群逻辑卷
硬件驱动  sda sdb
硬件


	
一、在宿主机上准备存储

准备两个
# vim /etc/tgt/targets.conf
<target iqn.2013-01.com.upl:mysqldata>
    backing-store /dev/sda7 
</target>

<target iqn.2013-01.com.upl:qdisk>
    backing-store /dev/sda9
</target>


二、集群中的所有节点都发现、登录存储

必须使用udev的规则和脚本

# service iscsi start  <--- 理应让该服务开机自动启动

# iscsiadm -m discovery -t st -p 192.168.89.1
192.168.89.1:3260,1 iqn.2013-01.com.upl:mysqldata
192.168.89.1:3260,1 iqn.2013-01.com.upl:qdisk

# iscsiadm -m node -l

# ls /dev/iscsi/
mysqldata/ qdisk/


三、仲裁磁盘的共享块设备进行初始化

其中一个节点对仲裁磁盘的共享块设备进行初始化
# mkqdisk -c /dev/iscsi/qdisk/part -l qdisk  <---  -l定义标签
mkqdisk v0.6.0
Writing new quorum disk label 'qdisk' to /dev/iscsi/qdisk/part.
WARNING: About to destroy all data on /dev/iscsi/qdisk/part; proceed [N/y] ? y
...

其余节点就能马上看到仲裁磁盘的信息了
# mkqdisk  -L
mkqdisk v0.6.0
/dev/disk/by-id/scsi-1IET_00020001:
/dev/disk/by-path/ip-192.168.89.1:3260-iscsi-iqn.2013-01.com.upl:qdisk-lun-1:
/dev/iscsi/qdisk/part:
/dev/sdb:
	Magic:                eb7a62c2
	Label:                qdisk
	Created:              Mon Nov  4 02:48:21 2013
	Host:                 node2.upl.com
	Kernel Sector Size:   512
	Recorded Sector Size: 512


rhel5还必须每个集群节点手工启动qdiskd服务:
# service qdiskd start  <---应该保证每次开机能够自动启动


四、在宿主机上部署虚拟化的fence

略
	需要注意fence_virtd监听是心跳网络的网卡
# fence_virtd 
# lsof -i:1229
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
fence_vir 20961 root    7u  IPv4  46427      0t0  UDP *:zented 


五、定义集群

其中一个节点配置集群

1、定义集群名字、组播
	myHA


2、定义仲裁磁盘

Use a Quorum disk 打勾

interval	2	访问qdisk的间隔
TKO		10	如果10秒钟,对方都没更新,就认为对方有问题	
VOTES		2	仲裁磁盘最多外援2票	
Mini		1	仅仅剩下一个节点,集群继续有效
Device		/dev/iscsi/qdisk/part
Label		qdisk 《--初始化的时候定义的名字

Program: /bin/ping -c 1  192.168.89.1  <---别忘记-c后面一定跟1
			<---192.168.89.1是iscsi存储所在的网路中最稳定的一个家伙


3、定义节点


4、定义fence


5、绑定节点和fence

以上配置都是cman服务读取。

保存配置文件,并且同步配置文件到其余节点
# scp /etc/cluster/cluster.conf 192.168.89.12:/etc/cluster/
# scp /etc/cluster/cluster.conf 192.168.89.13:/etc/cluster/



集群中的所有节点依次同时启动cman :
# service cman start


# clustat -i1
Cluster Status for myHA @ Mon Nov  4 03:00:18 2013
Member Status: Quorate

 Member Name                        ID   Status
 ------ ----                        ---- ------
 node1.upl.com                          1 Online, Local
 node2.upl.com                          2 Online
 node3.upl.com                          3 Online
 /dev/disk/by-id/scsi-1IET_00020001     0 Online, Quorum Disk 
		<--所有节点看到的都应该是online ,看不到就等半分钟左右,如果还看不到,就尝试重启 qdiskd服务。如果还是看不到,就看/var/log/messages


六、部署集群逻辑卷

1、所有集群节点都必须启用集群逻辑卷:
# lvmconf --enable-cluster  <---一次就永久生效


2、所有集群节点都启动clvmd服务

# service clvmd start


3、其中一个集群节点去创建逻辑卷

# pvcreate /dev/iscsi/mysqldata/part
# vgcreate mysqlvg /dev/iscsi/mysqldata/part 
# lvcreate -n mysqldata -l 100%VG mysqlvg


# vgs
  VG         #PV #LV #SN Attr   VSize VFree
  VolGroup00   1   2   0 wz--n- 9.88G    0 
  mysqlvg      1   0   0 wz--nc 2.00G 2.00G
			      ^^ 代表该卷组是工作在集群环境的

七、其中一个节点去把逻辑卷格式化成gfs2

# mkfs.gfs2 -j 3 -p lock_dlm -t myHA:upl /dev/mysqlvg/mysqldata
This will destroy any data on /dev/mysqlvg/mysqldata.

Are you sure you want to proceed? [y/n] y




八、部署集群节点的apache服务

所有节点都安装apache服务
	尽管只是node1和node2去竞争apache服务,但也建议node3也部署,因为当node1和node2都出故障,也有node3去接管


生成环境中,为了保证node1,node2,node3都能提供一致的服务,他们的代码和其他数据应该一致

九、部署集群节点的mysql服务

所有节点都安装mysql服务
	尽管只是node3和node2去竞争apache服务,但也建议node1也部署,因为当node3和node2都出故障,也有node1去接管


保证所有节点的配置文件一致

1、其中一个节点去挂载逻辑卷,并且对数据库进行初始化
# mount /dev/mysqlvg/mysqldata /data
# service mysqld start

mysql> grant all on *.* to ha@'192.168.29.%'
    -> identified by '123';

测试完毕,停止服务,取消挂载
# service mysqld stop
# umount /data


其余节点也去挂载、测试、关闭。。。


2、修改rpm版本的mysqld脚本

# vim /etc/rc.d/init.d/mysqld
....
stop(){

        status mysqld &>/dev/null
        if [ $? -ne 0 ];then
                return 0
        fi
	。。。。。


九、定义集群的剩下内容

两个失效域:
	webfail:  node1和node2  
		竞争的资源:  
			vip1: 192.168.29.128
			httpd

	dbfail:	  node2和node3
		竞争的资源:  
			vip1: 192.168.29.129
			把数据目录挂载到共享存储的集群文件系统
			mysqld


资源

服务
	webServ
	dbServ


保存配置文件之后,点击“send to cluster”



所有节点都启动rgmanager.
# service rgmanager start



# clustat -i1
Cluster Status for myHA @ Mon Nov  4 03:23:26 2013
Member Status: Quorate

 Member Name                        ID   Status
 ------ ----                        ---- ------
 node1.upl.com                          1 Online, rgmanager
 node2.upl.com                          2 Online, Local, rgmanager
 node3.upl.com                          3 Online, rgmanager
 /dev/disk/by-id/scsi-1IET_00020001     0 Online, Quorum Disk

 Service Name              Owner (Last)              State         
 ------- ----              ----- ------              -----         
 service:dbServ            node3.upl.com             started       
 service:webServ           node1.upl.com             started






故障节点重启之后:
	# service iscsi start
	# service qdiskd start
	# service cman start
	# service clvmd start
	# service rgmanager start

===========================================================================

使用rhcs构建mysql的HA集群

	使用的配置工具是 Conga
		一个C/S架构的配置工具
		C: 集群节点 ,需要安装ricci工具
		S: 配置和管理服务器:专门是负责管理集群,维护集群,查看集群状态和配置集群的管理节点 。 需要安装luci工具

				/----->ricci 集群节点1
		luci---配置集群-->
				\----->ricci 集群节点2


	实现mysql的HA集群
			clients
			  ||| 
			  vip
		  |---------------|-----------| <-----接受客户端请求
		node1		node2	     node3 
		  |-------|--------------|<--- 心跳网络
			  |	     iscsi存储,qdisk
			 fence设备(宿主机的fence服务模拟),集群管理节点


引入新的设定和功能:
	引入了仲裁磁盘,保证集群稳定
	引入集群逻辑卷和集群文件系统

操作系统: rhel6
	必须关闭 NetworkManager服务,并且设定为开机不启动
		# service NetworkManager stop
		# chkconfig NetworkManager off
	三个集群节点都安装:
		# yum groupinstall  "High Availability" -y


node1.upl.com	
	eth0	192.168.29.11	<---生产网络
	eth1	192.168.89.11   <---心跳网络 virbr7 ,主机名绑定的网络
	gw	192.168.29.1

node2.upl.com	
	eth0 	192.168.29.12	
	eth1	192.168.89.12
	gw	192.168.29.1

node3.upl.com	
	eth0 	192.168.29.13	
	eth1	192.168.89.13
	gw	192.168.29.1




有可能机器之前配置过集群,由于rhel6的集群服务默认是开机启动,所以实验前把之前的集群关闭并且删除:
	# service rgmanager stop
	# clvmd stop
	# service cman stop
	# rm -rf /etc/cluster/cluster.conf 



一、使用宿主机模拟fence设备

略
记得把加密文件进行同步到集群节点
# rsync -alvR /etc/cluster/fence_xvm.key  192.168.29.11:/
# rsync -alvR /etc/cluster/fence_xvm.key  192.168.29.12:/
# rsync -alvR /etc/cluster/fence_xvm.key  192.168.29.13:/

注意:当初配置的fence_virtd监听的网卡所在网络必须属于今天集群节点中其中一个网络
# vim /etc/fence_virt.conf
...
interface = "virbr7";
....

启动fence_virtd
# fence_virtd 

二、使用宿主机模拟iscsi存储

需要导出两个target

<target iqn.2013-01.com.upl:mysqldata>
    backing-store /dev/sda8
</target>

<target iqn.2013-01.com.upl:qdisk>
    backing-store /dev/sda9
</target>


三、3个集群节点分别发现、连接、登录存储

提示: 使用udev规则
	/etc/udev/rules.d/55-iscsi-el6.rules
	/etc/udev/scripts/iscsidev.el6.sh   《--- 755 

发现、登录

# ls /dev/iscsi/
mysqldata  qdisk


保证开机自动启动服务iscsi和iscsid


四、其中一个节点对仲裁磁盘进行初始化
# mkqdisk -c /dev/iscsi/qdisk/part -l "qdisk"
mkqdisk v0.6.0
Writing new quorum disk label 'qdisk' to /dev/iscsi/qdisk/part.
WARNING: About to destroy all data on /dev/iscsi/qdisk/part; proceed [N/y] ? y


其余节点可以直接识别该仲裁磁盘

# mkqdisk -L
mkqdisk v3.0.12.1

/dev/block/8:0:
/dev/disk/by-id/scsi-1IET_00020001:
/dev/disk/by-path/ip-192.168.89.1:3260-iscsi-iqn.2013-01.com.upl:qdisk-lun-1:
/dev/iscsi/qdisk/part:
/dev/sda:
	Magic:                eb7a62c2
	Label:                qdisk
	Created:              Sun Sep  8 18:57:23 2013
	Host:                 node1.upl.com
	Kernel Sector Size:   512
	Recorded Sector Size: 512



五、宿主机安装集群管理工具

# yum groupinstall "High Availability Management" -y

# service luci start

根据提示访问本机的luci服务打开的web配置界面
https://宿主机IP:8084  <---注意是https

	使用root帐号和密码登录


六、所有集群节点启动ricci服务

把防火墙和selinux关闭

# passwd ricci
# service ricci start




七、访问宿主机的集群配置工具,配置集群


在luci界面 创建集群、添加节点、定义fence、绑定fence




八、创建集群逻辑卷

“所有集群节点”都启用集群逻辑卷功能
# lvmconf --enable-cluster
# service clvmd restart

其中一个集群节点创建集群逻辑卷
# pvcreate /dev/iscsi/mysqldata/part1
# vgcreate mysqlvg /dev/iscsi/mysqldata/part1
# lvcreate -n mysqldata -L 2G mysqlvg

# vgs  保证其余节点都能看到该卷组和逻辑卷,如果看不到重启clvmd服务
  VG         #PV #LV #SN Attr   VSize VFree
  VolGroup00   1   2   0 wz--n- 9.88G    0 
  mysqlvg      1   0   0 wz--nc 2.00G 2.00G
			     ^^^  c 代表支持集群


八、创建集群文件系统

其中一个节点把逻辑卷格式化成gfs2

# mkfs.gfs2 -j 3 -p lock_dlm -t MysqlHA:upl /dev/mysqlvg/mysqldata

This will destroy any data on /dev/mysqlvg/mysqldata.

Are you sure you want to proceed? [y/n] y

	千万别弄错,是对集群逻辑卷进行格式化


九、准备数据库

其中一个节点去挂载共享存储,然后初始化数据库,启动数据库,并且建立一个可以远程登录的数据库帐号,测试是否可以连接,测试完毕关闭数据库,取消挂载

测试其余节点:挂载、启动;关闭、取消挂载


记得,如果是使用rpm包的红帽自带的mysql服务端,就必须修改启动脚本/etc/rc.d/init.d/mysqld

九、给集群定义资源和服务

1、定义效域

失效域1: dbfail
	

2、定义公共资源


	失效域1竞争的资源:
			vip: 192.168.29.128
			挂载: 类型gfs
				源设备路径 /dev/mysqlvg/mysqldata   挂载点 /data
			mysqld
				提示: 自己准备好数据库和修改脚本,最好挂载测试



测试:
	分别把node1和node3弄成故障,被fence掉,集群还能继续工作


你可能感兴趣的:(mysql,资源,修复)