MySQL 数据读写分离
[TOC]
读写分离概述
什么是读写分离
把客户端访问数据库服务时的查询请求和写数据的请求给不同的数据库服务器处理.
分类 | 命令 |
---|---|
读 | seelct |
写 | insert update delete |
方法
-
人肉分离
代码层面通过程序分离读写,需要修改代码.繁琐复杂
-
代理分离
通过添加中间件代理层软件,自动实现区分读写操作.不需要修改代码.
读写分离的原理
多台 MySQL 服务器
- 分别提供读,写服务,均衡流量
- 通过主从复制保持数据一致性
由MySQL代理面向客户端
- 收到 SQL 写请求时,交给服务器A处理
- 收到 SQL 读请求时,交给服务器B处理
- 具体区分策略 由服务设置
MySQL 读写分离架构部署
1549908190387配置主从同步
把192.168.1.103配置为192.168.1.102的从库
部署代理
MySQL中间件
和mysql搭配使用实现某种目的的统称为中间件
常用 mysql 中间件
- MaxScale
- ProxySQL
- Mycat
- Mysql-Proxy
安装代理软件包
yum install maxscale-2.3.3-1.centos.7.x86_64.rpm
修改配置文件
并根据配置文件的设置在数据库服务器上添加对应的授权用户.
vim /etc/maxscale.cnf
[maxscale]
threads=auto
#主机配
[server1]
type=server
address=192.168.1.102
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.1.103
port=3306
protocol=MariaDBBackend
[MariaDB-Monitor]
type=monitor
module=mariadbmon
#监控主机列表
servers=server1, server2
#监控用用户
user=scalemon
password=123123
monitor_interval=2000
#[Read-Only-Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#password=mypwd
#router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1, server2
#路由用户
user=maxscale
password=123123
[MaxAdmin-Service]
type=service
router=cli
#[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 #读写分离服务的监听端口
[MaxAdmin-Listener]
type=listener
service=MaxAdmin-Service
protocol=maxscaled
#socket=default #默认4008管理端口
port=4009 #管理服务的监听端口
创建监控用户 scalemon
mysql> grant replication slave,replication client on *.* to scalemon@'%' identified by '123123';
创建路由用户 maxscale
mysql> grant select on mysql.* to maxscale@'%' identified by '123123';
代理上测试 scalemon 和 maxscale 用户能否脸上102,103
启动代理服务
systemctl start maxscale
maxscale --cofnig=/etc/maxscale.cnf
查看服务信息
ps -ef|grep maxscale
maxscale 5501 1 0 23:01 ? 00:00:00 /usr/bin/maxscale
[root@test1 ~]# netstat -nltpu|grep maxscale
tcp 0 0 127.0.0.1:8989 0.0.0.0:* LISTEN 5501/maxscale
tcp6 0 0 :::4009 :::* LISTEN 5501/maxscale
tcp6 0 0 :::4006 :::* LISTEN 5501/maxscale
测试配置
- 代理服务器上连接管理服务查看监控信息
scalemon 监控用户,连接后端 MySQL 监视信息.
maxadmin -uadmin -pmariadb -P4009
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.102 | 3306 | 0 | Master, Running
server2 | 192.168.1.103 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
- 在客户端连接100主机,访问数据时能否实现数据读写分离.
mysql -h192.168.1.101 -ujim -p123qqq... -P4006 #客户端连接maxscale
mysql> select @@hostname; #查询的时候 显示在从库
+------------+
| @@hostname |
+------------+
| test3 |
+------------+
插入数据再去主库从库验证数据是否都存在,都有的话即写入时进入主库.完成读写分离.
网友评论