heartbeat(四)
heartbeat v2 crm 及 NFS共享存储的mysql高可用集群
前面《高可用集群》认识高可用集群的一些基本概念,在《heartbeat v2 haresource配置高可用集群》认识heartbeat v2 haresource配置高可用集群,还在《heartbeat v2 haresource 配置NFS共享存储高可用集群》和《heartbeat v2 crm 配置高可用集群》进行NFS共享WEB存储的高可用集群应用配置,下面将会在前面的基础上用heartbeat v2 crm配置NFS共享存储的mysql高可用集群。
1、mysql高可用集群架构设计
这里在上篇《heartbeat v2 crm 配置高可用集群》的架构基础上,进行一些改动,配置mysql高可用集群,具体架构资源如下:
1、节点主机系统:RHEL 5.8 64bit
2、高可用集群软件:Heartbeat v2 crm
3、两台节点主机node1,node2:
Node1: IP:192.168.18.241 host name:node1.tjiyu,com;
Node2: IP:192.168.18.242 host name:node2.tjiyu.com;
VIP: 192.168.18.240
Service:mysql
4、一台NFS服务主机:
IP:192.168.18.243
LVM:/dev/myvg/mydata
共享目录:/mydata(LVM),/mydata/data(mysql数据目录)
5、三台主机相同用户:mysql mysql(组) 3306(uid、gid)
2、相关准备配置
本文是在前面的配置基础上进行的,前面说到的heartbeat配置前所需要的准备:
1、配置IP、安装WEB服务、关闭防火墙;
2、配置各节点名称;
3、建立各节点间的SSH互信通信;
4、各节点间的时间同步;
5、heartbeat v2下载安装;
6、如何配置使用crm/hb_gui;
这里就不再详细给出了,下面开始来配置。
3、配置NFS共享存储
3-1、创建用户
集群系统各节点mysql用户都需要对NFS共享目录下的mysql数据文件进行读写操作,这就需要用户有对该目录的读写权限,为方便,我们在三台主机分别创建相同的普通用户:用户名mysql ,属于mysql组,uid、gid都为 3306(如果uid、gid不一样就得对目录分别配置权限),稍后会为它们配置/mydata/data目录的读写权限,这样创建过程如下:
[root@localhost ~]# groupadd -g 3306 mysql
[root@localhost ~]# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
3-2、创建NFS共享存储的LVM
mysql数据最好放到LVM(Logical Volume Manager,逻辑卷管理),方便以后进行扩展空间、备份等操作,按照上面的架构设计进行配置,先创建20G的分区/dev/sda5,然后在分区上创建PV(Physical Volume,物理卷),再在PV分区上创建VG(Volume Group,卷组),最后在VG上创建10G(另10G备份)的LV(Logical Volume,逻辑卷),并将LV格式化为EXT3文件系统,创建过程如下:
[root@localhost ~]# fdisk /dev/sda
[root@localhost ~]# partprobe /dev/sda
[root@localhost ~]# fdisk –l
[root@localhost ~]# pvcreate /dev/sda5
[root@localhost ~]# vgcreate myvg /dev/sda5
[root@localhost ~]# lvcreate -L 10G -n mydata myvg
[root@localhost ~]# lvs
[root@localhost ~]# mke2fs -j /dev/myvg/mydata
3-3、创建NFS共享存储
1、先把上面创建的LVM挂载到/mydata目录下,需要配置/etc/fstab文件让LVM自动挂载,配置过程如下:
[root@localhost ~]# mkdir /mydata
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# mount –a
2、配置/etc/exprots使得各节点可以共享NFS输出目录/mydata,然后在共享目录下创建mysql的数据目录/mydata/data,并为上面创建的mysql用户分配读写权限。
注意下面需要root用户进行mysql的安装初始化,会对共享目录进行读写,这就需要在配置/etc/exprots的时候加no_root_squash,否则root用户权限将被压缩成为匿名使用者权限,使得无法读写;但这个配置极不安全,最好开放到指定的IP,实际中不建议使用(不用NFS),配置过程如下:
[root@localhost ~]# mkdir /mydata/data
[root@localhost ~]# chown -R mysql.mysql /mydata/data/
[root@localhost ~]# ll -d /mydata/data/
[root@localhost ~]# vim /etc/exports
[root@localhost ~]# exportfs -arv
3、在node1和node2上分别创建挂载目录/mydata,并尝试挂载测试,测试后记得卸载:
[root@node2 ~]# mkdir /mydata
[root@node2 ~]# mount 192.168.18.243:/mydata /mydata
[root@node2 ~]# ls -l /mydata/
[root@node2 ~]# umount /mydata/
4、配置mysql数据到NFS
mysql5.5版本相对5.6/5.7要小很多,就先用5.5的来测试;先到官网下载mysql-5.5.28-linux2.6-x86_64.tar.gz,放到两节点主机上,如果用yum安装反而比较麻烦,要做数据目录迁移等工作;
4-1、初始化mysql配置(node1)
先在node1上对mysql进行初始化,首先解压mysql程序包,配置解压后程序目录文件的属组和属主为root组和上面创建的mysql用户;
然后再次挂载NFS共享目录,初始化mysql数据到NFS共享存储目录(注意上面说的no_root_squash,没配置无法初始化),同时指定为mysql用户,配置过程如下:
[root@node1 ~]# tar -xf mysql-5.5.28-linux2.6-x86_64.tar.gz -C /usr/local
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ln -sv mysql-5.5.28-linux2.6-x86_64 mysql
创建指向"mysql-5.5.28-linux2.6-x86_64"的符号链接"mysql"
[root@node1 local]# cd mysql
[root@node1 mysql]# chown -R root:mysql ./*
[root@node1 mysql]# ll
[root@node1 mysql]# mount 192.168.18.243:/mydata /mydata
[root@node1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
4-2、配置mysql配置文件,并启动测试(node1)
先把mysql配置文件my.cf放到/etc下,并添加mysql数据目录项datadir为上面配置的共享目录/mydata/data,以及加上每个innodb表为一个文件的配置;
再把mysql服务脚本放到/etc/init.d/下(LSB),重命名mysqld,方便高可用集群的资源管理,然后配置禁止开机启动,配置如下:
[root@node1 mysql]# ls -l /mydata/data/
[root@node1 mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@node1 mysql]# vim /etc/my.cnf
[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql]# chkconfig --add mysqld
[root@node1 mysql]# chkconfig mysqld off
启动mysql服务,并进行创建数据库的测试(注意上面说的no_root_squash,没配置无法创建数据库),如下:
[root@node1 mysql]# service mysqld start
[root@node1 mysql]# ./bin/mysql
mysql> create database tjuyi_db;
mysql> show databases;
4-2、node2配置mysql,并启动测试
上面node1测试好的,接着转到node2上进行mysql的相关配置:首先解压mysql程序包,配置解压后程序目录文件的属组和属主为root组和上面创建的mysql用户;
然后远程复制node1上刚才配置的两个文件/etc/my.cnf和/etc/init.d/mysqld到node2相同位置,配置mysqld禁止开机启动,这就行了,和在node1上配置差不多,区别是不需要进行初始化数据到共享目录,具体过程如下:
[root@node1 mysql]# scp -p /etc/my.cnf node2:/etc
[root@node1 mysql]# scp -p /etc/init.d/mysqld node2:/etc/init.d/
启动mysql服务前先停止node1上的mysql服务,并卸载NFS共享目录;
然后再在node2上启动mysql服务,进行测试,测试完后记得停止mysql服务,并卸载NFS共享目录,如下:
5、配置集群资源组
参考上篇《heartbeat v2 crm 配置高可用集群》,我们使用比较简单的方式,把VIP、NFS存储和mysqld三个资源配置到资源组group_mysql_service里,按顺序启动,注意配置的参数,但首先得在node1上启动heartbeat高可用服务,看DC在node1上,再在node1上启动hb_gui,配置过程如下:
6、启动资源组测试
1、启用资源组,各资源在node1上正常运行,再在node1上的mysql给root分配权限和设置密码,然后在客户端上用VIP远程登录mysql,正常登录,看到里面有前面创建的tjiyu_db数据库,如下:
2、使活动节点node1成为备节点, node2成为主节点,各资源正常运行,再通过客户端上用VIP远程登录mysql,正常登录:
3、使活动节点node2成为备节点,node1重新成为主节点;各资源正常运行,再通过客户端连接VIP,正常连接,然后在tjiyu_db创建一个test表,一切正常:
以上测试说明hb_gui配置的heartbeat crm提供了高可用功能,同时该mysql高可用集群使用了LVM-NFS共享存储。
该mysql高可用集群存在很多不足,比如NFS服务单独一个主机容易出现故障,是不是也得提供高可用服务呢?后面再解决…..
经过写这篇文章,对heartbeat v2 crm配置NFS共享存储的mysql高可用集群有了一个基本的认识,下面将认识下corosync及如何配置corosync高可用……
【参考资料】
1、Pacemaker:http://clusterlabs.org/wiki/Pacemaker
2、High-availability cluster:https://en.wikipedia.org/wiki/High-availability_cluster#Node_configurations|
3、高可用集群:http://blog.csdn.net/tjiyu/article/details/52643096
4、heartbeat v2 haresource配置高可用集群:http://blog.csdn.net/tjiyu/article/details/52663927
5、heartbeat v2 haresource 配置NFS共享存储高可用集群:http://blog.csdn.net/tjiyu/article/details/52669394
6、heartbeat v2 crm 配置高可用集群:http://blog.csdn.net/tjiyu/article/details/52675500
7、Linux LVM逻辑卷配置过程详解:http://dreamfire.blog.51cto.com/418026/1084729/
8、no_root_squash 是什么意思:http://zhidao.baidu.com/link?url=HA9ab5PYOtx2fdfUZfI1dn8__Qt0oMxPzMzVuQyHsVXoGffIVM2QGy9a2f-vTmrsJGsNOVWjta8P80Rg7It2mq