天天看点

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

一、实验拓扑结构图

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

二、实验说明

本实验是基于corosync和NFS服务器实现mysql的高可用服务,在其中一台服务器出现故障的时候,另一台服务器仍旧能够运作正常

三、实验准备

请参照http://sxhxt.blog.51cto.com/5126000/954545的实验准备

四、实验步骤

配置NFS服务器

1.创建逻辑卷

#fdisk /dev/sda

#partprobe /dev/sda

#pvcreate /dev/sda5

#vgcreate myvg /dev/sda5

#lvcreate -n mylv -L 10G myvg

#mke2fs -j /dev/myvg/mylv

2.创建共享目录并开机自动挂载逻辑卷

#mkdir /mydata                   //创建共享目录

#vim /etc/fstab                  //开机自动挂载

/dev/myvg/mydata        /mydata           ext3    defaults        0 0

3.添加mysql用户

#groupadd -g 306 -r mysql

useradd -g mysql -r -u 306 mysql

#chown mysql:mysql /mydata       //修改共享目录的属主属组为mysql

4.添加共享

#vim /etc/exports

/mydata     172.16.29.1(rw,no_root_squash) 172.16.29.2(rw,no_root_squash)

#exportfs -ra                     //导出共享目录

#service nfs start                 //启动nfs服务

#chkconfig nfs on                   //开机自动启动

#showmount -d localhost                  //查看是否导出成功

配置节点一node1

1、添加用户,用户UID和NFS服务器上的mysql用户a的UID相同

#groupadd -g 306 -r mysql

#usradd -g mysql -r -u 306 mysql

2、创建目录并挂载

#mkdir -pv /mydata/data

#chown -R mysql:mysql /mydata/data

#mount -t nfs 172.16.26.1:/sharedata  /mydata/data

以上步骤在node2上执行相同操作

3、 安装mysql并初始化

#tar xf mysql-5.5.20-linux2.6-i686 -C /usr/local

# cd  /usr/local

#ln -sv mysql-5.5.20-linux2.6-i686  mysql //创建连接

#chown -R mysql:mysql .

#cp support-files/my-large.cnf  /etc/my.cnf  //配置文件

#vim /etc/my.cnf

在[mysqld]处 添加datadir=/mydata/data    //添加数据存放位置

#scripts/mysql_install_db --user=mysql--datadir=/mydata/data //初始化Mysql

#chown -R root .

#cp support-files/mysql.server  /etc/rc.d/init.d/mysqld //提供mysql脚本

#servie mysqld start

#/usr/local/mysql/bin/mysql        //启动并测试mysql是否可用

#service mysqld stop                     //必须关闭,否则在节点2上无法启动

#scp /etc/my.cnf node2:/etc/my.cnf           //把mysql的配置文件复制到node2上

#scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/mysqld  //复制服务脚本

在节点node2上只需执行一下内容即可,然后直接连接mysql,可以看到node1上mysql用户创建的文件在节点一上安装集群软件并配置

4.安装并配置集群软件

cluster-glue-1.0.6-1.6.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm pacemaker-1.1.5-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-cts-1.1.5-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm pacemaker-libs-1.1.5-1.1.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

#yum -y --nogpgcheck localinstall *.rpm

# cd /etc/corosync

# cp corosync.conf.example corosync.conf

# vim corosync.conf  添加如下内容

service {

ver:  0

name: pacemaker

# use_mgmtd: yes

}

aisexec {

user:   root

group:  root

}

并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址

我们这里设定为 bindnetaddr:172.16.0.0

to_logfile: yes

to_syslog: no      //关闭系统日志文件

logfile: /var/log/cluster/corosync.log

secauth: on         //启用认证

# corosync-keygen        //生成节点间的密钥文件

# scp -p corosync authkey  node2:/etc/corosync/   //复制文件到Director2上

# mkdir /var/log/cluster                          //创建日志所用到的目录

# ssh node2  'mkdir /var/log/cluster'

5.查看是否正常启动和配置集群属性

6.添加资源,在定义资源之前首先卸载挂载点

通过crm ra list ocf查看到Filesystem如下图所示

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

#crm configure primitive mynfs ocf:heartbeat:Filesystem paramsdevice="172.16.26.1:/sharedata"

directory="/mydata"fstype="nfs"op starttimeout=60sop stoptimeout=60s

#crm configure primitive mysql lsb:mysqld

#crm configure primitive vip  ocf:heartbeat:IPaddr params ip=172.16.200.1

查看定义的资源如下图所示

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

现在不能资源没有在同一个节点,所以不能正常启动现在要定义如下约束

#crm configure colocation mysql_adn_mynfs_vip inf: mysql mynfs vip

#crm configure order mysql_after_mynfs inf: mynfs mysql:start

#crm configure order mysql_after_vip inf: vip mysql

现在可以再次使用crm_mon -1查看结果如下图所示(在这里说明一下,因为在实验过程中,虚拟机出现问题了,然后资源重新定义了,资源名字可能会稍有不同。)

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

然后可以在节点一上查看/mydata/data目录下已经有了mysql的文件信息,接下来使用如下命令连接尽mysql并创建用户授权然后可以远程连接进行测试。

#/usr/local/mysql/bin/mysql

mysql>grant all on *.*  TO [email protected]'%' identified by '1234'

在另外一台虚拟机上测试结果如下图所示:

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

现在资源都在节点一上运行,那如果node1出现故障呢?在节点node1上执行如下命令

#crm node standby

然后使用crm_mon -1查看状态信息如下图所示:

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

五、实验总结

在这个实验中出现了很多问题,整的我很头大,但是问题总是一步步解决的,最后总算是功夫不负有心人呢!呵呵

首先是安装mysql的问题,在/etc/my.cnf里面的datadir的目录没有在[mysqld]下 定义,还有在节点一和节点二同时挂载之后其中一个节点启动了mysql然后忘记停止了,就在另一个节点上启动了等问题都出现了下图所示的错误。

corosync mysql_基于corosync和NFS服务器实现mysql的高可用

然后就是资源定义了,在资源定义的时候重复提交好像也是会出错的。其他的问题就都是本人的误操作导致的,这里就不赘述了。