千家信息网

Master High Availability 安装配置

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在MySQ
千家信息网最后更新 2025年02月01日Master High Availability 安装配置

MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,
是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在
MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操
作,并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,以达
到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager
可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave

点上。
MHA Node 运行在每台 MySQL 服务器上,MHA Manager 会定时探测集群中的 master
节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将
所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。MHA 可

与半同步复制结合起来,目前 MHA 主要支持一主多从的架构,要搭建 MHA,要求一个复制集群
中必须最少有三台数据库服务器,一主二从,即一台充当 master,一台充当备用 master,另
外一台充当从库.
MHA 切换步骤:
1.从宕机的 master 中保存二进制文件
2.检测含有最新日至更新的 slave
3.应用差异的中继日至(relay log)到其他的 slave
4.应用从 master 中保存的二进制日至事件到其他的 slave 中
5.提升一个 slave 为 master
6.使其他的 slave 指向最新的 master 进行复制。
manager 的工具:
masterha_check_ssh 检查 MHA 的 SSH 配置状况
masterha_check_repl 检查 MySQL 复制状况
masterha_manger 启动 MHA
masterha_check_status 检测当前 MHA 运行状态
masterha_master_monitor 检测 master 是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的 server 信息
node 的工具:
save_binary_logs 保存和复制 master 的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)
Mha 实验环境配置:我们这个是在主从复制(一主两从)的基础上搭建的,mha 是可以放在一个 slave 端也可以单

运行:
实验环境配置:
Rhel6.5
iptables selinux down
172.25.40.1 server1.example.com master
172.25.40.2 server2.example.com slave candidate master
172.25.40.3 server3.example.com slave
mha
Master 端配置:

yum install perl-DBD-mysql -yrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

构建免密登陆
ssh-keygen
##生成密钥 ssh-copy-id 172.25.40.2
##给另外两台 mysql 主机分发,这样可以免密连接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]server-id=1

##数据库的唯一标示,不能重复
log-bin=mysql-bin
##二进制记录文件名为 mysql-bin
binlog-do-db=test ##同的库为 test
binlog-ignore-db=mysql ##不同步 mysql
gtid-mode=ON ##打开 gtid 模式
enforce-gtid-consistency=ON##强制使用 gtid 模式
slave-parallel-type=LOGICAL_CLOCK ##打开多线程模式
slave-parallel-workers=16 ##开启 16 个线程
relay_log_info_repository=TABLE
##以表格形式存放 relay-log 信息
relay_log_recovery=ON
rpl_semi_sync_master_enabled=ON ##设置半同步 master 和 slave 开启
rpl_semi_sync_slave_enabled=ON
重新启动两台服务器上的 mysql
/etc/init.d/mysqld restart
进入数据库下载半同步模块

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';Query OK, 0 rows affected (0.50 sec)mysql> set global rpl_semi_sync_master_enabled=1;Query OK, 0 rows affected (0.00 sec)

给所创建的认证用户复制权限及 root 用户所有权限的授权

mysql> grant all privileges on *.* to 'root'@'172.168.40.%' identified'xxxxxxxxxx';Query OK, 0 rows affected, 1 warning (0.00 sec)bymysql> grant replication slave on *.* to 'redhat'@'172.168.40.%' identified by'xxxxxxxxx';mysql> grant all on *.* to root@'172.25.40.%' identified by 'xxxxxxxx';Query OK, 0 rows affected, 1 warning (0.38 sec)

Slave(candidate master)端配置:

yum install perl-DBD-mysql -yrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

构建免密登陆
ssh-keygen
##生成密钥
ssh-copy-id 172.25.40.1 ##给另外两台 mysql 主机分发,这样可以免密连接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]除过 server-id 是不同的,其他参数均一样server-id=2

重新启动两台服务器上的 mysql
/etc/init.d/mysqld restart 进入数据库下载半同步模块

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';Query OK, 0 rows affected (0.14 sec)mysql> set global rpl_semi_sync_slave_enabled=1;Query OK, 0 rows affected (0.00 sec)mysql> set global read_only=1;

