MHA架构
启动顺序:44,46,47,45
ip | 主机名 | serve_id | 类型 | 环境 |
---|---|---|---|---|
192.168.242.45 | Admin | — | 监控mysql集群 | |
192.168.242.44 | Master | 44 | 写入(主) | mysql |
192.168.242.46 | Slave01 | 46 | 读取(Master故障转移候选) | mysql |
192.168.242.47 | Slave02 | 47 | 读取 | mysql |
时间同步
设置主机名
配置host文件(必须,后面配置需要主机名)
# 所有节点全部配置所有人的host
echo '192.168.242.45 Admin' >> /etc/hosts
echo '192.168.242.46 Slave01' >> /etc/hosts
echo '192.168.242.47 Slave02' >> /etc/hosts
echo '192.168.242.44 Master' >> /etc/hosts
配置互信
配置文件
master配置
vi /etc/my.cnf # 设置唯一节点id server-id=44 # 开启二进制日志 log-bin=master-log # 开启中继日志 relay-log=relay-log # 关闭名称解析 skip_name_resolve # 开启gtid gtid-mode=on # 强制gtid一致 enforce-gtid-consistency=true # 密码加密方式为原生方式 default_authentication_plugin=mysql_native_password
记得重启mysql
slave配置(两台slave配置仅server_id不同)
# 设置唯一节点id server-id=46 # 开启二进制日志 log-bin=master-log # 开启中继日志 relay-log=relay-log # 开启只读属性 read_only=ON # 取消自动清理二进制中继日志 relay_log_purge=0 # 关闭名称解析 skip_name_resolve # 使得更新的数据写入二进制日志中 log_slave_updates=1 # 开启gtid gtid-mode=on # 强制gtid一致 enforce-gtid-consistency=true # 密码加密方式为原生方式 default_authentication_plugin=mysql_native_password
查看三台机器是否开启gtid一致
主从同步
主库操作
# 创建复制账号,这个用户将用于设置主从复制。 create user repl@'%' identified with mysql_native_password by '123'; # 授予 repl 用户 replication slave 权限,使其能够从主服务器读取复制的二进制日志。 grant replication slave on *.* to repl@'%' with grant option; # 刷新权限 flush privileges; # 查看用户权限 select user,host,grant_priv,Super_priv,password_last_changed from mysql.user;
从库操作
change master to master_host='192.168.242.44', master_port=3306, master_user='repl', master_password='123', master_auto_position=1; # 启动slave start slave; ----------------------------------参数解读-------------------------------------- master_host='192.168.242.44': 指定主库的 IP 地址或主机名。这里是 192.168.242.44,即从库将连接到这个主库地址。 master_port=3306: 指定主库的端口号。默认情况下,MySQL 使用 3306 端口进行连接。 master_user='repl': 指定用于连接主库的 MySQL 用户名。repl 是一个之前创建的用户,并且该用户应该具有 REPLICATION SLAVE 权限,用于从库从主库读取复制数据。 master_password='123': 指定连接主库时使用的密码。该密码应与 repl 用户的密码一致。 master_auto_position=1: 启用基于 GTID(全局事务标识符)的复制模式。master_auto_position=1 表示 MySQL 会自动使用 GTID 来同步事务,而不需要手动指定 binlog 的文件和位置。这样,主库的每个事务都带有一个唯一的 GTID,MySQL 会自动保证从库同步到主库的最新事务。在 GTID 复制模式下,不需要像传统的基于位置的复制一样关心 binlog 的位置(log_file 和 log_pos),MySQL 会自动管理。
配置验证
主库验证
从库验证
show slave status \G; SELECT user, host, grant_priv, Super_priv, password_last_changed FROM mysql.user;
Master设置VIP
安装MHA
源码包安装
源码node地址:
https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58
源码manage地址:
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58
所有节点服务器都装node(manager依赖node运行)
# 即所有主从,不包含独立监控机,如果监控在主机,那么主机两个都装 # 安装编译需要的依赖 yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN # 解压MHA—node安装包 tar -zxf /home/hadoop/mha4mysql-node-0.58.tar.gz -C /usr/local/ # cd进安装目录 cd /usr/local/mha4mysql-node-0.58 # 编译安装 perl Makefile.PL make make install
manager安装
# 只有监控机安装 # 特别注意一定要看看安装是否有失败的,一定不能有失败的 yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Mail-Sender -y # 解压MHA-manager包 tar -zxf /home/hadoop/mha4mysql-manager-0.58.tar.gz -C /usr/local/ # 进入安装目录 cd /usr/local/mha4mysql-manager-0.58/ # 编译安装 perl Makefile.PL make make install
manager配置
vi /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failover my $vip='192.168.242.99/24'; #配置一个闲置网段(虚拟ip网段) my $key='1'; my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 192.168.242.99"; ————————————!!!注意—————————————— # 此文件中 FIXME_xxx; 需要注释,否则会报错
配置MHA(监控机)
# 创建MHA软件所需目录 mkdir -p /usr/local/mha mkdir -p /etc/mha # 由于脚本中并没有master_ip_failover脚本,启动时会报错,到mha4mysqlmanager-0.5X/samples/scripts下拷贝对应脚本到指定位置。 cd /usr/local/mha/scripts cp /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_* . vi /etc/mha/mha.cnf [server default] manager_workdir=/usr/local/mha manager_log=/usr/local/mha/manager_running.log master_ip_failover_script=/usr/local/mha/scripts/master_ip_failover master_ip_online_change_script=/usr/local/mha/scripts/master_ip_online_change ping_interval=1 # 此句Slave01,Slave02为从机主机名 secondary_check_script=/usr/local/bin/masterha_secondary_check -s Slave01 -s Slave02 --user=root --master_host=MHA-Master --master_ip=192.168.242.44 --master_port=3306 shutdown_script="" ssh_user=root //基于ssh的密钥认证 user=root //mha管理用户 password=123 //mha管理密码 repl_user=repl //数据库用户名(你主库创建的复制账号) repl_password=123 //数据库密码 [server1] hostname=192.168.242.44 port=3306 [server2] candidate_master=1 check_repl_delay=0 hostname=192.168.242.46 port=3306 [server3] hostname=192.168.242.47 port=3306
masterha_check_status --conf=/etc/mha/mha.cnf 1.检查SSH情况 [root@MHA-Monitor ~]# masterha_check_ssh --conf=/etc/mha/mha.cnf 2.检查复制情况 [root@MHA-Monitor ~]# masterha_check_repl --conf=/etc/mha/mha.cnf 3.检查MHA状态 [root@MHA-Monitor /]# masterha_check_status --conf=/etc/mha/mha.cnf 4.启动MHA Manager nohup masterha_manager --conf=/etc/mha/mha.cnf < /dev/null > /usr/local/mha/manager_start.log 2>&1 5.关闭MHA-manager(需要的时候再关闭) [root@MHA-MES-Monitor-ip134 ~]# masterha_stop --conf=/etc/mha/mha.cnf
故障模拟
①停掉192.168.242.44的mysql进程
②此时后台开始故障转移
④观察新的主节点
可以看到主节点成功故障转移
⑤查看从节点
可以看到从节点已经成功切换新的主节点进行服务