MySQL MHA架构介绍:
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。
由两部分组成:
MHA Manager(管理节点)和MHA Node(数据节点)。
下图展示了如何通过MHA Manager管理多组主从复制。
可以将MHA工作原理总结为如下:
环境准备(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
|
主机名称 | IP | Service_id | 角色 | 系统 |
| Master-db1 | 192.168.100.102 | 1 | master | Centos7 |
| Slave-db1 | 192.168.100.103 | 2 | Candicate master | Cento7 |
| Slave-db2 | 192.168.100.104 | 3 | slave | Centos7 |
| Mha-monitor | 192.168.100.105 |
| Monitor host | Centos7 |
用sed命令,修改各主机名如下 sed -i '/^HOSTNAME/s/localhost.localdomain/master-db1/g' /etc/sysconfig/network sed -i '/^HOSTNAME/s/localhost.localdomain/slave-db1/g' /etc/sysconfig/network sed -i '/^HOSTNAME/s/localhost.localdomain/slave-db2/g' /etc/sysconfig/network sed -i '/^HOSTNAME/s/localhost.localdomain/mha-monitor/g' /etc/sysconfig/network
四台服务器互相配置ssh免密码登录(注意是互相)
四台机器同时运行以下命令 ssh-keygen -t rsa 以192.168.100.102为例 scp /root/.ssh/id_rsa.pub root@192.168.100.103:/root/.ssh/202.pub scp /root/.ssh/id_rsa.pub root@192.168.100.104:/root/.ssh/202.pub scp /root/.ssh/id_rsa.pub root@192.168.100.105:/root/.ssh/202.pub 分别登录到103 104 105,把公钥写到文件authorized_keys里边 cd /root/.ssh/ && cat 202.pub >> authorized_keys 其他三台一样搭建MySQL主从复制环境
- 在100.102上修改配置文件如下
server-id=1 log-bin=mysql-bin log-slave-updates sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 symbolic-links=0
第二台
server-id=2 log-bin=mysql-bin log-slave-updates sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 symbolic-links=0
第三台
server-id=3 sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 symbolic-links=0 [mysqld_safe] log-error=/usr/local/mysql/logs/mysqld.log pid-file=/usr/local/mysql/logs/mysqld.pid
从配置文件记得开启中继日志 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index
102 103 104 运行如下:
cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld useradd -M -s /sbin/nologin mysql ln -s /usr/local/mysql/bin/* /usr/bin/ chown -R mysql:mysql /usr/local/mysql /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql mkdir /usr/local/mysql/logs chown -R mysql:mysql /usr/local/mysql/ /etc/init.d/mysqld start ln -s /usr/local/mysql/data/mysql.sock /tmp/
在100.102 100.103 和100.104上修改相应的server-id,修改mysql用户root的密码,并启动mysql
mysqladmin -u root -p password "123123"
在Master 192.168.200.202和Candicate master 192.168.200.203上创建复制用户
grant replication slave on *.* to 'tepl'@'192.168.100.%' idntified by '123456;'
分别在两台服务器上执行复制相关命令
show master status; 第二台: change master to master_host='192.168.100.102',master_user='mrepl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=611; start slave; show slave statusG 第一台:上授权一个用户 grant all privileges on *.* to 'root'@'192.168.100.%' identified by '123456'; mysql> flush privileges; #刷新权限
安装MHA
- 安装MHA的Perl依赖包
在所有的机器上
yum install perl-DBD-MySQL perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
在mha-monitor上安装MHA Manger依赖的perl模块
[root@mha-monitor ~]# yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y [root@mha-monitor ~]#yum install perl-DBD-MySQL perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN 注意:以上安装失败,请记得配置perl-Log-Dispatch ftp yum源
.在所有的服务器上安装MHA Node软件包 [root@master-db1 ~]# tar xf mha4mysql-node-0.56.tar.gz [root@master-db1 ~]# cd mha4mysql-node-0.56 [root@master-db1 mha4mysql-node-0.56]# perl Makefile.PL [root@master-db1 ~]# make && make install 3.在mha-monitor(192.168.100.105)上安装MHA Manager软件包 [root@mha-monitor ~]# tar xf mha4mysql-manager-0.56.tar.gz [root@mha-monitor ~]# cd mha4mysql-manager-0.56 [root@mha-monitor mha4mysql-manager-0.56]# perl Makefile.PL [root@mha-monitor~]# make && make install
安装完成后会在/usr/local/bin目录下面生成以下脚本文件,在/root/mha4mysql-manager-0.56/samples/scripts/下有些示例脚本复制到/usr/local/bin/下。
[root@mha-monitor ]#ll/root/mha4mysql-manager-0.56/samples/scripts/
配置MHA
1.创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。
[root@mha-monitor ~]# mkdir -p /etc/masterha [root@mha-monitor ~]# cp /root/mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/masterha/
- 修改app1.cnf配置文件,修改后的文件内容如下
[server default] manager_workdir=/var/log/masterha/app1 manager_log=/var/log/masterha/app1/manager.log master_binlog_dir=/var/lib/mysql master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=123456 user=root ping_interval=1 remote_workdir=/tmp repl_password=123456 repl_user=repl report_script=/usr/local/send_report secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.100.102 -s 192.168.100.103 -s 192.168.100.104 shutdown_script="" ssh_user=root [server1] hostname=192.168.100.102 port=3306 [server2] hostname=192.168.100.103 candidate_master=1 check_repl_delay=0 port=3306 [server3] hostname=192.168.100.104 port=3306 no_master=1
设置定期清理relay脚本(两台slave服务器)
cat purge_relay_log.sh #!/bin/bash user=root passwd=123456 port=3306 log_dir='/data/masterha/log' work_dir='/Data/apps' purge='/usr/local/bin/purge_relay_logs' if [ ! -d $log_dir ] then mkdir $log_dir -p fi $purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1
添加执行权限,并添加到crontab定期执行,另外一台相同操作
[root@slave-db1 ~]#chmod +x purge_relay_log.sh [root@slave-db1 ~]#crontab -l 0 4 * * * /bin/bash /root/purge_relay_log.sh
purge_relay_logs脚本删除中继日志不会阻塞SQL线程。
检查整个复制环境状况。
masterha_check_repl --conf=/etc/masterha/app1.cnf
注意:报错解决:在两台mysql从库配置文件中添加read-only=1
重启MySQL
- 开启MHA Manager监控
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/masterha/app1/manager.log 2>&1 &
[1] 7191
[root@mha-monitor ~]# nohup: 忽略输入并把输出追加到"nohup.out"
查看MHA Manager监控状态:
可以看见已经在监控了,而且master的主机为192.168.100.102
停止MHA监控
masterha_stop --conf=/etc/masterha/app1.cnf #停止



