MHA配置

来源:互联网 发布:知乎名字由来 编辑:程序博客网 时间:2024/04/25 01:38

环境:rhel6.5 firewalld selinux disabled
MHA manager:172.25.67.1
master:172.25.67.2
slave:172.25.67.3
slave:172.25.67.4

mysql三个节点:
三个节点之间ssh连接都不用密码
启动MySQL:

/etc/init.d/mysqld start

编辑配置文件

vim /etc/my.cnf

添加下面的内容

# 每一个节点只有这儿的ID不同server-id=2 # 打开二进制日志功能log-bin=mysql-bin# 指定复制的数据库binlog-do-db=test# 忽略的数据库binlog-ignore-db=mysql# 开启GTID模式gtid-mode=ON# GTID安全的参数enforce-gtid-consistency=ON# 开启半同步复制,需要提前安装相应插件 # mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';rpl_semi_sync_master_enabled=ON# mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';rpl_semi_sync_slave_enabled=ON# 基于组提交的并行复制slave-parallel-type=LOGICAL_CLOCK# 一个schema下,16个的worker线程并发执行relay log中主库提交的事务slave-parallel-workers=16master_info_repository=TABLErelay_log_info_repository=TABLErelay_log_recovery=ON

安装软件: mha4mysql-node-0.56-0.el6.noarch.rpm

安装半同步复制所需的插件,如果用rpm包安装的,插件存放在/usr/lib64/mysql/plugin/

mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

创建主从复制帐号

mysql> grant replication slave on *.* to redhat@'172.25.67.%' identified by 'Gmoon+007';

建立MHA管理帐号

mysql> grant all on *.* to root@'172.25.67.%' identified by 'Gmoon+007';

防止在slave上被人工误写入数据

mysql> set global read_only=1;

重启mysql:

/etc/init.d/mysqld restart

在两个slave节点

mysql> change master to master_host='172.25.67.2',master_user='redhat',master_password='Gmoon+007',master_auto_position=1;mysql> start slave;mysql> show salve status\G*************************** 1. row ***************************                  Master_Host: 172.25.67.2                  Master_User: redhat              ......................             Slave_IO_Running: Yes            Slave_SQL_Running: Yes               ......................*************************************************************

在MANAGER节点:
安装软件:

mha4mysql-manager-0.56-0.el6.noarch.rpmmha4mysql-node-0.56-0.el6.noarch.rpmperl-Config-Tiny-2.12-7.1.el6.noarch.rpmperl-Email-Date-Format-1.002-5.el6.noarch.rpmperl-Log-Dispatch-2.27-1.el6.noarch.rpmperl-Mail-Sender-0.8.16-3.el6.noarch.rpmperl-Mail-Sendmail-0.79-12.el6.noarch.rpmperl-MIME-Lite-3.027-2.el6.noarch.rpmperl-MIME-Types-1.28-2.el6.noarch.rpmperl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm

在mha管理节点创建管理目录:

mkdir /etc/mha

编辑配置文件:
vim /etc/mha/app.cnf

[server default]# 定义mha的管理目录及日志文件manager_workdir=/usr/local/mhamanager_log=/usr/local/mha/mha.logmaster_binlog_dir=/var/lib/mysqlremote_workdir=/tmp# mha的管理帐号和密码user=root           password=Gmoon+007      # 每隔一秒监测一次ping_interval=1# 在sql端授权的用户及密码repl_user=redhat            repl_password=Gmoon+007# ssh连接的用户ssh_user=root  # 定义监测的主机       [server2]hostname=172.25.67.2port=3306[server3]hostname=172.25.67.3port=3306candidate_master=1check_repl_delay=0[server4]hostname=172.25.67.4port=3306

创建配置文件中的目录

mkdir /usr/local/mha

配置ssh,使mha主机与mysql主机之间不用密码可以相互连接:
生成私钥和公钥

# ssh-keygen

将公钥复制到远程机器中

# ssh-copy-id 172.25.67.2# ssh-copy-id 172.25.67.3# ssh-copy-id 172.25.67.4# ssh 172.25.67.2   测试连接# ssh 172.25.67.3# ssh 172.25.67.4

scp实现相互连接

# scp -r .ssh/ root@172.25.67.2:/root# scp -r .ssh/ root@172.25.67.3:/root# scp -r .ssh/ root@172.25.67.4:/root

检查ssh是否配置成功:

masterha_check_ssh --conf=/etc/mha/app.cnf  **********All SSH connection tests passed successfully**********

检查数据库连接是否配置成功:

masterha_check_repl --conf=/etc/mha/app.cnf************MySQL Replication Health is OK.***********

在manager节点:
开启MHA管理进程:

nohup masterha_manager --conf=/etc/mha/app.cnf --ignore_last_failover &

查看进程开启的状态:

masterha_check_status --conf=/etc/mha/app.cnf

停掉master,会切换到172.25.67.3上

service mysqld stop

查看172.25.67.3的slave的状态:

mysql> show slave status\GEmpty set (0.00 sec) 变为空

注意这里有两个问题:

  1. 虽然mha试图从宕机的主服务器上保存二进制日志,但也会有问题。例如,如果主服务器硬件故障或无法通过ssh访问,mha没法保存二进制日志,只进行故障转移而丢失最新数据。
  2. 当主库故障,切换到另外的服务器上后,即使恢复了原来的主库,也不能立即加入整套系统中,得重新部署。而且当发生一次切换后,管理节点的监控进程就会自动退出,需要用脚本来自动启动。

在master节点:
添加VIP

ip addr 172.25.67.100/24 dev eth0

在MHA管理节点:
将下面两个脚本的VIP设置为master的添加的VIP

vim master_ip_failovervim master_ip_online_change

测试:
开启MHA的管理进程:

nohup masterha_manager --conf=/etc/mha/app.cnf --ignore_last_failover &

停掉master上的msyqld,VIP会自动转移到新的master上。

在不启动MHA管理进程的情况下,可以手动切换:

热切:

masterha_master_switch --conf=/etc/mha/app.cnf --master_state=alive --new_master_host=172.25.67.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

冷切:

masterha_master_switch --conf=/etc/mha/app.cnf --master_state=dead --dead_master_host=172.25.67.2 --dead_master_port=3306 --new_master_host=172.25.67.3 --new_master_port=3306 --ignore_last_failover
原创粉丝点击