设为首页 收藏本站
查看: 893|回复: 0

[经验分享] HA专题: 使用pacemaker+corosync实现MySQL高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-12 09:24:50 | 显示全部楼层 |阅读模式
前言
上篇文章我们介绍了使用pacemkaer+corosync实现简单的nginx高可用, 这篇文章我们介绍如何使用pacemaker+corosync实现MySQL高可用, 并且此次我们手动编辑配置文件来实现corosync的配置
实验拓扑

1460350835138531.png

实验环境[td]
主机IP功用
node1.anyisalin.com172.16.1.2MySQL服务, HA节点
node2.anyisalin.com172.16.1.3MySQL服务, HA节点
nfs.anyisalin.com172.16.1.4提供nfs服务,数据库文件

注意: 本文实验中所有主机SElinux和iptables都是关闭的

实验步骤准备工作
高可用集群必须保证所有节点主机互信, 主机名解析一致, 时间同步
配置hosts文件同步
配置互信
1460350858207279.png
1460350862368428.png
时间同步
安装HA组件并配置
    我们这次直接安装并手动配置pacemaker+corosync

安装corosync+pacemaker在两个节点上

[iyunv@node1 ~]# yum install corosync pacemaker -y &> /dev/null && echo success
success
[iyunv@node1 ~]# ssh node2.anyisalin.com "yum install corosync pacemaker -y &> /dev/null && echo success"
success

编辑配置文件

[iyunv@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

[iyunv@node1 corosync]# scp corosync.conf node2.anyisalin.com:/etc/corosync/
[iyunv@node1 corosync]# systemctl start corosync pacemkaer
[iyunv@node1 corosync]# ssh node2.anyisalin.com "systemctl start corosync pacemkaer"

查看集群节点状态

[iyunv@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配置这次比较复杂

[iyunv@nfs ~]# vim /etc/exports
/datadir    172.16.1.0/24(rw,no_root_squash)

[iyunv@nfs ~]# useradd -u 3306 mysql  #创建mysql用户

[iyunv@nfs ~]# mkdir /datadir
[iyunv@nfs ~]# setfacl -m u:mysql:rwx /datadir/  #赋予mysql用户权限

[iyunv@nfs ~]# exportfs -rv   #重新导出目录
exporting 172.16.1.0/24:/datadir

配置MySQL

    MySQL我们使用通用二进制的包安装, 安装过程有疑问的可以看我以前的LAMP安装的文章

在node1上操作

[iyunv@node1 corosync]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/src/
[iyunv@node1 corosync]# cd /usr/src/mysql-5.5.33-linux2.6-x86_64/
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# groupadd -g 3306 -r mysql
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# useradd -u 3306 -g mysql mysql
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# mkdir /datadir
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# mount -t nfs 172.16.1.4:/datadir /datadir/ #挂载nfs到本地

[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# ./scripts/mysql_install_db --user=mysql --datadir=/datadir #初始化MySQL生成数据库文件
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# ls /datadir/
mysql  performance_schema  test

[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/my-large.cnf /etc/my.cnf
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# vim /etc/my.cnf #添加以下几行
datadir=/datadir
innodb_file_per_table = on
skip_name_resolve = on
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/mysql.server /etc/init.d/mysqld
[iyunv@node1 mysql-5.5.33-linux2.6-x86_64]# cd /usr/local/
[iyunv@node1 local]# ln -sv /usr/src/mysql-5.5.33-linux2.6-x86_64/ mysql  #创建软链接
[iyunv@node1 ~]# service mysqld start  #启动mysql
Starting MySQL.. SUCCESS!
[iyunv@node1 ~]# /usr/local/mysql/bin/mysql  #登录成功
mysql>


在node2上操作
[iyunv@node2 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz  -C /usr/src/
[iyunv@node2 ~]# mkdir /datadir
[iyunv@node2 ~]# mount -t nfs 172.16.1.4:/datadir /datadir/
[iyunv@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

[iyunv@node2 ~]# scp node1.anyisalin.com:/etc/my.cnf /etc/
[iyunv@node2 ~]# scp node1.anyisalin.com:/etc/init.d/mysqld /etc/init.d/


[iyunv@node2 ~]# cd /usr/local/
[iyunv@node2 local]# groupadd -g 3306 -r mysql
[iyunv@node2 local]# useradd -g mysql -u  3306 mysql
[iyunv@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/’

[iyunv@node2 ~]# service mysqld start #因为node1在运行所以不能运行
Starting MySQL........
[iyunv@node2 ~]# ssh node1.anyisalin.com "service mysqld stop"

[iyunv@node2 local]# service mysqld start  #启动成功
Starting MySQL SUCCESS!
[iyunv@node2 local]# /usr/local/mysql/bin/mysql  #能够登录

mysql>


#测试完成后将mysql服务停止并卸载nfs
[iyunv@node2 local]# service mysqld stop
Shutting down MySQL. SUCCESS!
[iyunv@node2 local]# umount /datadir/
[iyunv@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

测试
1460350868103767.png 1460350872706568.png
1460350883249157.png

1460350887947716.png


总结
这样我们就能实现一个MySQL HA集群了, 但是NFS是个单点故障. 如果NFS的数据挂了怎么办? 很快我们就会写drbd实现MySQL高可用了. 本系列文章主要侧重于实验. 对理论知识不做阐述, 还请多多谅解

1460350880994311.png
1460350844134244.png
1460350841527017.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-202900-1-1.html 上篇帖子: Mysql-5.6.x多实例配置 下篇帖子: MySQL的log_bin和sql_log_bin 到底有什么区别?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表