前言
上篇文章我们介绍了使用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
linux