搭建MHA

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 安装MySQL 5.7yum源的配置文件如下[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.

安装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日志中可以看见

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
存储 关系型数据库 MySQL
使用 MHA 和 HAProxy 部署高可用 MySQL
使用 MHA 和 HAProxy 部署高可用 MySQL
|
关系型数据库 MySQL 网络安全
MHA
MHA原理: (1)一主三从架构,主库挂了,但主库能被从库ssh上去的情况下,MHA从三个从库中选择同步最接近的作为新主,然后新主和s2,s3都ssh到原主上通过binlog补上还没有同步的数据,io_thread读取到binlog位置,传到save_binary_logs,然后回放,达到s1,s2,s3和原主一致。
1067 0
|
机器学习/深度学习 监控 关系型数据库
MySQL MHA搭建
MySQL MHA 架构介绍:MHA由两部分组成MHA Manager(管理节点)和MHA Node(数据节点),MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自...
3722 0
|
关系型数据库 MySQL 网络安全
|
监控 关系型数据库 MySQL
|
关系型数据库 MySQL 网络安全
|
监控 关系型数据库 MySQL
|
关系型数据库 MySQL