文章目录

  • 概述
    • 试验目的
    • 试验环境
    • 试验拓扑图
    • 试验背景
  • 准备环境
    • 安装操作系统
    • 安装MySQL
    • 配置MySQL的主从复制
  • 下载安装
    • 下载
    • 安装
  • 配置maxscale
    • 准备账号
    • 修改maxscale配置文件
  • 启动maxscale
    • 启停控制
    • 查看监听端口是否启动
  • 测试
    • 通过代理端口连接数据库
    • 基本测试
    • 插入数据
    • 关闭slave的同步,再次通过代理插入数据
    • 停止slave的mysql服务,再次通过代理插入数据
    • 停止master的mysql服务
  • 结论
  • 附件
    • maxscale.cnf文件的默认内容
  • 参考文献

概述

试验目的

验证、测试使用MaxScale实现MySQL的读写分离

试验环境

准备两台服务器,分别安装好操作系统和数据库,数据库的版本要一样。

环境项目 环境配置 备注
server1 Windows 10家庭版,物理机 ip: 192.168.229.1,master
server2 Ubuntu 20.04.2 LTS 服务器版,虚拟机 ip: 192.168.229.129,slave
maxscale server Ubuntu 20.04.2 LTS 桌面版,虚拟机 ip: 192.168.229.128,安装maxscale
MySQL 8.0.25 server1 和server2 必须先配置完成主从或者主主复制(此实验环境配置的是主从复制)。 配置方法请参考《Linux系统下使用MySql双机热备功能》 《Windows配置MySQL双机热备》
MaxScale 2.5.13-GA MaxScale 是官方提供的 MySQL 的兄弟 MariaDB 数据库提供的中间件产品可以实现负载平衡, 读写分离

试验拓扑图

用server1模拟客户端,maxscale也可以安装于某一个server上。

试验背景

在项目中曾经使用nginx配置过 server1和server2中MySQL的负载均衡(server1和server2中配置了MySQL的主主复制),但在使用中如果项目应用程序是多线程的,会存在同一个应用程序同时写server1和server2的现象(虽然nginx开启了iphash)。这种情况就会存在两个server同时使用同一个表中的同一个id序号的概率,导致数据因id重复而丢失。因此启用读写分离很有必要。
此前试验了mysql官方出品的mysql-proxy,虽然可以实现功能(参见《使用mysql-proxy实现mysql的读写分离》),但现在 mysql 官方已经不再对 mysql-proxy 提供更新,也不推荐使用到生产系统上。mysql官方推出的替代 mysql-proxy 的产品 mysql-router 对读写分离的支持又需要两个端口,一个端口写,一个端口读,这就要更改应用程序进行支持。因此找到了 MaxScale 进行测试。 MaxScale是Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟

准备环境

安装操作系统

分别在两台服务器上安装操作系统,本文略。请参考《华为服务器安装Ubuntu 20.04系统并实现向日葵远程桌面》

安装MySQL

分别在两台服务器上安装MySQL,本文略。

配置MySQL的主从复制

如果单纯完成本文的试验,MySQL数据库配置主从复制即可。为了实现后续的高可用性,本文实际配置的是主主复制,配置详情请参考《Linux系统下使用MySql双机热备功能》

下载安装

下载

下载地址:https://mariadb.com/downloads/#mariadb_platform-mariadb_maxscale

安装

直接双击安装即可。

配置maxscale

准备账号

  1. 在master库创建监控用户
CREATE USER `maxmon`@`%` IDENTIFIED WITH mysql_native_password BY '123456';GRANT Replication Client, Replication Slave ON *.* TO `maxmon`@`%`;
  1. 在master库创建路由用户
CREATE USER `maxrou`@`%` IDENTIFIED WITH mysql_native_password BY '123456';GRANT Select ON `mysql`.* TO `maxrou`@`%`;GRANT Show Databases ON *.* TO `maxrou`@`%`;

修改maxscale配置文件

配置文件的存储路径为:/etc/maxscale.cnf
编辑配置文件:

