Mysql的MHA高可用部署

1:先来说一下为什么会出现这种方案,以及这个方案是怎么回事儿?

只要是个服务,就都有挂的可能,Mysql也不例外,为了让各位运维、DBA、和全栈工程师晚上能睡个安稳觉,有更多的时间和女朋友么么哒,我们希望数据库服务器在宕机的时候能自动恢复过来,最少的影响用户的体验,留下更多的奖金买003。

这个时候我们的MHA(Mysql Highe Available)大显身手了,他的原理就一句话:在Mysql的主从架构下,当主库挂掉的时候,自动将备库升级为主库,同时为其他备库重新设置新的主库。

假设我们有服务器
A:192.168.1.60 (主库)
B:192.168.1.70(备库,备主[主库宕机的情况,提升B为主库])
C:192.168.1.80(备库2)
D: 192.168.1.88 (manager,MHA管理中心,安装MHA manager,在主库和备库上面都需要安装MHA node,manager管理node很好理解吧)

让B C 成为A的slave 机 就不在这里介绍了,很简单的配置.

2:具体原理如下:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

3:MHA的安装,因为MHA的功能是通过perl脚本来实现的,所以我们要安装perl环境

A: 让A B C D四台机子互相无密码登陆

查看A B C D 主机 /root/.ssh/ 下面有没有 id_rsa.pub 文件

如果没有从新生成 ssh-keygen -t rsa -b 2048

然后通过scp命令拷贝到其他三台机子,如下

[[email protected] ~]# scp id_rsa.pub [email protected]:/root/.ssh/ //复制到主机60

[[email protected] ~]# cat id_rsa.pub >> authorized_keys

安装必要的perl库,

[[email protected] ~]# yum install cpan perl
[[email protected] ~]# yum -y install perl-MIME-Lite perl-Params-Validate perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
[[email protected] ~]# wget ftp://ftp.muug.mb.ca/mirror/centos/6.5/os/x86_64/Packages/compat-db43-4.3.29-15.el6.x86_64.rpm
[[email protected] ~]# wget http://downloads.naulinux.ru/pub/NauLinux/6x/i386/sites/School/RPMS/perl-Log-Dispatch-2.27-1.el6.noarch.rpm
[[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
[[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
[[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
[[email protected] ~]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-Time-HiRes-1.9721-136.el6.x86_64.rpm

[[email protected] ~]# rpm -ivh perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-Time-HiRes-1.9721-136.el6.x86_64.rpm

再安装MHA manager(在192.168.1.88上)

[[email protected] ~]# wget https://downloads.mariadb.com/files/MHA/mha4mysql-manager-0.55-0.el6.noarch.rpm 


[[email protected] ~]# rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm

安装过程中会出现一些缺失的库,自己再去找对应的库就好了;

再在从库安装MHA node(在192.168.1.50、192.168.1.60、192.168.1.70,A、B、C上)

[root@A-B-C ~]#wget https://downloads.mariadb.com/files/MHA/mha4mysql-node-0.54-0.el6.noarch.rpm


[root@A-B-C~]#rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm

(缺失perl库的话,按第一步来装好)

配置Manager

shell> mkdir -p /masterha/app1    //创建app目录,用来存放临时数据文件,
shell> mkdir /etc/masterha        //创建目录,配置文件目录
shell> vi /etc/masterha/app1.cnf  //创建配置文件
[server default]
user=root                //linux用于管理mysql用戶名
password=123456          //linux用于管理mysql密码
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
remote_workdir=/masterha/app1
ssh_user=root            //ssh免密钥登录的帐号名
repl_user=slaver         //mysql复制帐号,用来在主从机之间同步二进制日志等
repl_password=slaver     //mysql密码
ping_interval=1          //ping间隔,用来检测master是否正常



[server2]
hostname=192.168.1.70 
port=3306 


[server3]
hostname=192.168.1.80
port=3306 

设置relay log的清除方式(在每个slave节点上):

[[email protected] ~]# mysql -e 'set global relay_log_purge=0'
[[email protected] ~]# mysql -e 'set global relay_log_purge=0’

2、masterha_check_ssh工具验证ssh信任登录是否成功

[[email protected] ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

注意:用ssh-keygen实现4台主机之间相互免密钥登录决定这一步是否成功。

Wed Apr  23 22:10:01 2014 - [debug]   ok.
Wed Apr  23 22:10:01 2014 - [info] All SSH connection tests passed successfully.

3、masterha_check_repl工具验证mysql复制是否成功

[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf

注意:上一篇文章中的master--slaver是否成功决定这一步是否成功。或是MHA文件配置的用户账号有关。

port=3306 
candidate_master=1
master_binlog_dir=/data/mysql
[server1]
hostname=192.168.1.60



Wed Apr 23 22:10:56 2014 - [info] Checking replication health on 192.168.1.232..
Wed Apr 23 22:10:56 2014 - [info]  ok.
Wed Apr 23 22:10:56 2014 - [warning] master_ip_failover_script is not defined.
Wed Apr 23 22:10:56 2014 - [warning] shutdown_script is not defined.
Wed Apr 23 22:10:56 2014 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK

在出库上面停止mysql,模拟宕机的情况

[[email protected] ~]#service mysql stop

我们可以在manager 机器上面看到输出的日志

[[email protected] ~]tail -f /masterha/app1/manager.log

你可能感兴趣的:(Mysql的MHA高可用部署)