官方工具|MySQL Router 高可用原理与实战
点击上方“民工哥技术之路”选择“星标”
每天10点为你分享不一样的干货
之前也介绍MySQL高可用相关的文章:
Mysql route介绍
什么是mysql route
MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。
(1)Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。
(2)从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。
(3)主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。
读写分离原理
MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。
Mysql router用途
MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。
Mysql router主主故障自动切换的坑
Mysql router主主故障切换功能经过测试没有问题,但是有一个比较大的坑需要注意,具体是什么坑和解决方法在文章末尾,因为你之前要是没用接触过mysql router估计以我的表达能力,说了你就晕了。
mysql router实验架构介绍
实验环境架构图如下:
主机名 | IP地址 | 操作系统 | 功能说明 |
c7-node1.fblinux.com | 192.168.100.10 | Centos 7.2 64位 | Mysql route节点,读写分离,主主故障转移,从库故障自动下线 |
c7-node2.fblinux.com | 192.168.100.11 | Centos 7.2 64位 | Mysql主节点,提供读写,服务 |
c7-node3.fblinux.com | 192.168.100.12 | Centos 7.2 64位 | Mysql 从节点,提供读服务,如果主库down机,则此从库接管 |
c7-node4.fblinux.com | 192.168.100.13 | Centos 7.2 64位 | Mysql 从节点,提供读服务 |
安装部署mysql route
[root@c7-node1 ~]# tar xf mysql-router-2.0.3-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/
[root@c7-node1 ~]# cd /usr/local/
[root@c7-node1 local]# ln -s mysql-router-2.0.3-linux-glibc2.12-x86-64bit/ mysql-router
[root@c7-node1 local]# cd mysql-router
[root@c7-node1 mysql-router]# ll
total 0
drwxr-xr-x 2 7161 wheel 24 Feb 23 2016 bin
drwxr-xr-x 4 7161 wheel 36 Feb 23 2016 include
drwxr-xr-x 3 7161 wheel 150 Feb 23 2016 lib
drwxrwxr-x 2 7161 wheel 6 Feb 23 2016 run
drwxr-xr-x 3 7161 wheel 16 Feb 23 2016 share
[root@c7-node1 mysql-router]# mkdir /etc/mysql-route/
[root@c7-node1 mysql-router]# cp share/doc/mysqlrouter/sample_mysqlrouter.ini /etc/mysql-route/mysqlrouter.conf
[root@node1 ~]# cat /etc/mysql-route/mysqlrouter.conf
[DEFAULT]
# 日志存放目录
logging_folder = /data/log/mysql-route
# 插件存放目录
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
# 配置文件存放目录
config_folder = /etc/mysql-route
# 运行目录
runtime_folder = /var/run
[logger]
# 日志运行级别
level = INFO
# 主节点故障转移配置
[routing:basic_failover]
# 写节点地址
bind_address=192.168.100.10
# 写节点端口
bind_port = 7001
# 模式,读写
mode = read-write
# 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库
destinations = 192.168.100.11:3306,192.168.100.12:3306
# 从节点负载均衡配置
[routing:balancing]
# 绑定的IP地址
bind_address=192.168.100.10
# 监听的端口
bind_port = 7002
# 连接超时时间
connect_timeout = 3
# 最大连接数
max_connections = 1024
# 后端服务器地址
destinations = 192.168.100.12:3306,192.168.100.13:3306
# 模式:读还是写
mode = read-only
[keepalive]
interval = 60
[root@c7-node1 ~]# mkdir /data/log/mysql-route/
[root@c7-node1 ~]# chown mysql:mysql /data/log/mysql-route/
[root@c7-node1 ~]# cat /usr/lib/systemd/system/mysqlrouter.service
[Unit]
Description=MySQL Router
After=syslog.target
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@c7-node1 ~]# systemctl enable mysqlrouter
[root@c7-node1 ~]# systemctl start mysqlrouter
读写分离测试
MariaDB [(none)]> create database mysql_route;
MariaDB [(none)]> GRANT all ON mysql_route.* TO 'route'@'%' IDENTIFIED BY 'route';
MariaDB [(none)]> FLUSH PRIVILEGES;
从库down机测试
主主故障切换测试
注意:
1、备份从库不能打开read-only = on,不然切换之后写入会报错
2、第一台主库DOWN后,MySQL Router如何处理?
默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库,稍后如果第一台主库被修复后,那么默认仍然连接第二台为主库进行读写,不会自动切回到第一台主库。
3、如果第一台主数据库被修复后,又希望切换回第一台主库,怎么办?
可以重启MySQL Router
主主故障切换的坑
版权申明:作者:西门飞冰,一名90后it男,一直在北京工作,热爱运动,热爱冒险,热爱旅行。原文:http://www.fblinux.com/?p=922,由作者原创投稿,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意,谢谢。
关注 民工哥技术之路 微信公众号对话框回复关键字:1024 可以获取一份最新整理的技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程、Java实战项目、架构师综合教程、架构师实战项目、大数据、Docker容器、ELK Stack、机器学习、BAT面试精讲视频等。
点击【阅读原文】发现更多精彩内容~~
-----------------------
感谢你的阅读,下面是1个抽奖链接按钮,10月23日晚上23点开奖,一共88元,88个红包,感谢大家的支持。