HA专题: 使用pacemaker+corosync实现MySQL高可用
前言
上篇文章我们介绍了使用
pacemkaer+corosync
实现简单的nginx
高可用, 这篇文章我们介绍如何使用pacemaker+corosync
实现MySQL
高可用, 并且此次我们手动编辑配置文件来实现corosync
的配置
实验拓扑
实验环境
主机 | IP | 功用 |
---|---|---|
node1.anyisalin.com | 172.16.1.2 | MySQL服务, HA节点 |
node2.anyisalin.com | 172.16.1.3 | MySQL服务, HA节点 |
nfs.anyisalin.com | 172.16.1.4 | 提供nfs服务,数据库文件 |
注意: 本文实验中所有主机SElinux和iptables都是关闭的
实验步骤
准备工作
高可用集群必须保证所有节点主机互信, 主机名解析一致, 时间同步
配置hosts文件同步
配置互信
时间同步
安装HA组件并配置
我们这次直接安装并手动配置
pacemaker+corosync
安装corosync+pacemaker在两个节点上 [root@node1 ~]# yum install corosync pacemaker -y &> /dev/null && echo success success [root@node1 ~]# ssh node2.anyisalin.com "yum install corosync pacemaker -y &> /dev/null && echo success" success
编辑配置文件
[root@node1 corosync]# vim corosync.conf totem { version: 2 crypto_cipher: none crypto_hash: none interface { ringnumber: 0 bindnetaddr: 172.16.1.0 mcastaddr: 239.185.1.31 mcastport: 5405 ttl: 1 } } nodelist { node { ring0_addr: 172.16.1.2 nodeid: 1 } node { ring0_addr: 172.16.1.3 nodeid: 2 } } logging { fileline: off to_stderr: no to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: no debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } quorum { provider: corosync_votequorum }
启动corosync和pacemaker
[root@node1 corosync]# scp corosync.conf node2.anyisalin.com:/etc/corosync/ [root@node1 corosync]# systemctl start corosync pacemkaer [root@node1 corosync]# ssh node2.anyisalin.com "systemctl start corosync pacemkaer"
查看集群节点状态
[root@node1 corosync]# crm status #各节点都在线 Last updated: Sun Apr 10 22:23:13 2016 Last change: Sun Apr 10 22:16:43 2016 by root via cibadmin on node1.anyisalin.com Stack: corosync Current DC: node1.anyisalin.com (version 1.1.13-10.el7_2.2-44eb2dd) - partition with quorum 2 nodes and 0 resources configured Online: [ node1.anyisalin.com node2.anyisalin.com ]
配置NFS
对于NFS配置这次比较复杂
[root@nfs ~]# vim /etc/exports /datadir 172.16.1.0/24(rw,no_root_squash) [root@nfs ~]# useradd -u 3306 mysql #创建mysql用户 [root@nfs ~]# mkdir /datadir [root@nfs ~]# setfacl -m u:mysql:rwx /datadir/ #赋予mysql用户权限 [root@nfs ~]# exportfs -rv #重新导出目录 exporting 172.16.1.0/24:/datadir
配置MySQL
MySQL我们使用通用二进制的包安装, 安装过程有疑问的可以看我以前的LAMP安装的文章
在node1上操作 [root@node1 corosync]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/src/ [root@node1 corosync]# cd /usr/src/mysql-5.5.33-linux2.6-x86_64/ [root@node1 mysql-5.5.33-linux2.6-x86_64]# groupadd -g 3306 -r mysql [root@node1 mysql-5.5.33-linux2.6-x86_64]# useradd -u 3306 -g mysql mysql [root@node1 mysql-5.5.33-linux2.6-x86_64]# mkdir /datadir [root@node1 mysql-5.5.33-linux2.6-x86_64]# mount -t nfs 172.16.1.4:/datadir /datadir/ #挂载nfs到本地 [root@node1 mysql-5.5.33-linux2.6-x86_64]# ./scripts/mysql_install_db --user=mysql --datadir=/datadir #初始化MySQL生成数据库文件 [root@node1 mysql-5.5.33-linux2.6-x86_64]# ls /datadir/ mysql performance_schema test [root@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/my-large.cnf /etc/my.cnf [root@node1 mysql-5.5.33-linux2.6-x86_64]# vim /etc/my.cnf #添加以下几行 datadir=/datadir innodb_file_per_table = on skip_name_resolve = on [root@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/mysql.server /etc/init.d/mysqld [root@node1 mysql-5.5.33-linux2.6-x86_64]# cd /usr/local/ [root@node1 local]# ln -sv /usr/src/mysql-5.5.33-linux2.6-x86_64/ mysql #创建软链接 [root@node1 ~]# service mysqld start #启动mysql Starting MySQL.. SUCCESS! [root@node1 ~]# /usr/local/mysql/bin/mysql #登录成功 mysql> 在node2上操作 [root@node2 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/src/ [root@node2 ~]# mkdir /datadir [root@node2 ~]# mount -t nfs 172.16.1.4:/datadir /datadir/ [root@node2 ~]# ls /datadir/ ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index node1.anyisalin.com.err node1.anyisalin.com.pid performance_schema test [root@node2 ~]# scp node1.anyisalin.com:/etc/my.cnf /etc/ [root@node2 ~]# scp node1.anyisalin.com:/etc/init.d/mysqld /etc/init.d/ [root@node2 ~]# cd /usr/local/ [root@node2 local]# groupadd -g 3306 -r mysql [root@node2 local]# useradd -g mysql -u 3306 mysql [root@node2 local]# ln -sv /usr/src/mysql-5.5.33-linux2.6-x86_64/ mysql ‘mysql’ -> ‘/usr/src/mysql-5.5.33-linux2.6-x86_64/’ [root@node2 ~]# service mysqld start #因为node1在运行所以不能运行 Starting MySQL........ [root@node2 ~]# ssh node1.anyisalin.com "service mysqld stop" [root@node2 local]# service mysqld start #启动成功 Starting MySQL SUCCESS! [root@node2 local]# /usr/local/mysql/bin/mysql #能够登录 mysql> #测试完成后将mysql服务停止并卸载nfs [root@node2 local]# service mysqld stop Shutting down MySQL. SUCCESS! [root@node2 local]# umount /datadir/ [root@node1 ~]# umount /datadir/
配置HA资源
crm(live)# configure crm(live)configure# primitive dataip ocf:heartbeat:IPaddr params ip=172.16.1.8 crm(live)configure# primitive datastore ocf:heartbeat:Filesystem params device="172.16.1.4:/datadir" fstype="nfs" directory="/datadir" crm(live)configure# primitive mysql service:mysqld crm(live)configure# property stonith-enabled=false colocation dataip_with_datastore inf: mysql ( dataip datastore ) #设置排列约束 order dataip_then_webstore Mandatory: dataip datastore #设置顺序约束 order datastore_then_mysql Mandatory: datastore mysql crm(live)configure# commit
测试
总结
这样我们就能实现一个MySQL HA集群了, 但是NFS是个单点故障. 如果NFS的数据挂了怎么办? 很快我们就会写drbd实现MySQL高可用了. 本系列文章主要侧重于实验. 对理论知识不做阐述, 还请多多谅解
作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感谢: MageEdu
原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/14645
评论列表(2条)
这些链接是怎么实现的,博客有这个功能么
@Net18-天津-康康:可以通过锚点来实现,具体你可以在群里问我