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

实验准备:

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、首先创建逻辑卷并挂载共享目录

  
  
  
  
  1. 创建两个分区并调整其类型为8e  
  2. #pvcreate /dev/sda{5,6}  
  3. vgcreate myvg /dev/sda{5,6}  
  4. #lvcreate -n mylv -L 20G /dev/myvg  
  5. #mke2fs -j /dev/myvg/mylv    //格式化分区  
  6. #mkdir  /sharedata  
  7. #mount /dev/myvg/mylv  /sharedata  
  8.  
  9. 使其能够开机自动挂载  
  10. 编辑/etc/fstab文件,添加如下行后保存退出  
  11. /dev/myvg/mylv  /sharedata ext3 defaults    0 0  
  12. #chown -R mysql.mysql /sharedata   
  13. //此目录只有是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

  
  
  
  
  1. #mkdir -pv /data/sqldata
  2. #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据
  3.  
  4. #groupadd -r mysql  
  5. #useradd -g mysql -r mysql  
  6. #tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local  
  7. #cd /usr/local  
  8. #ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql  
  9. #cd mysql  
  10. #chown -R  mysql:mysql  .  
  11. #cp support-files/my-large.cnf  /etc/my.cnf        
  12. #scripts/mysql_install_db --user=mysql --datadir=/data/sqldata 
  13. //初始化    
  14. #chown -R root .
  15.  
  16. 编辑配置文件  
  17. thread_concurrency = 2 
  18. datadir = /data/sqldata //指定mysql数据存放位置  
  19. #cp support-files/mysql.server /etc/rc.d/init.d/mysqld    
  20.  //sysV脚本  
  21. #chmod +x /etc/rc.d/init.d/mysqld  
  22.  
  23. 启动服务  
  24. #service mysqld start  
  25. #/usr/local/mysql/bin/mysql //进入mysql
  26. create database testdb; //创建测试数据库



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

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

 (2)配置node2。

  
  
  
  
  1. #mkdir -pv /data/sqldata  
  2. #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据  
  3. #groupadd -r mysql    
  4. #useradd -g mysql -r mysql    
  5. #tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local 
  6. #cd /usr/local    
  7. #ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql    
  8. #cd mysql    
  9. #chown -R  mysql:mysql  .    
  10. #cp support-files/my-large.cnf  /etc/my.cnf        
  11. #chown -R root .  

    启动服务  

    #service mysqld start  

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

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



此时查看。



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

3、安装corosync
 

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

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

  
  
  
  
  1. #cd /etc/corosync  
  2. #cp corosync.conf.example corosync.conf  
  3.  
  4. 编辑corosync.conf文件  
  5.  bindnetaddr:192.168.0.0 //IP地址为网卡所在网络的网络地址  
  6.  to_syslog: no  
  7. 添加如下内容:  
  8. service {  
  9.      ver:  0  
  10.      name: pacemaker  //启用pacemaker  
  11.    }  
  12. aisexec {  
  13.     user: root  
  14.     group: root  
  15.    } 

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

  
  
  
  
  1. #scp -p corosync authkey  node2:/etc/corosync/  
  2. #mkdir /var/log/cluster  
  3. #ssh node2  'mkdir /var/log/cluster'  
  4.  
  5. 启动服务  
  6. #service corosync start 

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

  
  
  
  
  1. 查看corosync引擎是否正常启动:  
  2. # grep -e "Corosync Cluster Engine" -e "configuration file" 
  3. /var/log/cluster/corosync.log
  4.  
  5. 查看初始化成员节点通知是否正常发出:  
  6. # grep  TOTEM  /var/log/cluster/corosync.log  
  7.  
  8. 检查启动过程中是否有错误产生:  
  9. # grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
  10.  
  11. 查看pacemaker是否正常启动:  
  12. # 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)配置集群属性

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

查看配置:



(2)添加资源

  
  
  
  
  1. 将VIP定义为高可用资源  
  2. #crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.19.1  
  3.  
  4. 将NFS定义为高可用资源  
  5. #crm configure primitive mynfs ocf:heartbeat:Filesystem params 
  6. device='192.168.0.100:/sharedata' directory='/data/sqldata' 
  7. fstype="nfs"  op start timeout=60   op stop timeout=60 
  8. //这里的两个op选项必须设置  
  9.  
  10. 定义mysqld服务  
  11. #crm configure primitive mysqld lsb:mysqld 

(3)定义约束

  
  
  
  
  1. #crm configure colocation mysql_with_mynfs inf: mynfs mysqld vip 
  2.  
  3. 定义次序  
  4. #crm configure order mynfs_befrore_mysql madatory: mynfs mysqld:start  
  5. #crm configure order myip_befrore_mysql madatory: vip mysqld:start 

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

5、测试

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

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

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

(2)测试远程用户

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

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

到此,基于corosync/openais的MYSQL的高可用便配置完成。

你可能感兴趣的:(mysql,高可用,nfs,corosync)