linux

MySQL高可用,数据之船不再翻

发布时间:9年前热度: 3824 ℃评论数:

前言 

上篇文章我们介绍了使用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资源 

配置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" op 
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 

数据,不再

手机扫码访问