Linux企业运维——Mysql路由器+MHA高可用

一、mysql路由器配置

通过配置Mysql路由器来实现读写分离的效果,编写配置文件,能够实现读写调度到Mysql组复制集群中的不同后端
在这里插入图片描述

1、开启一个新的节点配置mysql路由器

[root@server4 ~]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm     安装相关rpm安装包
[root@server4 ~]# cd /etc/mysqlrouter/
[root@server4 mysqlrouter]# ls
mysqlrouter.conf
[root@server4 mysqlrouter]# vim mysqlrouter.conf      添加下面的内容

[routing:ro]			只读路由
bind_address = 0.0.0.0
bind_port = 7001
destinations = 172.25.73.1:3306,172.25.73.2:3306,172.25.73.3:3306
routing_strategy = round-robin 			算法调度    

[routing:rw]                            
bind_address = 0.0.0.0			读写路由
bind_port = 7002
destinations = 172.25.73.1:3306,172.25.73.2:3306,172.25.73.3:3306
routing_strategy = first-available

[root@server4 mysqlrouter]# systemctl start mysqlrouter.service       重启服务
[root@server4 mysqlrouter]# yum install -y net-tools
[root@server4 mysqlrouter]# netstat -antulp           查看相关端口是否开启
tcp        0      0 0.0.0.0:7001            0.0.0.0:*               LISTEN      3739/mysqlrouter    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3312/master         
tcp        0      0 0.0.0.0:7002            0.0.0.0:*               LISTEN      3739/mysqlrouter  

。

2、在server1创建远程登陆用户并授权

[root@server1 data]# mysql -pwestos
mysql> grant select on *.* to user1@'%' identified by 'westos';    创建user1并且授予select(查询)权限
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> grant all on test.* to user2@'%' identified by 'westos';    创建user2并且授予对test库具备all(完全)权限
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

在这里插入图片描述

3、路由器配置好之后在真机上以指定用户远程连接mysql指定路由端口,7001或7002

[root@westos_student73 ~]# mysql -h 172.25.73.4 -P 7001 -u user1 -pwestos     连接7001端口为只读
[root@westos_student73 ~]# mysql -h 172.25.73.4 -P 7002 -u user2 -pwestos     连接7002端口为可读写

yum -y install mariadb

在这里插入图片描述测试user2是否可以写入数据
在这里插入图片描述

4、使用lsof在mysql其它节点上测试连接情况

当某个节点mysql退出之后(不是关闭mysql服务),远程主机可通过路由端口连接到其他mysql主机上继续进行相关操作,因为配置文件中只读策略中定义的算法为round-robin
(轮询调度,一个一个轮着调度)

