您的位置:首页 > 大数据 > 人工智能

基于corosync/openais+NFS实现MYSQL的高可用

2012-08-04 14:22 633 查看
实验准备:

MYSQL软件包:mysql-5.5.24-linux2.6-i686.tar.gz

corosync软件包:corosync-1.2.7-1.1.el5.i386.rpm和corosynclib-1.2.7-1.1.el5.i386.rpm

pacemaker软件包:pacemaker-1.1.5-1.1.el5.i386.rpm,pacemaker-cts-1.1.5-1.1.el5.i386.rpm,pacemaker-libs-1.1.5-1.1.el5.i386.rpm

资源代理包: resource-agents-1.0.4-1.1.el5.i386.rpm

其他依赖包有:cluster-glue-1.0.6-1.6.el5.i386.rpm,cluster-glue-libs-1.0.6-1.6.el5.i386.rpm,heartbeat-3.0.3-2.3.el5.i386.rpm,heartbeat-libs-3.0.3-2.3.el5.i386.rpm,libesmtp-1.0.4-5.el5.i386.rpm

实验环境:

本实验是基于虚拟机操作的。相关信息如下拓扑图:





实验步骤:

在NFS服务器上

1、首先创建逻辑卷并挂载共享目录

创建两个分区并调整其类型为8e
#pvcreate /dev/sda{5,6}
vgcreate myvg /dev/sda{5,6}
#lvcreate -n mylv -L 20G /dev/myvg
#mke2fs -j /dev/myvg/mylv    //格式化分区
#mkdir  /sharedata
#mount /dev/myvg/mylv  /sharedata

使其能够开机自动挂载
编辑/etc/fstab文件,添加如下行后保存退出
/dev/myvg/mylv  /sharedata ext3 defaults    0 0
#chown -R mysql.mysql /sharedata
//此目录只有是mysql组的用户才能访问

2、启动NFS服务

(1)#service nfs start

(2)编辑/etc/exports文件,添加如下行后保存退出

/sharedata 192.168.0.11(rw,no_root_squash) 192.168.0.66(rw,no_root_squash)

(3)#exportfs -ra //导出共享目录

(4)使用showmount -e 192.168.0.100 查看共享是否成功

在集群节点上

1、首先集群节点要做好高可用的事前工作

(1)同步时间

(2)主机名解析。主机名要与执行uname -n命令得到结果保持一致。

在/etc/hosts文件中添加两节点的解析条目。

192.168.0.11 node1

192.168.0.66 node2

(3)建立双发互信

使用ssh-keygen -t rsa 此时在当前目录下生成.ssh隐藏目录,生成私钥

使用ssh-copy-id -i ./ssh/id_rsa.pub root@node2 将私钥发送给两外一个节点。

ssh node2 'ifconfig' 如果此时不用输入密码等信息就可直接得到node2的IP值,则说明互信配置成功

在node1上也做相应的操作。

2、安装MYSQL

(1)配置node1

#mkdir -pv /data/sqldata
#mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据

#groupadd -r mysql
#useradd -g mysql -r mysql
#tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
#cd /usr/local
#ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql
#cd mysql
#chown -R  mysql:mysql  .
#cp support-files/my-large.cnf  /etc/my.cnf
#scripts/mysql_install_db --user=mysql --datadir=/data/sqldata
//初始化
#chown -R root .

编辑配置文件
thread_concurrency = 2
datadir = /data/sqldata //指定mysql数据存放位置
#cp support-files/mysql.server /etc/rc.d/init.d/mysqld
//sysV脚本
#chmod +x /etc/rc.d/init.d/mysqld

启动服务
#service mysqld start
#/usr/local/mysql/bin/mysql //进入mysql
create database testdb; //创建测试数据库





node1与node2的数据文件是保持一致的,所以在此直接将node1的配置文件远程发送到node2上即可。

#scp /etc/my.cnf node2:/etc
#service mysqld stop
#chkconfig mysqld off

(2)配置node2。

#mkdir -pv /data/sqldata
#mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据
#groupadd -r mysql
#useradd -g mysql -r mysql
#tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
#cd /usr/local
#ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql
#cd mysql
#chown -R  mysql:mysql  .
#cp support-files/my-large.cnf  /etc/my.cnf
#chown -R root .  启动服务
#service mysqld start

注:在node2上已经初始化了数据库,所以在node2上不用再次初始化数据库。

进入命令行查看node1创建的数据库是否存在。此时可能出错,因为root用户没有对数据操作的权限。切换至mysql用户即可。





此时查看。





如图所示,testdb可以顺利访问。

3、安装corosync

使用yum安装‘实验准备’中的rpm包
#yum -y --nogpgcheck localinstall *.rpm

(1)编辑配置文件corosync.conf

#cd /etc/corosync
#cp corosync.conf.example corosync.conf

编辑corosync.conf文件
bindnetaddr:192.168.0.0 //IP地址为网卡所在网络的网络地址
to_syslog: no
添加如下内容:
service {
ver:  0
name: pacemaker  //启用pacemaker
}
aisexec {
user: root
group: root
}

(2)生成节点间通信时用到的认证密钥文件并分别为两个节点创建corosync生成的日志所在的目录。

#scp -p corosync authkey  node2:/etc/corosync/
#mkdir /var/log/cluster
#ssh node2  'mkdir /var/log/cluster'

启动服务
#service corosync start

(3)启动服务后检查日志文件中的有关配置信息

查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file"
/var/log/cluster/corosync.log

查看初始化成员节点通知是否正常发出:
# grep  TOTEM  /var/log/cluster/corosync.log

检查启动过程中是否有错误产生:
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources

查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/cluster/corosync.log

(4)如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync

# ssh node2 '/etc/init.d/corosync start'

注:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动

(5)查看集群节点的启动状态





由上述信息可知,两节点以正常启动。

4、为集群添加集群资源。(本实验在node1上设置)

(1)配置集群属性

#crm configure property stonith-enabled=fals
//禁用stonith
#crm configure property no-quorum-policy=ignore
//当投票数不足时设置忽略策略
#crm configure rsc_defaults resource-stickiness=100
//设置资源粘性

查看配置:





(2)添加资源

将VIP定义为高可用资源
#crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.19.1

将NFS定义为高可用资源
#crm configure primitive mynfs ocf:heartbeat:Filesystem params
device='192.168.0.100:/sharedata' directory='/data/sqldata'
fstype="nfs"  op start timeout=60   op stop timeout=60
//这里的两个op选项必须设置

定义mysqld服务
#crm configure primitive mysqld lsb:mysqld

(3)定义约束

#crm configure colocation mysql_with_mynfs inf: mynfs mysqld vip

定义次序
#crm configure order mynfs_befrore_mysql madatory: mynfs mysqld:start
#crm configure order myip_befrore_mysql madatory: vip mysqld:start





此时资源已经添加成功,而且都被定义在了node1上。

5、测试

(1)集群是否自动挂载数据

查看集群信息发现,此时可知共享资源定义在了node1上,那么查看挂载数据目录是否有数据。





之前创建的数据库testdb依然存在。集群挂载数据成功。

(2)测试远程用户

进入mysql命令,授权用户
grant all to *.* on root@‘%’ identified by '123456';
flush privileges;

此时便可以使用远程的root用户访问数据库。

到此,基于corosync/openais的MYSQL的高可用便配置完成。
本文出自 “仙人掌叶子” 博客,请务必保留此出处http://yuan00.blog.51cto.com/5126136/954074
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: