HA专题: 使用pacemaker+corosync实现MySQL高可用

HA专题: 使用pacemaker+corosync实现MySQL高可用

前言

上篇文章我们介绍了使用pacemkaer+corosync实现简单的nginx高可用, 这篇文章我们介绍如何使用pacemaker+corosync实现MySQL高可用, 并且此次我们手动编辑配置文件来实现corosync的配置

实验拓扑

Alt textblob.png

实验环境

主机 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文件同步
Alt textblob.png

配置互信
Alt text

Alt textblob.png

blob.png

时间同步
blob.pngAlt text

安装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

测试

Alt textblob.png

blob.png

Alt text

Alt textblob.png

blob.png

blob.png

Alt text

Alt text

总结

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

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感谢: MageEdu

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/14645

(2)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-11 11:52
下一篇 2016-04-11 15:29

相关推荐

  • N25第一周博客作业

    本周加班很多,视频未看完,下周补上

    Linux干货 2016-12-04
  • ☞yum源的生成与配置{ local;cdrom;http;ftp;}

    ☞yum源的生成与配置{ local;cdrom;http;ftp;} 本文是继上一篇文章“CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}”的补充,上篇文章http://www.178linux.com/38812主要介绍了基于cdrom的yum源制作和配置以及归纳了详细的yum命令。本文继续介绍基于本地file、远程ht…

    Linux干货 2016-08-24
  • 博客开始的地方

    来北京挺长时间了,一直都在瞎忙,特别想找个地逛逛,约朋友一起去,结果人家只喜欢吃饭,逛街,来北京瞎逛过两次,第一次是面试路过潘家园,然后进去逛了半天,看各种各样的老古董,当然最多的还是手串,那种核桃,当然还是看到了好多好多有意思的东西,比如下面的小和尚和老和尚,小和尚光着头感觉特别可爱,老和尚还卖萌, 当然还有下面这个关老爷,他的肚子为什么被雕刻的那么大,难…

    2018-03-26
  • 姗姗来迟的第三周作业

    一,列出当前系统上所有已经登录的用户的用户名,注意,同一个用户登录多次只显示一次即可 w -h | cut -d" " -f1 | uniq who |cut -d" " -f1|uniq 二,取出最…

    Linux干货 2016-11-21
  • 第六周作业补充-vim简介及其使用方法详细介绍

    What       Vim是由Vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在Unix& Unix Like操作系统中被广泛使用。和Emacs并列成为Unix& Unix Like操作系统中最受欢迎的文本编辑器 When& Who  &nb…

    Linux干货 2016-09-26
  • 在学习的过程中,我们应该如何获取帮助?

    正文 在学习的过程当中,我们总是遇到不会使用的问题,以各种姿势来获取帮助是一个运维人员的基本要求 在Linux系统中我们获取帮助主要有以下几种方式 1. 使用命令内建的选项来获取帮助 2. 使用man来查看命令使用手册 3. 使用info来查看命令的信息页 4. 查看软件自带的帮助文档 5. 查看软件官方的文档 6. 查看发行版本的文档 7. Google相…

    Linux干货 2016-03-04

评论列表(2条)

  • Net18-天津-康康
    Net18-天津-康康 2016-04-11 13:48

    这些链接是怎么实现的,博客有这个功能么