mysql MHA
MHA【Master High Availabilty】目前在Mysql高可用方面是是一个相对程数的解决方案,是一套优秀的作为Mysql高可用性环境下故障切换和主从提升的高可用软件。在Mysql故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA是由日本DeNA公司youshimaton(现就职于Facebook公司)开发。
mysql的一致性:一致性是指数据处于一种语义上的有意义且正确的状态。一致性是对数据可见性的约束,保证在一个事务中多次操作的数据中间对其他事务不可见的。因为这些中见状态,是一个过度状态,与事务的开始状态和事务的结束状态时不一致的。
进行实例:【准备三台centos7,至少需要三台】
1. 在三台centos7上面执行时间同步
[root@ localhost ~]# echo "*/s * * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root
2. 更改主机名三台都要执行,更改之后断开xshell重新连一下就好了
hostname直接更改是临时的使用hostctl来进行更改是永久的
3. 进行hosts解析(三台都要执行)
cat >> /etc/hosts<<EOF
> c701 10.0.0.42
> c702 10.0.0.47
> c703 10.0.0.46
EOF
4. 关闭防火和SElinux(三台都要执行)
[root@ c72 ~]# sed -i '/^SELINUX/s#enforceing#disabled#g' /etc/selinux/config
5. 互相配置ssh免密登录【ip写的是自己的,三台虚拟机都要进行执行】,ssh进行连接测试一下看是否可以
yum -y install sshpass
vim ssh.sh
6. 安装mysql,每一台都要执行
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum -y install mysql
yum install mysql-server -y
7. 安装完毕之后开启MySQL并更改密码
mysql> update mysql.user set password=password('123456') where user='root' and host='localhost';
mysql> flush privileges;
8. MySQL主从从配置,编辑mysql配置文件/etc/my.cnf(在c71)
9. 进入MySQL命令行,执行同步,并查看master日志(在c72)
在从的这台centos7的系统上:
在从的centos7的系统上(在c73):执行c72同样的步骤
10. 三台centos7系统上都安装好 “mha4mysql-node-0.58-0.el7.centos.noarch.rpm”,在安装这个之前一定要安好依赖
yum install perl-DBD-MySQL -y
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
11. 在c73这个slave上安装 “mha4mysql-manager-0.58-0.el7.centos.noarch.rpm”(安装这个是为了防止master不随便跳机)
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
12. 创建mha目录,编辑配置文件【vim /etc/mha/app1.cnf】在配置文件中加上一下的代码
mkdir -p /etc/mha
mkdir -p /var/log/mha/app1
[server default] manager_log=/var/log/mha/app1/manager.log manager_workdir=/var/log/mha/app1 master_binlog_dir=/var/lib/mysql password=mha ping_interval=2 repl_password=123456 repl_user=rep ssh_user=root user=mha [server1] hostname=10.0.0.42 port=3306 [serve2] hostname=10.0.0.47 port=3306 [server3] hostname=10.0.0.46 ignore_fail=1 no_master=1 port=3306
13. 进行检测
masterha_check_repl --conf=/etc/mha/app1.cnf masterha_check_ssh --conf=/etc/mha/app1.cnf
【如果你出现这种状况,请在MySQL的配置文件中加上:skip-name-resolve(表示跳过本机域名),然后在进行测试 “masterha_check_repl --conf=/etc/mha/app1.cnf”,一定是“is ok”才算成功】
14. 进行开启mha,并查看状态
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 & ps -ef | grep mha masterha_check_status --conf=/etc/mha/app1.cnf
15.
16.
17.
18.
19.
20.
masterha_check_repl --conf=/etc/mha/app1.cnf masterha_check_ssh --conf=/etc/mha/app1.cnf