[root@server1 data]# yum install -y lsof
[root@server1 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  4172 mysql   30u  IPv6  32018      0t0  TCP *:mysql (LISTEN)
mysqld  4172 mysql   57u  IPv6  31449      0t0  TCP server1:mysql->server4:56634 (ESTABLISHED)

在这里插入图片描述
mysql路由具有后端健康检查功能 ,配置文件中设置rw端口连接调度算法为first-available,一但有节点挂掉就会调度到其它节点上;远程主机在登录数据库时实际上连接的是server4 mysql路由器,之后server4通过proxy来对后端server2、server3进行调度
在这里插入图片描述远程主机再次登入数据库发现已经调度到server2上
在这里插入图片描述

二、MHA高可用

MHA是一款开源的MySQL的高可用程序,他为MySQL主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的额问题。MHA还提供了master节点切换功能,即按需切master/slave节点
在这里插入图片描述

1、server1、server2、server3上的mysql,server4的mysqlrouter,都停掉准备做新的配置

[root@server1 ~]# /etc/init.d/mysqld stop
[root@server2 ~]# /etc/init.d/mysqld stop
[root@server3 ~]# /etc/init.d/mysqld stop
[root@server4 mysqlrouter]# systemctl stop mysqlrouter.service 

2、删除三个节点上的/usr/local/mysql/data中的文件、更改/etc/my.cnf文件,重新初始化数据库

[root@server1 data]# rm -rf *
[root@server1 data]# vim /etc/my.cnf
[mysqld]
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

[root@server1 data]# mysqld --initialize-insecure --user=mysql
[root@server1 data]# /etc/init.d/mysqld start

在这里插入图片描述

3、在server1上作slave授权、其它两个节点作change master设置,构建一个一主两从的设置

[root@server1 data]# mysql 
mysql> grant replication slave on *.* to repl@'%' identified by 'westos';

[root@server2 data]# mysql 
mysql> change master to  MASTER_HOST = '172.25.73.1', MASTER_USER = 'repl',  MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

[root@server3 data]# mysql 
mysql> change master to  MASTER_HOST = '172.25.73.1', MASTER_USER = 'repl',  MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

mysql> show slave status\G;

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

4、在sever4上安装需要安装的资源,并将node节点上所需要安装的资源复制到各个node上安装

[root@server4 ~]# ls
MHA-7  mysql-router-community-8.0.21-1.el7.x86_64.rpm
[root@server4 ~]# cd MHA-7/
[root@server4 MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz                   perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm     perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm          perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03-19.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@server4 MHA-7]# yum install *.rpm -y
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:

在三个节点上server1、2、3:
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

5、将MHA全局部署文件与另外一个单独文件整合到一起并编辑

[root@server4 ~]# cd MHA-7/
[root@server4 MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz                   perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm     perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm          perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03-19.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@server4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@server4 MHA-7]# cd mha4mysql-manager-0.58/
[root@server4 mha4mysql-manager-0.58]# ls
AUTHORS  bin  COPYING  debian  lib  Makefile.PL  MANIFEST  MANIFEST.SKIP  README  rpm  samples  t  tests
[root@server4 mha4mysql-manager-0.58]# cd samples/
[root@server4 samples]# ls
conf  scripts
[root@server4 samples]# cd conf/
[root@server4 conf]# ls
app1.cnf  masterha_default.cnf
[root@server4 conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app.cnf
[root@server4 masterha]# vim app.cnf
[server default]
user=root                   mysql主从节点的管理员用户密码,确保可以从远程登陆
password=westos
ssh_user=root
repl_user=repl              主从复制用户密码
repl_password=westos
master_binlog_dir= /usr/local/mysql/data      mysql主服务器的binlog目录
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.73.1 -s 172.25.73.2     修改
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha/app1           manager工作目录
manager_log=/etc/masterha/app1/manager.log     manager日志文件

[server1]
hostname=172.25.73.1      修改

[server2]
hostname=172.25.73.2      修改
candidate_master=1        指定failover时此slave会接管master,即使数据不是最新的

[server3]
hostname=172.25.73.3      修改
no_master=1               始终是slave

在这里插入图片描述

6、在server4与进行与其它三个节点的免密,并使用脚本进行检查

[root@server4 masterha]# ssh-keygen
[root@server4 ~]# ssh-copy-id server1              只做这一步使用脚本检测时会提示失败
[root@server4 ~]# ssh-copy-id server2
[root@server4 ~]# ssh-copy-id server3
[root@server4 ~]# scp -r .ssh/ server1:            复制私钥和公钥到三个节点上
[root@server4 ~]# scp -r .ssh/ server2:
[root@server4 ~]# scp -r .ssh/ server3:
[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/app.cnf        
当脚本检测返回内容如下所示时说明免密做成功
Tue Sep 14 20:15:43 2021 - [debug]  Connecting via SSH from root@172.25.73.1(172.25.73.1:22) to root@172.25.73.2(172.25.73.2:22)..
Tue Sep 14 20:15:44 2021 - [debug]   ok.
Tue Sep 14 20:15:44 2021 - [debug]  Connecting via SSH from root@172.25.73.1(172.25.73.1:22) to root@172.25.73.3(172.25.73.3:22)..
Tue Sep 14 20:15:44 2021 - [debug]   ok.
Tue Sep 14 20:15:44 2021 - [debug] 
Tue Sep 14 20:15:44 2021 - [debug]  Connecting via SSH from root@172.25.73.2(172.25.73.2:22) to root@172.25.73.1(172.25.73.1:22)..
Tue Sep 14 20:15:44 2021 - [debug]   ok.
Tue Sep 14 20:15:44 2021 - [debug]  Connecting via SSH from root@172.25.73.2(172.25.73.2:22) to root@172.25.73.3(172.25.73.3:22)..
Tue Sep 14 20:15:44 2021 - [debug]   ok.
Tue Sep 14 20:15:45 2021 - [debug] 
Tue Sep 14 20:15:44 2021 - [debug]  Connecting via SSH from root@172.25.73.3(172.25.73.3:22) to root@172.25.73.1(172.25.73.1:22)..
Tue Sep 14 20:15:45 2021 - [debug]   ok.
Tue Sep 14 20:15:45 2021 - [debug]  Connecting via SSH from root@172.25.73.3(172.25.73.3:22) to root@172.25.73.2(172.25.73.2:22)..
Tue Sep 14 20:15:45 2021 - [debug]   ok.

在这里插入图片描述

7、在server1的mysql对远程管理员登陆数据库授权

[root@server1 ~]# mysql
mysql> grant all on *.* to root@'%' identified by 'westos';
mysql> flush privileges;

在这里插入图片描述

8、在server4中用脚本进行检查

[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/app.cnf     检查MySQL复制状况

在这里插入图片描述

显示ok即可!到此MHA的部署已经完成

三、MHA的故障切换过程

1、手动切换

server1和server2均为存活状态

[root@server4 ~]# 
masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.73.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000        切换master为server2

在这里插入图片描述在server1、server3查看,master切换为server2

mysql> show slave status\G;

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿王不想秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值