sudo vim /etc/maxscale.cnf
  1. 修改[server*]部分
    找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口,修改protocol为MySQLBackend。
    复制黏贴[server1] 的整块儿内容,改为 [server2],同样修改其中的 address 和 port,指向 slave。
    如果有更多mysql的服务器,就再多复制几个,每个服务器一个[server*]

  2. 修改[MariaDB-Monitor]部分
    找到 [MariaDB-Monitor] 部分,修改为[MySQL-Monitor],
    修改module的值为mysqlmon,
    修改servers 的值为 server1,server2,
    修改 user 和 passwd 为之前创建的监控用户的信息(maxmon,123456)

  3. 修改[Read-Write Service] 部分
    找到 [Read-Write Service] 部分,修改 servers 的值为 server1,server2,
    修改 user 和 passwd 为之前创建的路由用户的信息(maxrou,123456)

  4. 修改[Read-Write-Listener]部分
    找到[Read-Write-Listener]部分,修改 protocol 的值为MySQLClient,
    修改 port 的值为项目实际端口,此端口即为外部客户端访问数据库集群的端口,默认值为4006。

  5. 删除或者屏蔽其他不需要的部分
    将[Read-Only-Service]部分、[Read-Only-Listener]部分等不需要的部分全部屏蔽或者删除。

  6. 配置完成,保存并退出编辑器

启动maxscale

启停控制

# 服务启动、停止、查看状态、重启命令
sudo service maxscale start | stop | status | restart

查看监听端口是否启动

netstat -ntelp | grep 4006

测试

通过代理端口连接数据库

在客户机上连接数据库:

mysql -uadmin -h192.168.229.128 -P4006 -p

连接成功:

基本测试

mysql> Select @@hostname;
mysql> start transaction;
mysql> Select @@hostname;
mysql> rollback;
mysql> Select @@hostname;

插入数据

Port 4006:

mysql> USE mytest;
mysql> INSERT INTO tb1 (value) values ('a');

在代理端口和两个server中都能查询的数据:

关闭slave的同步,再次通过代理插入数据

slave:

mysql > stop slave;

Port 4006:

mysql> INSERT INTO tb1 (value) values ('b');

结果正确:通过代理能插入,能查询到数据,master能查询到数据,slave不能查询到数据。

恢复slave的同步:

start slave;
# 稍等一会儿再查询
select * from tb1;

可以正确查询到数据:

停止slave的mysql服务,再次通过代理插入数据

slave:

sudo service mysql stop

Port 4006:

mysql> INSERT INTO tb1 (value) values ('c');

结果正确:通过代理能插入,能查询到数据,master能查询到数据,slave不能连接到服务。

重启slave的服务后,再次查询,结果正常:

停止master的mysql服务

master:

net stop mysql


通过代理端口Port 4006查询时,发现连接已经中断:

通过maxscale代理数据库集群时,master服务不可中断。
为了确保master宕机时服务不中断,需要再增加一层高可用性保障。
恢复master的服务后,代理端口自动恢复:

结论

MaxScale可以实现读写分离,从机离线不影响集群的使用。但是master主机离线会造成MaxScale服务的不可用,因此需要再加一层高可用性保障,防止MaxScale和Master的单点故障。

附件

maxscale.cnf文件的默认内容

# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25/# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/[maxscale]
threads=auto# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#[server1]
type=server
address=127.0.0.1
port=3306
protocol=MariaDBBackend# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/maxscale-25-monitors/[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1
user=myuser
password=mypwd
monitor_interval=2000# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
## ReadConnRoute documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25-readconnroute/[Read-Only-Service]
type=service
router=readconnroute
servers=server1
user=myuser
password=mypwd
router_options=slave# ReadWriteSplit documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25-readwritesplit/[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=myuser
password=mypwd# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006

参考文献

轻松实现MySQL读写分离
配置maxscale中间件实现MySQL读写分离
Mysql - 读写分离与读负载均衡之Maxscale

