前提:
- 本配置共有两个测试节点,分别Node1和Node2,相的IP地址分别为10.33.100.77和10.33.100.99;
- Node1和Node2两个节点已经配置好了基于openaAIS/corosync的集群;且Node1和Node2也已经配置好了Primary/Secondary模型的drbd设备/dev/drbd0,且对应的资源名称为mysql;corosync,packmaker,drbd,mysql安装配置的详细内容见此前的博文相关内容,这里不再赘述;
- 系统为CentOS6.4,x86平台;
一、准备两个节点上的MySQL服务
1.Node1:解压通用二进制包,创建mysql用户和组;
2.将DRBD设置为主节点并挂载drbd设备将其作为mysql数据的存放目录,提供配置文件,初始化mysql
3.提供启动脚本并测试启动Mysql
4.创建MySQL数据库,以备以后步骤测试使用
5.将Node1上mysql压缩包,配置文件与启动脚本复制到Node2上,Node2上只需要解压,并创建好mysql用户及数据目录的挂载点,不再需要初始化数据库,通过drbd同步即可
6.关闭Node1上mysql并设置禁止开机自启
7.将Node2节点上的DRBD设置为主节点并挂载,启动并测试Node2上的mysql,通过查看数据目录可以发现数据已经同步
8.关闭Node2上mysql并设置禁止开机自动,至此,双节点上的mysql配置全部完成
二、配置drbd为Corosync双节点高可用集群中的资源,能够实现主从节点的自动切换
1.查看当前集群的配置信息,确保已经配置全局属性参数为两节点集群所适用:确保有stonith-enabled和no-quorum-policy出现且其值与如下输出信息中相同
2.将已经配置好的drbd设备/dev/drbd0定义为集群服务;
按照集群服务的要求,首先确保两个节点上的drbd服务已经停止,且不会随系统启动而自动启动:
3.配置drbd为集群资源:提供drbd的RA目前由OCF归类为linbit,其路径为/usr/lib/ocf/resource.d/linbit/drbd,可以使用如下命令来查看此RA及RA的meta信息:
注意: drbd需要同时运行在两个节点上,但只能有一个节点(primary/secondary模型)是Master,而另一个节点为Slave;因此,它是一种比较特殊的集群资源,其资源类型为多态(Multi-state)clone类型,即主机节点有Master和Slave之分,且要求服务刚启动时两个节点都处于slave状态。
4.查看当前集群运行状态(刚配置好会一直报错(unmanaged) FAILED ,重启一下两台机器不再报错):
由上面的信息可以看出此时的drbd服务的Primary节点为Node1,Secondary节点为Node2。
也可以使用如下命令验正当前主机是否已经成为mysql资源的Primary节点:
三、为Primary节点上的web资源创建自动挂载的集群服务
1.ms_mysqldrbd的Master节点即drbd服务mysql资源的Primary节点,此节点的设备/dev/drbd0可以挂载使用,且在某集群服务的应用当中也需要能够实现自动挂载。这里的mysql资源是mysql服务器的数据存放设备,其需要挂载至/mnt/SQLdata;此外,该自动挂载的集群资源需要运行于drbd服务的Master节点上,并且只能在drbd服务将某节点设置为Primary以后方可启动。因此,还需要为这个资源建立排列约束和顺序约束。
2.查看集群中资源的运行状态:由下面的信息可以发现,此时mysqlFS运行的节点和drbd服务的Primary节点均为Node1;
3.在Node1上删除此前在mysql上创建的测试数据库MySQL,而后模拟Node1节点故障;
4.由上面的信息可以推断出,Node1已经转入standby模式,其drbd服务已经停止,再故障转移后查看Node2的/mnt/SQLdata目录下是否存在这些文件;可以发现故障转移已经完成,所有资源已经正常转移至Node2
5.让Node1重新上线:
四、添加mysql集群服务
1.为mysql资源建立排列约束和顺序约束,mysqld与drbd文件系统要在同一节点上启动,要先挂载文件系统而后启动mysql服务
2.查看集群状态,所有资源都在Node2上启动
3.测试启动mysql服务,可以看到数据已经同步
五、增加VIP资源,实现mysql服务对外有一个统一的访问IP
六、测试mysql高可用集群
1.新增授权给测试机10.33.1.129
2.在测试机上远程测试一下
3.模拟故障,让node切换为从节点
4.再进行远程测试一下,可以看到资源已经成功转移到Node2上