标签:sql_mod mask mysql mha llb online Owner log access 简介
MHA (Master Hight Availability) 是目前在Mysql高可用方面一个相对成熟的解决方案,也是在Mysql高可用环境下故障切换和主从提升的常用软件。在Mysql 故障切换过程中,MHA 能极短时间内自动完成数据库的故障切换操作。
MHA软件由两部分组成:MHA manager(管理节点)和MHA node(数据节点)。MHA manager会定时探测集群中的master节点,当master出现故障时,它可以自动将有最新数据的slave提升为新的master,然后所有其他的slave指向新的master。
MHA软件由两部分组成:Manager工具包和Node工具包,MHA 安装完成后,服务器上会自动生成如下脚本。具体说明如下:
MHA Manager:
1. masterha_check_ssh:检查MHA的SSH配置状况
2. masterha_check_repl:检查MySQL的复制状况
3. masterha_manager:启动MHA
4. masterha_check_status:检测当前MHA运行状态
5. masterha_master_monitor:检测master是否宕机
6. masterha_master_switch:控制故障转移(自动或手动)
7. masterha_conf_host:添加或删除配置的server信息
8. masterha_stop:关闭MHA
MHA Node:
save_binary_logs:保存或复制master的二进制日志
apply_diff_relay_logs:识别差异的relay log并将差异的event应用到其它slave中
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs:消除中继日志(不会堵塞SQL线程)
另有切换告警的几个脚本需自定义:
1. master_ip_failover:管理VIP
2. master_ip_online_change:
3. masterha_secondary_check:当MHA manager检测到master不可用时,通过masterha_secondary_check脚本来进一步确认,减低误切的风险。
4. send_report:当发生故障切换时,可通过send_report脚本发送告警信息。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集中必须最少有3台数据服务器,一主二从,即一台充当master,一台充当备库,一台充当从库。
安装前环境准备:
IP |
端口 |
路径 |
mysql版本 |
mha角色 |
用途 |
需要安装软件 |
192.168.56.121 |
13306 |
/usr/local/ |
5.7.25 |
mha-node |
master主节点 (数据节点) |
mha4mysql-node-0.56-0.el6.noarch.rpm |
192.168.56.130 |
13306 |
/usr/local/ |
5.7.25 |
mha-node+mha-manager |
slave从库 (管理节点) |
mha4mysql-node-0.56-0.el6.noarch.rpm+mha4mysql-manager-0.56-0.el6.noarch |
192.168.56.122 |
13306 |
/usr/local/ |
5.7.25 |
mha-node |
slave从库 (数据节点) |
mha4mysql-node-0.56-0.el6.noarch.rpm |
下载mysql-5.7.25-linux-glibc2.12-x86_64.tar安装包上传服务器对应安装目录/usr/local
[root@hdp-01 ~]# groupadd mysql
[root@hdp-01 ~]# useradd -g mysql mysql
[root@hdp-01 /]# mkdir -pv /app/mysql_gtid/
[root@mysql opt]# cd /usr/local/
[root@mysql local]# tar -xvf mysql-5.7.25-linux-glibc2.12-x86_64.tar
mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
mysql-test-5.7.25-linux-glibc2.12-x86_64.tar.gz
[root@mysql local]# tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
解压缩后,建软链接
[root@mysql local]# ln -s mysql-5.7.25-linux-glibc2.12-x86_64 mysql
[root@mysql mysql]# chown mysql:mysql -R /usr/local/mysql
[root@mysql mysql]# chown mysql:mysql -R /app/mysql_gtid/
修改mysql配置文件,主节点配置文件
[root@mysql ~]# vi /etc/my.cnf
[root@mysql ~]# cat /etc/my.cnf
[client]
socket = /app/mysql_gtid/mysql.sock
[mysqld]
port=13306
character_set_server=utf8
basedir=/usr/local/mysql
datadir=/app/mysql_gtid
socket=/app/mysql_gtid/mysql.sock
log-error=/app/mysql_gtid/mysqld.log
pid-file=/app/mysql_gtid/mysqld.pid
lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = ‘+8:00‘
gtid_mode=ON
enforce-gtid-consistency=ON
binlog_format=row
log-bin=/app/mysql_gtid/mysql-bin
master-info-repository=TABLE
relay-log-info-repository=TABLE
server-id=1313306
从节点my.cnf配置文件:
[root@weblogic ~]# cat /etc/my.cnf
[client]
socket = /app/mysql_gtid/mysql.sock
[mysqld]
port=3306
character_set_server=utf8
basedir=/usr/local/mysql
datadir=/app/mysql_gtid
socket=/app/mysql_gtid/mysql.sock
log-error=/app/mysql_gtid/mysqld.log
pid-file=/app/mysql_gtid/mysqld.pid
lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = ‘+8:00‘
gtid_mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
skip-slave-start=1
binlog_format=row
log-bin=/app/mysql_gtid/mysql-bin
server-id=1303306
mysql初始化:
[root@mysql etc]# /usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/app/mysql_gtid --user=mysql --explicit_defaults_for_timestamp
密码:root@localhost: k5h%h9#15ffA
启动msyql:
[root@mysql support-files]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysql mysql]# /etc/init.d/mysqld start
Starting MySQL.Logging to ‘/app/mysql/mysql.err‘.
SUCCESS!
[root@mysql ~]# mysql -uroot -pk5h%h9#15ffA
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2)
[root@mysql ~]# find /app -name mysql.sock
/app/mysql/mysql.sock
建立软链接解决报错问题。
[root@mysql ~]# ln -s /app/mysql/mysql.sock /tmp/mysql.sock
[root@mysql ~]#
[root@mysql ~]# mysql -uroot -pk5h%h9#15ffA
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-log
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> set password=‘mysql123‘;
Query OK, 0 rows affected (0.01 sec)
mysql> alter user ‘root‘@‘localhost‘ password expire never;
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT REPLICATION SLAVE ON *.* to ‘mysync‘@‘%‘ identified by ‘Mq_12345!6‘;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>change master to master_host=‘192.168.56.121‘,master_user=‘mysync‘,master_password=‘Mq_12345!6‘,master_port=13306, master_auto_position=1;
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
通过slave的状态信息,可以看到GTID的值、Matser_UUID等信息,出现这两个yes。表示一主两从同步配置成功。
MHA集群中的各节点彼此之间均需要基于ssh互信互通,以实现远程控制及数据管理功能。
1)打开ssh配置文件,启用以下选项
RSAAuthentication yes #允许RSA认证
PubkeyAuthentication yes #允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys #公钥存放地址
PermitRootLogin yes #如果要以root身份ssh互信登陆
2)# 生成公钥并分发其他服务器
ssh-keygen -t rsa 连续回车
2)#将公钥添加到认证文件,并将认证文件整合在一个文件。
[root@pxc3 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#设置authorized_keys的访问权限:
[root@pxc3 ~]#chmod 600 ~/.ssh/authorized_keys
[root@pxc3 ~]# ssh 192.168.56.121 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
[root@pxc3 ~]# ssh 192.168.56.130 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
3)# 分发整合后的公钥文件到其它节点
scp ~/.ssh/authorized_keys 192.168.56.121:~/.ssh/
scp ~/.ssh/authorized_keys 192.168.56.130:~/.ssh/
[root@pxc3 ~]# scp ~/.ssh/authorized_keys 192.168.56.121:~/.ssh/
root@192.168.56.121‘s password:
authorized_keys 100% 1173 1.2KB/s 00:00
[root@pxc3 ~]# scp ~/.ssh/authorized_keys 192.168.56.130:~/.ssh/
root@192.168.56.130‘s password:
authorized_keys 100% 1173 1.2KB/s 00:00
[root@pxc3 ~]#
4)# 测试时,第一次,需要输入密码,之后就不需要输入密码了。
在122 pxc3 测试其他2个节点ssh 互信连通性
[root@pxc3 ~]# ssh 192.168.56.130
[root@pxc2 ~]# ssh 192.168.56.121
在121 pxc1 测试其他2个节点ssh 互信连通性
[root@pxc1 ~]# ssh 192.168.56.122
[root@pxc3 ~]# ssh 192.168.56.130
在130pxc2 测试其他2个节点ssh 互信连通性
[root@pxc2 ~]# ssh 192.168.56.121
[root@pxc1 ~]# ssh 192.168.56.122
以上验证说明ssh 互信免密登陆配置完成。
以下是部署MHA高可用的具体操作步骤:
安装最新的阿里云的EPEL源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@pxc2 ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
error: Failed dependencies:
perl(Config::Tiny) is needed by mha4mysql-manager-0.56-0.el6.noarch
perl(Log::Dispatch) is needed by mha4mysql-manager-0.56-0.el6.noarch
perl(Log::Dispatch::File) is needed by mha4mysql-manager-0.56-0.el6.noarch
perl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.56-0.el6.noarch
perl(Parallel::ForkManager) is needed by mha4mysql-manager-0.56-0.el6.noarch
perl(Time::HiRes) is needed by mha4mysql-manager-0.56-0.el6.noarch
#yum clean all
#yum update
yum -y install perl-Config-Tiny
yum -y install perl-Log-Dispatch
yum -y install perl-Parallel-ForkManager
yum -y install perl-Time-HiRes
如果不能访问外网的环境,需要分别下载对应操作系统所依赖的rpm包。
登录网址http://rpm.pbone.net/
下载perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm
和perl-Parallel-ForkManager-0.7.5-2.2.el6.rf.noarch.rpm、
perl-Time-HiRes-1.9724-1.el6.rfx.x86_64.rpm、perl-Config-Tiny-2.20-1.3.noarch.rpm等。
5.3 安装node节点
[root@pxc1 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
Preparing... ########################################### [100%]
1:mha4mysql-node ########################################### [100%]
[root@pxc2 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
Preparing... ########################################### [100%]
1:mha4mysql-node ########################################### [100%]
[root@pxc3 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
Preparing... ########################################### [100%]
1:mha4mysql-node ########################################### [100%]
[root@pxc3 ~]#
122、130节点同样执行授权建用户语句。
5.5 配置mha配置文件
[root@pxc2 conf]# vim mha.cnf
[server default]
user=mha
password=My_hA!0713
ping_interval=2
ssh_user=root
manager_workdir=/opt/mha/work/mha.log
manager_log=/opt/mha/log/mha.log
master_binlog_dir=/opt/mha/mha_binglog/
repl_user=mysync
repl_password=q123456
[server1]
hostname=pxc1
port=13306
[server2]
hostname=pxc2
port=13306
[server3]
hostname=pxc3
port=13306
在server default中的配置,是三台机器共同的配置。
5.6.2 检测当前主从同步状态
检测主从同步状态发现报错1045 Access ,mha用户登录失败所致的。应该是建用户mha有问题,更正如下:
依然有报错如下:
所有的从节点要有相同的复制规则,检查2个slave 节点my.cnf配置文件,配置文件修改成一致。还是有报错。
在所有数据节点上都创建软连接:
[root@pxc2 log]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
[root@pxc2 log]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
问题解决,主从同步状态检测成功。
[root@pxc2 log]# masterha_check_repl --conf=/opt/mha/conf/mha.cnf
5.7 启动mha服务
[root@pxc2 ~]# masterha_manager --conf=/opt/mha/conf/mha.cnf
Sun Jun 21 22:37:08 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Jun 21 22:37:08 2020 - [info] Reading application default configuration from /opt/mha/conf/mha.cnf..
Sun Jun 21 22:37:08 2020 - [info] Reading server configuration from /opt/mha/conf/mha.cnf..
mha监控识别到当前主节点是192.168.56.121 pxc1 节点。
当前主库pxc1(192.168.56.121) :
6.1 手工在线切换
在线切换步骤:
1. 关闭MHA监控
2、在线切换
masterha_master_switch --conf=/opt/mha/conf/mha.cnf --master_state=alive --new_master_host=192.168.56.122 --new_master_port=13306 --orig_master_is_new_slave --running_updates_limit=10000
orig_master_is_new_slave是将原master切换为新主的slave ;
running_updates_limit 默认为1s,即如果主从延迟时间(Seconds_Behind_Master),或master show processlist中dml操作大于1s,则不会执行切换。
注意此处的new_master_host 要使用主机名,不要使用IP地址。否则会报如下错误:
使用主机名继续切换:
masterha_master_switch --conf=/opt/mha/conf/mha.cnf --master_state=alive --new_master_host=pxc3 --new_master_port=13306 --orig_master_is_new_slave --running_updates_limit=10000
1、编辑自动切换perl脚本
2、修改mha配置文件
修改当前mha.conf文件,指定自动切换脚本路径。
3、在当前master节点上绑定vip
/sbin/ifconfig eth0:0 192.168.56.100 netmask 255.255.255.0 up
4、模拟主库宕机pxc1
5、查看vip漂移情况,查看tail -fn20 mha.log
Disabling the vip on old master pxc1(192.168.56.121),vip 在new master pxc2 上启用。
6、查看管理节点MHA切换日志
Master failover to pxc2(192.168.56.130)
7、查看mha自动切换后的主从同步关系
可以看到,192.168.56.130成为新的master,192.168.56.122也自动指向了这个新的master节点。
标签:sql_mod mask mysql mha llb online Owner log access 简介
原文地址:https://www.cnblogs.com/vzhangxk/p/13207342.html