使用MaxScale实现mysql读写分离相关推荐

  1. Maxscale实现MySQL读写分离

    作用:实现数据访问读写分离,减轻单台服务器的兵法访问压力 前提:实现主从同步 原理: MySQL读写分离是指,作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是 ...

  2. maxscale mysql5.7_Maxscale实现Mysql读写分离

    Maxscale实现Mysql读写分离: 注: 1.该工具只有一主,如主出了问题整体会有10s左右不可用(即使从会自动切为主). 2.读设置的2台实际只生效了1台. rpm -i maxscale-2 ...

  3. 配置MySQL读写分离架构,采用maxscale

    配置MySQL读写分离架构,采用maxscale 配置MySQL读写分离架构 采用maxscale 下载maxscale 配置MySQL主从架构 配置MySQL主服务器 配置MySQL从服务器 配置m ...

  4. mysql读写分离 存储过程_基于maxscale的读写分离部署笔记

    使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可. 基于connect方式的不要使用.从库延迟他还会继续分发请求过去,暂时不 ...

  5. 基于MaxScale中间件的MySQL读写分离

    基于MaxScale中间件的MySQL读写分离 概述 maxscale 基于keepalived的高可用,通过VIP提供服务 maxscale官网:https://mariadb.com/downlo ...

  6. mysql 读写分离缺点6_6\MySQL 主从同步 , MySQL 读写分离 , MySQL 性能调优

    6\MySQL 主从同步 , MySQL 读写分离 , MySQL 性能调优 day06 一,mysql 主从同步 二,数据读写分离 三,MySQL 优化 ++++++++++++++++++++++ ...

  7. proxy实现 mysql 读写分离

    实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:te ...

  8. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)

    当项目中数据库表越来越多,数据量也逐渐增多时,需要做数据库的安全和性能的优化.对于数据库的优化,可以选择使用MySQL读写分离实现. 1.MySQL主从同步 1.主从同步机制 1.1.主从同步介绍和优 ...

  9. asp.net mysql 读写分离_MySQL读写分离

    MySQL读写分离 1,为啥要读写分离? 系统到了高并发阶段,数据库一定要做的读写分离了,因为大部分的项目都是读多写少.所以针对这个情况,把写操作放一个主库,主库下挂多个从库处理读操作,这样就可以支撑 ...

  10. mysql读写分离,主从配置

    2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...

最新文章

  1. WPF判断两个时间大小避免误差
  2. Ubuntu14.04重启网卡不生效
  3. 关于能否命令Scrum团队的对话
  4. Python(字符串,列表,元组,字典)
  5. 技术实践 | 聊聊网易云信的信令网络库实践
  6. java旺季机票_java-第四章-机票价格受到淡季旺季的影响,编写的小程序
  7. 给C盘减减肥,让你电脑飞一般速度!
  8. 英特尔宣布推出锐炫 A 系列移动端独立显卡
  9. 奈飞文化手册_《奈飞文化手册》速阅提炼分享4
  10. linux串口配置详解
  11. python的缩进规则是什么意思_Python编程思想(2):Python主要特性、命名规则与代码缩进...
  12. 移动应用开发 jQuery Mobile
  13. Gen系列服务器,Hpe Microserver Gen10 Plus开箱
  14. 华为系列服务器账号密码,常用设备管理口默认用户名密码汇总
  15. 虚拟机Hyper-V的安装以及使用教程
  16. 甘肃省国家沙漠公园功能区划及分布
  17. 微信开发者工具配置连接Gitee
  18. Nio实现高性能聊天系统
  19. 透析阿里3亿元投资的如涵:孵化张大奕,吸金但苦逼
  20. Windows平台C/C++实现对键盘或鼠标驱动设备的禁用、启动、卸载以及刷新设备管理列表功能

热门文章

  1. 2021年社招字节跳动测试开发工程师面试题
  2. 单元格里的字怎样居中_word表格中文字如何设置左右和上下居中(水平和垂直居中)...
  3. 微信小程序 share-element page-container 组件的使用
  4. UiPath调用超级鹰识别验证码
  5. PPT制作手机手指滑动效果
  6. 自学按键精灵写脚本,非常有用的一个函数
  7. windows10 快捷代码
  8. python绘图颜色代码_Python绘图的颜色设置
  9. AndroidStudio中的NDK开发初探
  10. MySQL的安装(完整版)