#设置为只读模式,因为是备选 master,所以当
master 宕机时,candidate master 要充当 master,故不用写进配置文件中
Query OK, 0 rows affected (0.00 sec)
给所创建的认证用户复制权限及 root 用户所有权限的授权
mysql> grant all privileges on .to root@'172.25.40.%' identified by 'xxxxxxxx';
##这个密码是 manager 主机配置文件里面所写的密码
Slave 端配置:

yum install perl-DBD-mysql -yrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

构建免密登陆
ssh-keygen
##生成密钥
ssh-copy-id 172.25.40.1##给另外两台 mysql 主机分发,这样可以免密连接
ssh-copy-id 172.25.40.2
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]除过 server-id 是不同的,其他参数均一样server-id=3

重新启动两台服务器上的 mysql
/etc/init.d/mysqld restart
进入数据库下载半同步模块

mysql>  install plugin rpl_semi_sync_slave soname 'semisync_slave.so';Query OK, 0 rows affected (0.14 sec)lave_enabled=1;Query OK, 0 rows affected (0.00 mysql> set global rpl_semi_sync_slave_enabled=1

给所创建的认证用户复制权限及 root 用户所有权限的授权

mysql> grant all privileges on *.* to 'root'@'172.168.40.%' identified'xxxxxxxxx';Query OK, 0 rows affected, 1 warning (0.00 sec)bymysql> grant replication slave on *.* to 'redhat'@'172.168.40.%' identified by'xxxxxxxx';mysql> change master tomaster_host='172.25.40.1',master_user='redhat',master_password='xxxxxxxxxx',master_auto_position=1;

Mha 主机

yum install perl-* mha4mysql-manager-0.56-0.el6.noarch.rpm -ymkdir /usr/local/mha

##创建工作目录 workdir

mkdir /etc/mhacd /etc/mha/

##创建配置文件所在目录

vim app.conf        [server default]       manager_workdir=/usr/local/mha     manager_log=/usr/local/mha/mha.log     master_binlog_dir=/var/lib/mysql    user=root               ##数据库用户 登陆数据库的用户 ,用于manager监控管理用户和密码        password=xxxxxxxx        ##数据库登陆密码   初始化的时候登陆数据库的密码         ping_interval=1      remote_workdir=/tmp    repl_user=redhat            ##复制用户(授权在slave上)用于主从间复制         repl_password=xxxxxxxx      ##slave复制用户的密码        ssh_user=root               ##ssh用户    [server1]     hostname=172.25.40.1    port=3306         [server2]   hostname=172.25.40.2      port=3306    candidate_master=1          ##备用主机          check_repl_delay=0          ##日至差异大于100M的时候,不做master,两个参数通常一起使用       [server3]   hostname=172.25.40.3         port=3306     #no_master=1                ##永远不会作为master

检查MySQL复制状况

masterha_check_repl -conf=/etc/mha/app.cnf Tue Apr 24 09:14:45 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.Tue Apr 24 09:14:45 2018 - [info] Reading application default configuration from /etc/mha/app.conf..Tue Apr 24 09:14:45 2018 - [info] Reading server configuration from /etc/mha/app.conf..Tue Apr 24 09:14:45 2018 - [info] MHA::MasterMonitor version 0.56.Tue Apr 24 09:14:45 2018 - [info] GTID failover mode = 1Tue Apr 24 09:14:45 2018 - [info] Dead Servers:Tue Apr 24 09:14:45 2018 - [info] Alive Servers:Tue Apr 24 09:14:45 2018 - [info]   172.25.40.1(172.25.40.1:3306)Tue Apr 24 09:14:45 2018 - [info]   172.25.40.2(172.25.40.2:3306)Tue Apr 24 09:14:45 2018 - [info]   172.25.40.3(172.25.40.3:3306)Tue Apr 24 09:14:45 2018 - [info] Alive Slaves:Tue Apr 24 09:14:45 2018 - [info]   172.25.40.2(172.25.40.2:3306)  Version=5.7.17-log (oldest major version between slaves) log-bin:enabledTue Apr 24 09:14:45 2018 - [info]     GTID ONTue Apr 24 09:14:45 2018 - [info]     Replicating from 172.25.40.1(172.25.40.1:3306)Tue Apr 24 09:14:45 2018 - [info]     Primary candidate for the new Master (candidate_master is set)Tue Apr 24 09:14:45 2018 - [info]   172.25.40.3(172.25.40.3:3306)  Version=5.7.17 (oldest major version between slaves) log-bin:disabledTue Apr 24 09:14:45 2018 - [info]     GTID ONTue Apr 24 09:14:45 2018 - [info]     Replicating from 172.25.40.1(172.25.40.1:3306)Tue Apr 24 09:14:45 2018 - [info]     Not candidate for the new Master (no_master is set)Tue Apr 24 09:14:45 2018 - [info] Current Alive Master: 172.25.40.1(172.25.40.1:3306)Tue Apr 24 09:14:45 2018 - [info] Checking slave configurations..Tue Apr 24 09:14:45 2018 - [info]  read_only=1 is not set on slave 172.25.40.2(172.25.40.2:3306).Tue Apr 24 09:14:45 2018 - [info]  read_only=1 is not set on slave 172.25.40.3(172.25.40.3:3306).Tue Apr 24 09:14:45 2018 - [warning]  log-bin is not set on slave 172.25.40.3(172.25.40.3:3306). This host cannot be a master.Tue Apr 24 09:14:45 2018 - [info] Checking replication filtering settings..Tue Apr 24 09:14:45 2018 - [info]  binlog_do_db= , binlog_ignore_db= Tue Apr 24 09:14:45 2018 - [info]  Replication filtering check ok.Tue Apr 24 09:14:46 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.Tue Apr 24 09:14:46 2018 - [info] Checking SSH publickey authentication settings on the current master..Tue Apr 24 09:14:46 2018 - [info] HealthCheck: SSH to 172.25.40.1 is reachable.Tue Apr 24 09:14:46 2018 - [info] 172.25.40.1(172.25.40.1:3306) (current master) +--172.25.40.2(172.25.40.2:3306) +--172.25.40.3(172.25.40.3:3306)Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.2..Tue Apr 24 09:14:46 2018 - [info]  ok.Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.3..Tue Apr 24 09:14:46 2018 - [info]  ok.Tue Apr 24 09:14:46 2018 - [warning] master_ip_failover_script is not defined.Tue Apr 24 09:14:46 2018 - [warning] shutdown_script is not defined.Tue Apr 24 09:14:46 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

配置 数据 用户 数据库 文件 故障 主机 密码 权限 同步 登陆 服务器 切换 服务 事件 二进制 差异 日至 模式 节点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术就业具体路径 数据库字符集合排列规则 网络安全防护的基本原则 广西北部湾软件开发公司 网络安全身份级别 数据库还原提示设备错误 更安全的远程连接服务器方式 生物信息学数据库技术有哪些 互联网科技带给我们的好处和坏处 网络安全手抄报小内容 黄冈机器人rpa软件开发 百东网络技术有限公司电话 网络安全法个人信息是指什么 网站服务器崩了需要维修吗 软件开发外包网站建设 热门云服务器代理加盟 战术小队有哪几个服务器 广东荔支网络技术公司 sql数据库视频教程下载 宿迁软件开发诚信服务 开放服务器 加固网络安全防护 河南分米网络技术有限公司 本地会话管理服务器登陆失败 崇明区智能化软件开发品质保障 mysql数据库增上改查 三级网络技术如何备考 网络技术公司培训课程 2018小学生网络安全知识 榆树智能网络技术诚信经营
0