大家好,欢迎来到IT知识分享网。
目录
四台服务器关闭防火墙防护,连接所有会话101、102、103、104
在 manager 节点上复制相关的脚本到/usr/local/bin目录
完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址
测试ssh无密码认证,如果正常最后输出successfully就是运行成功
测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常
首次配置MHA的VIP地址需要手动配置(在mysql上)102主机
查看MHA状态,可以看到当前的master是Mysql1节点
观察MHA日志,如果自动切换成功,最后输出successfully字样
MHA高可用配置及故障切换
MHA定义
HMA(MasterHigh Availablity)是一套优秀的Mysql高可用环境下的故障切换和主从复制的软件
解决MySLQ单点的问题
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA是建在主从复制的基础上的;0-30秒自动完成故障切换是MHA的特性
MAH的组成
- MHA Manager(管理节点)
- NHA Node(数据节点)
MHA特点
- 自动故障奇幻过程种,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险
- 目前MHA支持一主多从架构,最少三台服务,即一主两从
MHA工作原理
从宕机崩溃的master 保存二进制日志事件(binlog events);
识别含有最新的更新 slave 日志(可以理解为主从复制数据最新的从服务器)
应用差异的中继日志(relay log)到其他的slave(将数据信息最全最新的从服务器的中继日志给其他的从服务器)
应用从master保存的二进制日志事件
提升一个 salve 为新的master
使其他的slave连接行的master 进行复制。
实验:搭建MySQL MHA
目的:解决故障切换、尽可能的保存数据,以及所有节点日志的一致性
实验思路:搭建MHA机构—->数据库安装—->一主两从—->MHA搭建
故障模拟:主服务器失效—->主服务器的备胎服务器成为主服务器—->原故障
配置四台虚拟机
服务器 |
操作系统 |
主机名/IP 地址 |
角色 |
服务器 |
CentOS7.9 |
192.168.10.101 |
管理节点,安装 manager 组件 |
服务器 |
CentOS7.9 |
192.168.10.102 |
Master 节点,安装 node 组件 |
服务器 |
CentOS7.9 |
192.168.10.103 |
Slave 节点,安装 node 组件 |
服务器 |
CentOS7.9 |
192.168.10.104 |
Slave 节点,安装 node 组件 |
案例拓扑图
案例实施
四台服务器关闭防火墙防护,连接所有会话101、102、103、104
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# vim /etc/sysconfig/selinux SELINUX=disabled
设置host文件
修改每个节点的hosts文件
[root@localhost ~]# vim /etc/hosts 192.168.10.101 MHA-manager 192.168.10.102 Mysql1 192.168.10.103 Mysql2 192.168.10.104 Mysql3
安装MySQL数据库 连接会话102、103、104
[root@localhost ~]# yum -y install mariadb-server mysql
关闭掉101的同步
设置主库配置
[root@localhost ~]# vim /etc/my.cnf server-id=102 log-bin=master-bin binlog-format=MIXED relay-log-purge=0 log-slave-updates=true
当relay-log-purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay-log-purge=0时,旧的 relaylog则会被保留
从服务器配置
server-id=103 log-bin=master-bin binlog-format=MIXED relay-log-purge=0 log-slave-updates=true server-id=104 log-bin=master-bin binlog-format=MIXED relay-log-purge=0 log-slave-updates=true
relay-log-purge=0 不自动删除中继日志,以便宕机后恢复数据
log-slave-updates=true Slave可以是其他Slave的Master,从而扩散Master的更新
启动
[root@localhost ~]# systemctl start mariadb
修改登录密码
[root@localhost ~]# mysqladmin -uroot password 'pwd123';
在所有Mylsq节点上配置授权 在102上授权
[root@localhost ~]# mysql -uroot -ppwd123 MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by ''; MariaDB [(none)]> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager'; #创建以恶搞用户名为mha,密码为manager的用户允许该用户从以 192.168.10. 开头的IP地址段连接到MariaDB数据库,并且拥有对所有数据库和表的所有操作权限。 MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager'; MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager'; MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager'; 用主机名去进行连接 MariaDB [(none)]> flush privileges;
取消用户同步,单独针对一个节点去做操作
在mysql上查看mastar信息
MariaDB [(none)]> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000003 | 1346 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
同步103、104会话
在mysql2和mysql3设置slave配置主从环境
MariaDB [(none)]> change master to master_host='192.168.10.102',master_user='myslave',master_password='',master_log_file='master-bin.000003',master_log_pos=1346; # master_host='192.168.10.102' : 这是主服务器(master)的IP地址或主机名,从服务器将连接到该地址获取主服务器的更新数据。 master_user='myslave' : 这是连接到主服务器所使用的用户名。在这个例子中,从服务器将使用用户名 myslave 来连接到主服务器。 master_password='' : 这是连接到主服务器所使用的密码。在这个例子中,密码是 。 master_log_file='master-bin.000003' : 这是主服务器上当前的二进制日志文件名,从服务器将从这个日志文件开始读取日志信息。 master_log_pos=1346 : 这是主服务器上二进制日志文件的位置(偏移量),从服务器将从这个位置开始读取日志信息。 MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G
安装MHA软件
所有服务器上安装MHA依赖环境
同时托入四个主机,连接101、102、103、104会话
但我们这里用ftp的基础源去安装(快一点)
ftp的基础源 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo yum clean all 阿里的基础源 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum clean all
设置阿里的yum基础源都安装MHA依赖的环境
yum install -y perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker perl-CPAN
> perl-DBD-MySQL //perl针对于mysql数据库
> perl-Config-Tiny //从配置文件中提拿其中的值
> perl-Log-Dispatch //log-日志
> perl-Parallel-ForkManager //多线程管理
> perl-ExtUtils-CBuilder //扩展工具
> perl-ExtUtils-MakeMaker
> perl-CPAN //cpan perl中的数据库
在所有节点安装node组件
[root@localhost ~]# tar zxvf mha4mysql-node-0.57.tar.gz [root@localhost ~]# cd mha4mysql-node-0.57 [root@localhost mha4mysql-node-0.57]# perl Makefile.PL [root@localhost mha4mysql-node-0.57]# make && make install
node工具(这些工具通常由MHAManager的脚本触发,无需人为操作)
- save_binary_logs:保存和复制 master 的二进制日志。
- apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slave。
- filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)。
- purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)。
在 MHA-manager上安装manager组件
不用同步只在manager上
[root@localhost ~]# tar zxvf mha4mysql-manager-0.57.tar.gz [root@localhost ~]# cd mha4mysql-manager-0.57 [root@localhost mha4mysql-manager-0.57]# perl Makefile.PL [root@localhost mha4mysql-manager-0.57]# make && make install
manager工具
- masterha_check_ssh:检查 MHA 的 SSH 配置状况。
- masterha_check_repl:检查 MySQL 复制状况。第12 页 共 31 页
- masterha_manger:启动 MHA
- masterha_check_status:检测当前 MHA 运行状态。
- masterha_master_monitor:检测 master 是否宕机。
- masterha_master_switch:控制故障转移(自动或者手动)。
- masterha_conf_host:添加或删除配置的 server 信息。
配置无密码认证
实现无密码认证方式,一种是账号密码,一种是密钥对
生成密钥对,取消同步功能
在 manager 上配置到所有节点的无密码认证
[root@localhost ~]# ssh-keygen -t rsa ssh-copy-id192.168.10.102 ssh-copy-id192.168.10.103 ssh-copy-id192.168.10.104 yes 密码就是你root用户的密码(aptech)
在 Mysql1 上配置到数据库节点的无密码认证
[root@localhost ~]# ssh-keygen -t rsa ssh-copy-id192.168.10.103 ssh-copy-id192.168.10.104
在 Mysql2 上配置到数据库节点的无密码认证
[root@localhost ~]# ssh-keygen -t rsa ssh-copy-id192.168.10.102 ssh-copy-id192.168.10.104
在 Mysql3 上配置到数据库节点的无密码认证
[root@localhost ~]# ssh-keygen -t rsa ssh-copy-id192.168.10.102 ssh-copy-id192.168.10.103
配置MHA
在 manager 节点上复制相关的脚本到/usr/local/bin目录
cd/mha4mysql-manager-0.57/samples [root@localhost samples]# cd scripts/ [root@localhost scripts]# ls master_ip_failover master_ip_online_change power_manager send_report [root@localhost scripts]# cp * /usr/local/bin/ [root@localhost scripts]# cd /usr/local/bin/
脚本具体作用
- master_ip_failover:自动切换时 VIP 管理的脚本
- master_ip_online_change:在线切换时 vip 的管理
- power_manager:故障发生后关闭主机的脚本
- send_report:因故障切换后发送报警的脚本
完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址
复制master_ip_failover脚本到/usr/local/bin目录,这里使用脚本管理VIP
[root@localhost bin]# rm -rf master_ip_failover #删除该文件 [root@localhost bin]# chmod +x master_ip_failover 给该文件添加执行权 [root@localhost bin]# cd [root@localhost ~]# cd /etc/ [root@localhost etc]# mkdir masterha [root@localhost ~]# cd mha4mysql-manager-0.57 [root@localhost mha4mysql-manager-0.57]# cd samples/ [root@localhost samples]# ls conf scripts [root@localhost samples]# cd conf/ [root@localhost conf]# ls app1.cnf masterha_default.cnf [root@localhost conf]# cp app1.cnf /etc/masterha/ [root@localhost conf]# vim /etc/masterha/app1.cnf [server default] manager_workdir=/var/log/masterha/app1 manager_log=/var/log/masterha/app1/manager.log master_binlog_dir=/usr/local/mysql/data #master_binlog_dir=/var/lib/mysql master_ip_failover_script= /usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change user=mha password=manager ping_interval=1 remote_workdir=/tmp repl_user=myslave repl_password= secondary_check_script= /usr/local/bin/masterha_secondary_check -s192.168.10.103 -s 192.168.10.104 shutdown_script="" ssh_user=root [server1] hostname=192.168.10.102 port=3306 [server2] hostname=192.168.10.103 port=3306 candidate_master=1 check_repl_delay=0 [server3] hostname=192.168.10.104 port=3306 [root@localhost conf]# mkdir -p /var/log/masterha/app1 #创建这个目录 [root@localhost conf]# vim /etc/masterha/app1.cnf 注释master_binlog_dir=/usr/local/mysql/data 使用master_binlog_dir=/var/lib/mysql确认路径位置
测试ssh无密码认证,如果正常最后输出successfully就是运行成功
[root@localhost ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常
[root@localhost ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf MySQL Replication Health is OK.
首次配置MHA的VIP地址需要手动配置(在mysql上)102主机
[root@localhost ~]# ifconfig ens33:1 192.168.10.200 ifconfig #查看和配置网络接口
启动HMA(在mha-manager主机上)101主机
[root@localhost ~]# mkdir -p /var/log/masterha/app1 [root@localhost ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null>/var/log/masterha/app1/manager.log 2>&1 & [1] 14002
查看MHA状态,可以看到当前的master是Mysql1节点
[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
查看MHA日志
[root@localhost ~]# cat /var/log/masterha/app1/manager.log
模拟master故障
用客户端链接群集 105主机
yum -y install mysql [root@localhost ~]# mysql -umha -pmanager -h 192.168.10.200
关闭当前的master 102
[root@localhost ~]# systemctl stop mariadb
观察MHA日志,如果自动切换成功,最后输出successfully字样
[root@localhost ~]# tailf /var/log/masterha/app1/manager.log
在mysql2上查看状态
mysql> show masterstatus;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156754.html