Loading... <h1 style="font-size: 2.6em;margin: 21px 0px 10.5px;font-family: inherit;color: inherit">HA专题: 使用pacemaker+corosync实现MySQL高可用</h1> <ul class=" list-paddingleft-2"> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">前言</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">实验拓扑</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">实验环境</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">实验步骤</span></p> </li> <ul class=" list-paddingleft-2"> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">准备工作</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">安装HA组件并配置</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">配置NFS</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">配置MySQL</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">配置HA资源</span></p> </li> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">测试</span></p> </li> </ul> <li> <p><span style="font-family: 黑体, SimHei;font-size: 16px">总结</span></p> </li> </ul> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">前言</h2> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><span style="font-size: 16px;font-family: 黑体, SimHei">上篇文章我们介绍了使用</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">pacemkaer+corosync</span></code><span style="font-size: 16px;font-family: 黑体, SimHei">实现简单的</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">nginx</span></code><span style="font-size: 16px;font-family: 黑体, SimHei">高可用, 这篇文章我们介绍如何使用</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">pacemaker+corosync</span></code><span style="font-size: 16px;font-family: 黑体, SimHei">实现</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">MySQL</span></code><span style="font-size: 16px;font-family: 黑体, SimHei">高可用, 并且此次我们手动编辑配置文件来实现</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">corosync</span></code><span style="font-size: 16px;font-family: 黑体, SimHei">的配置</span></p> </blockquote> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">实验拓扑</h2> <p style="margin-top: 0px;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460339480587.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161230-57.png" title="1460350835138531.png" alt="blob.png" /></p> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">实验环境</h2> <table> <thead> <tr class="firstRow"> <th>主机</th> <th>IP</th> <th>功用</th> </tr> </thead> <tbody> <tr> <td style="padding: 0.5em;vertical-align: top">node1.anyisalin.com</td> <td style="padding: 0.5em;vertical-align: top">172.16.1.2</td> <td style="padding: 0.5em;vertical-align: top">MySQL服务, HA节点</td> </tr> <tr> <td style="padding: 0.5em;vertical-align: top">node2.anyisalin.com</td> <td style="padding: 0.5em;vertical-align: top">172.16.1.3</td> <td style="padding: 0.5em;vertical-align: top">MySQL服务, HA节点</td> </tr> <tr> <td style="padding: 0.5em;vertical-align: top">nfs.anyisalin.com</td> <td style="padding: 0.5em;vertical-align: top">172.16.1.4</td> <td style="padding: 0.5em;vertical-align: top">提供nfs服务,数据库文件</td> </tr> </tbody> </table> <p style="margin-top: 0px;margin-bottom: 1.1em"><code>注意: 本文实验中所有主机SElinux和iptables都是关闭的</code></p> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">实验步骤</h2> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">准备工作</h3> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><span style="font-size: 16px;font-family: 黑体, SimHei">高可用集群必须保证所有节点主机互信, 主机名解析一致, 时间同步</span></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><code>配置hosts文件同步</code><br /><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460333227622.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161230-17.png" title="1460350841527017.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><code>配置互信</code><br /><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460333390578.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460333611239.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161231-17.png" title="1460350844134244.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161231-66.png" title="1460350858207279.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><code>时间同步</code><br /><img src="//cto.wang/usr/uploads/2016/07/20160703161231-48.png" title="1460350862368428.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460333791574.png" /></p> </blockquote> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">安装HA组件并配置</h3> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><span style="font-size: 16px;font-family: 黑体, SimHei">我们这次直接安装并手动配置</span><code><span style="font-size: 16px;font-family: 黑体, SimHei">pacemaker+corosync</span></code></p> </blockquote> <pre>安装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</pre> <p style="margin-top: 0px;margin-bottom: 1.1em"><strong>编辑配置文件</strong></p> <pre>[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 }</pre> <p style="margin-top: 0px;margin-bottom: 1.1em"><strong>启动corosync和pacemaker</strong></p> <pre>[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"</pre> <p style="margin-top: 0px;margin-bottom: 1.1em"><strong>查看集群节点状态</strong></p> <pre>[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 ]</pre> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">配置NFS</h3> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><span style="font-size: 16px;font-family: 黑体, SimHei">对于NFS配置这次比较复杂</span></p> </blockquote> <pre>[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</pre> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">配置MySQL</h3> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><span style="font-size: 16px;font-family: 黑体, SimHei">MySQL我们使用通用二进制的包安装, 安装过程有疑问的可以看我以前的LAMP安装的文章</span></p> </blockquote> <pre>在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/</pre> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">配置HA资源</h3> <pre>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</pre> <h3 style="font-family: inherit;color: inherit;font-size: 1.7em;margin: 1.2em 0px 0.6em">测试</h3> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460347165416.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161232-95.png" title="1460350868103767.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161232-89.png" title="1460350872706568.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460347283033.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460347372881.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703161233-60.png" title="1460350880994311.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161233-55.png" title="1460350883249157.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161234-8.png" title="1460350887947716.png" alt="blob.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460350336176.png" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161230-71.gif" alt="Alt text" longdesc="./1460350390273.png" /></p> </blockquote> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">总结</h2> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><span style="font-family: 黑体, SimHei;font-size: 16px">这样我们就能实现一个MySQL HA集群了, 但是NFS是个单点故障. 如果NFS的数据挂了怎么办? 很快我们就会写drbd实现MySQL高可用了. 本系列文章主要侧重于实验. 对理论知识不做阐述, 还请多多谅解</span></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><span style="font-family: 黑体, SimHei;font-size: 16px">作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~<br />作者: AnyISaIln QQ: 1449472454<br />感谢: MageEdu</span></p> </blockquote> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信