搭建MHA

安装MySQL 5.7

  • yum源的配置文件如下
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
gpgcheck=0
  • 使用yum install mysql-community-server -y安装mysql

  • 安装完毕mysql之后的配置操作

    • systemctl start mysqld
    • cat /var/log/mysqld.log | grep password --> 获取临时密码
    • mysql -uroot -p -> 输入临时密码
    • set password for 'root'@'localhost' = password('New@password123');
    • flush privileges;
    • systemctl stop mysqld -> 先关闭mysqld, 注意: 如果卡住了, 使用Ctrl + C结束, 在使用ps aux | grep mysqld 查看到mysqld进程的id号, 使用kill -9 id杀死mysqld进程, 在使用systemctl stop mysqld
  • 修改/etc/my.cnf配置文件的[mysqld]域

    • master节点

      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=1
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0 # 一定要开启
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
      
    • slave1 节点(主需要修改server_id)

      
      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=10
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
      
      • slave2 节点(主需要修改server_id)
      
      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=11
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
      
  • systemctl start mysqld 启动master, slave1, slave2节点

  • 这三个节点之间需要ssh互相密钥通信, 方便起见, 在master节点执行, ssh-keygen -i rsa -P "", 接着使用 ssh-copy-id -i .ssh/id_rsa.pub root@localhost, 接着将.ssh目录拷贝到其他节点即可

  • 在master节点创建用户'repl'@'192.168.1.%'(该repl用户只用在master上存在), 创建用户'mhaadmin'@'192.168.1.%'(该用户需要在所有的节点上都有, 因为该用户是监控用户)

  • 为repl用户赋予replication slave权限, 为mhaadmin赋予all权限

  • create user 'repl'@192.168.1.%' identified by 'New@password123';

  • grant replication slave on . to 'repl'@'192.168.1.%';

  • create user 'mhaamdin'@192.168.1.%' identified by 'New@password123';

  • grant all on . to 'mhaamdin'@'192.168.1.%';

安装配置mha4mysql

  • rpm(mha4mysql-manager, mha4mysql-node)包自己找
  • 在所有节点上使用yum安装这两个包, 安装时会安装很多的依赖包
  • 创建配置文件的目录(所有节点): mkdir -pv /etc/masterha
  • 在master节点中, vim /etc/masterha/app1.cnf
[server default]
user=mhaadmin # 监控用户, 在所有的mysql节点中都要有
password=yourpassword
manager_workdir=/data/masterha/app1 # 工作目录, 会自动创建的
manager_log=/data/masterha/app1/manager.log # 日志文件的路径
remote_workdir=/data/masterha/app1 # slave节点的工作目录, 一般与master一样
ssh_user=root # ssh连接登录时的用户, mha依赖于ssh
repl_user=repl # 复制的用户
repl_password=yourpassword
ping_interval=1 # 心跳频率
master_ip_failover_script= /usr/local/bin/master_ip_failover    //设置自动failover时候的切换脚本,perl脚本, 实现VIP的切换
master_ip_online_change_script= /usr/local/bin/master_ip_online_change  //设置手动切换时候的切换脚本

[server1]
hostname=172.20.10.7
port=3306
candidate_master=1 # 当master挂时提升为master

[server2]
hostname=172.20.10.8
port=3306
candidate_master=1 当master挂时提升为master

[server3]
hostname=172.20.10.9
port=3306
# candidate_master=1

配置MySQL的主从复制

  • 在slave1和slave2节点中, 使用change master to...命令配置好连接参数
  • 在slave1和slave2中使用start slave
  • 在master节点中使用show slave hosts查看是否成功构建复制架构

测试MHA

  • masterha_check_ssh --conf=/etc/masterha/app1.cnf # 测试ssh的连接
  • masterha_check_repl --conf=/etc/masterha/app1.cnf # 测试复制是否可用
  • masterha_check_status --conf=/etc/masterha/app1.cnf # 测试是否运行, 现在应该是NOT RUNNING

启动MHA

  • nohub masterha_manager --remove_dead_master_conf --ignore_last_failover --conf=/etc/masterha/app1.cnf > /data/masterha/app1/manager.log 2>&1 & # 所有的信息都重定向到/data/masterha/app1/manager.log中
  • masterha_check_status --conf=/etc/masterha/app1.cnf # 此时查看应该已经运行了
–remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。 

关闭MHA

  • masterha_stop --conf=/etc/masterha/app1.cnf

在master节点当机时, 会将VIP迁移到候选那的master节点上, 在manager.log日志中可以看见

原文地址:https://www.cnblogs.com/megachen/p/9604926.html