赞
踩
目录
四台服务器关闭防火墙防护,连接所有会话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字样
HMA(MasterHigh Availablity)是一套优秀的Mysql高可用环境下的故障切换和主从复制的软件
解决MySLQ单点的问题
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA是建在主从复制的基础上的;0-30秒自动完成故障切换是MHA的特性
从宕机崩溃的master 保存二进制日志事件(binlog events);
识别含有最新的更新 slave 日志(可以理解为主从复制数据最新的从服务器)
应用差异的中继日志(relay log)到其他的slave(将数据信息最全最新的从服务器的中继日志给其他的从服务器)
应用从master保存的二进制日志事件
提升一个 salve 为新的master
使其他的slave连接行的master 进行复制。
目的:解决故障切换、尽可能的保存数据,以及所有节点日志的一致性
实验思路:搭建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 组件 |
- [root@localhost ~]# systemctl stop firewalld
- [root@localhost ~]# systemctl disable firewalld
- [root@localhost ~]# setenforce 0
- [root@localhost ~]# vim /etc/sysconfig/selinux
- SELINUX=disabled
修改每个节点的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
[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';
- [root@localhost ~]# mysql -uroot -ppwd123
- MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
- 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;
- 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会话
- MariaDB [(none)]> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=1346;
- #
- master_host='192.168.10.102'
- : 这是主服务器(master)的IP地址或主机名,从服务器将连接到该地址获取主服务器的更新数据。
- master_user='myslave'
- : 这是连接到主服务器所使用的用户名。在这个例子中,从服务器将使用用户名 myslave 来连接到主服务器。
- master_password='123456'
- : 这是连接到主服务器所使用的密码。在这个例子中,密码是 123456。
- master_log_file='master-bin.000003'
- : 这是主服务器上当前的二进制日志文件名,从服务器将从这个日志文件开始读取日志信息。
- master_log_pos=1346
- : 这是主服务器上二进制日志文件的位置(偏移量),从服务器将从这个位置开始读取日志信息。
-
- MariaDB [(none)]> start slave;
- MariaDB [(none)]> show slave status\G
所有服务器上安装MHA依赖环境
但我们这里用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 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中的数据库
- [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的脚本触发,无需人为操作)
不用同步只在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工具
实现无密码认证方式,一种是账号密码,一种是密钥对
生成密钥对,取消同步功能
- [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)
- [root@localhost ~]# ssh-keygen -t rsa
- ssh-copy-id192.168.10.103
- ssh-copy-id192.168.10.104
- [root@localhost ~]# ssh-keygen -t rsa
- ssh-copy-id192.168.10.102
- ssh-copy-id192.168.10.104
- [root@localhost ~]# ssh-keygen -t rsa
- ssh-copy-id192.168.10.102
- ssh-copy-id192.168.10.103
- 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脚本到/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=123456
- 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确认路径位置
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
[root@localhost ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
- [root@localhost ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf
-
- MySQL Replication Health is OK.
- [root@localhost ~]# ifconfig ens33:1 192.168.10.200
- ifconfig #查看和配置网络接口
- [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
[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
[root@localhost ~]# cat /var/log/masterha/app1/manager.log
- yum -y install mysql
- [root@localhost ~]# mysql -umha -pmanager -h 192.168.10.200
[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# tailf /var/log/masterha/app1/manager.log
mysql> show masterstatus;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。