当前位置: 首页 > news >正文

mysql读写分离(maxscale)

1. 环境架构

  • 需要三台服务器。
  • 192.168.2.10(master)
  • 192.168.2.20(slave)
  • 192.168.2.30(maxscale)

2. 部署mysql主从同步

  • mysql主从同步可以参考mysql主从同步

3. 部署maxscale服务

  • MaxScale中间件软件
  • 由MySQL兄弟公司MariaDB开发
  • 下载地址:
    https://downloads.mariadb.com/MaxScale/

3.1. 安装maxscale

##下载软件包
[root@localhost ~]# wget https://downloads.mariadb.com/MaxScale/2.1.2/yum/centos/7/x86_64/maxscale-2.1.2-1.centos.7.x86_64.rpm
## 安装软件
[root@localhost ~]# yum -y install maxscale-2.1.2-1.centos.7.x86_64.rpm

3.2. 修改配置文件

##备份配置文件
[root@localhost ~]# cp -r /etc/maxscale.cnf /etc/maxscale.cnf.bak
[root@localhost ~]# vim /etc/maxscale.cnf
[maxscale]
threads=auto     ----定义线程数,可以根据服务器性能填多少,或者选择auto,auto会根据本身服务器CPU核数来自动创建。
###下面内容定义mysql信息。
[server1]
type=server       --类型
address=192.168.2.10     ---ip地址
port=3306                ---端口号
protocol=MySQLBackend    ---协议[server2]
type=server
address=192.168.2.20
port=3306
protocol=MySQLBackend##定义代理服务器监视的服务器信息。
[MySQL Monitor]
type=monitor             ---类型为监视
module=mysqlmon          ---定义模块
servers=server1,server2    ----指定需要监视的服务器
user=maxscale                ---被监视的服务器用户名
passwd=1234               ---被监视的服务器密码
monitor_interval=10000    ---用户maxscalemon连接server1和server2的频率,单位是毫秒。
##注意这个用户名和密码等一下配置完需要在主库创建出来。
##下面是定义只读服务,而我这边是需要定义读写分离服务。
#[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave##定义读写分离服务信息。
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=myuser        路由用户
passwd=mypwd       路由密码
max_slave_connections=100%
##定义管理服务
[MaxAdmin Service]
type=service   类型
router=cli     访问方式为命令行
##这个是定义只读服务的注释掉
#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008##定义读写分离代理服务监听端口等信息
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
##定义管理服务器的监听端口等信息
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
prot=4016
socket=default

4. 创建授权用户

##在主库创建监控用户
mysql> grant replication slave,replication client on *.* to 'maxscale'@'%' identified by '1234';
##创建路由用户
mysql> grant select on mysql.* to 'maxscale1'@'%' identified by '1234';

5. 启动代理服务

##启动服务
[root@localhost ~]# maxscale -f /etc/maxscale.cnf
##查看进程是否存在
[root@localhost ~]# ps -C maxscalePID TTY          TIME CMD2359 ?        00:00:00 maxscale##查看代理服务端口号是否启动
[root@localhost ~]# netstat -ntlp | grep maxscale
tcp6       0      0 :::4016                 :::*                    LISTEN      2359/maxscale
tcp6       0      0 :::4006                 :::*                    LISTEN      2359/maxscale

6. 测试配置

6.1. 查看监控状态

管理用户密码默认的
[root@localhost ~]# maxadmin -uadmin -pmariadb -P4016
MaxScale> list servers     --显示监控列表
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.2.10    |  3306 |           0 | Master, Running
server2            | 192.168.2.20    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
##假如监控状态角色不对,看一下监控的授权用户是否和maxscale配置文件一致。

6.2. 验证写是否在主库查是否在从库

##在从库db1库t1表插入数据,这样主库和从库数据不一致
mysql> use db1;
mysql> create table t1(-> id int not null,name char(10) not null);
mysql> insert into t1 values('1','tom');
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
##在主库查看这个表信息。
mysql> use db1;
Database changed
mysql> show tables;
Empty set (0.00 sec)      ----可以看的出来主库没有表格
##在客户端登录代理服务器查看db1.t1;
[root@localhost ~]# mysql -h 192.168.2.30 -P 4006 -utom -p1234
mysql> select * from db1.t1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)
可以看的出来读是在从库提取的。
http://www.lryc.cn/news/10356.html

相关文章:

  • 第八章 - 数据分组( group by , having , select语句顺序)
  • Git(GitHub,Gitee 码云,GitLab)详细讲解
  • 策略模式(Strategy Pattern)
  • 《Qt6开发及实例》6-2 Qt6基础图形的绘制
  • LeetCode 382. 链表随机节点
  • iOS开发AppleDeveloper中给别人授权开发者权限后,对方一直显示不了我的开发账号team
  • FreeRTOS数据类型和编程规范
  • 【python知识】win10下如何用python将网页转成pdf文件
  • C语言常见关键字
  • 【MT7628】固件开发-SDK4320添加MT7612E WiFi驱动操作说明
  • 如何从手工测试进阶自动化测试?阿里10年测开经验分享...
  • C++复习笔记11
  • 【MT7628】固件开发-SDK4320添加MT7628 WiFi驱动操作说明
  • C#开发的OpenRA游戏加载界面的实现
  • 渲染农场优势是什么_云渲染农场怎么用?
  • SoapUI、Jmeter、Postman三种接口测试工具的比较分析
  • Python内置函数 — sort,sorted
  • mysql事务隔离级别
  • 【C++】string类(下)
  • Elasticsearch: Prefix queries - 前缀查询
  • GEE学习笔记 七十七:GEE学习方法简介
  • 20基于主从博弈的智能小区代理商定价策略及电动汽车充电管理MATLAB程序
  • 长按power键,点击重启按钮,系统重启流程一
  • 数据的TCP分段和IP分片
  • HTML中嵌入B站视频
  • Mars3D Studio 的使用方法
  • Flutter For Web实践
  • 【神级Python代码】作为技术xiao白如何制作一款超炫酷的黑客主题代码雨?牛逼就完了。(源码分享学习)
  • 供应链挑战迎刃而解!桑迪亚国家实验室使出“量子杀手锏”
  • java程序设计-ssm博客管理系统