MySQL读写分离-架构
MySQL读写分离-架构
简介
对于很多大型网站(pv值百万、千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作(新闻网站,插入一条新闻。查询操作),剩下的则是写(insert、update、delete,只要能对MySQL的数据造成更改的操作都叫写操作)操作。在使用负载均衡集群之后,可以很大程度的提升网站的整体性能,但是最终的数据处理的压力还是会落到MySQL数据库上,所有很有必要使用一些技术来提升MySQL的负载能力。(读写分离)
写专门交给写服务器处理(一般网站来说写是比较少的 读写比 4:1) 那么需要把读的任务分配多台服务器来完成的架构,就叫做读写分离。
实现方式
第一种:php程序上自己做逻辑判断,写php代码的时候,自己在程序上做逻辑判读写匹配。select,insert、update、delete做正则匹配,根据结果选择写服务器(主服务器)。如果是select操作则选择读服务器(从服务器器) mysql_connect('读写的区分')
第二种:MySQL- Proxy是实现"读写分离(Read/Write Splitting)"的一个软件(MySQL官方提供 ,也叫中间件),基本的原理是让主数据库处理写操作(insert、update、delete),而从数据库处理查询操作(select)。而数据库的一致性则通过主从复制来实现。所以说主从复制是读写分离的基础。
注意:MySQL-proxy它能实现读写语句的区分主要依靠的是内部一个lua脚本(能实现读写语句的判断)。
注意:如果只在主服务器(写服务器)上完成数据的写操作话;这个时候从服务器上没有执行写操作,是没有数据的。这个时候需要使用另外一个技术来实现主从服务器的数据一致性,这个技术叫做 主从复制技术。所以说主从复制是读写分离的基础。
也可以从官方下载。
下载地址:http://mirrors.sohu.com/mysql/MySQL-Proxy/

如何查看Linux下c库的版本?
注意通用二进制包需要c库版本一致,或者操作系统的c库比安装包高
# uname -a (unix name --all)
拓扑结构-架构图
一主两从
MySQL-proxy 负载均衡的软件(读写分离实现)
使用三台服务器搭建环境
- 一台主(写)服务器
- 192.168.57.92
- 这台主服务器还运行一个读写分离的软件 mysql-proxy
- 二台从(读)服务器
- 192.168.57.26
- 192.168.57.37

注意事项
- 防火墙的关闭

- selinux关闭

selinux永久关闭


- root账户必须有远程登录的权限

- MySQL的版本需要为 5.5 及以上

主从复制搭建
- 先配置主服务器
- 然后在配置从服务器
主服务操作
1. 主服务上的配置

- 在主服务上添加一个授权的账户,使得到时候从服务器可以使用该账号来完成数据的获取
# GRANT REPLICATION SLAVE ON *.* TO repuser@"192.168.%.%" IDENTIFIED BY 'admin88';
添加了一个 repuser的用户,密码为admin88 可以在 192.168.这个网段完成数据的复制。

查看

- 在主服务器上使用 show master status 查看主服务上现在正在使用的bin日志文件和记录的位置。(bin日志文件默认在MySQL的data目录)


从服务器的配置
- 修改从服务器的配置文件

- 使用在主服务器上的授权账号去连接主服务器,等待主服务器的数据的写入后,通知获取
# CHANGE MASTER TO
MASTER_HOST='192.168.57.92', MASTER_USER='repuser',
MASTER_PASSWORD='admin88',
MASTER_LOG_FILE='master-bin.000002',
MASTER_LOG_POS=107;
使用上面的语句连接主服务器后,使用
# show slave status\G

- 开启从服务器


命令:
- stop slave 可以停止 从服务器
- reset slave 清空从服务器的规则
- start slave 启动从服务器
- show slave status 查看从服务器状态
- show master status 查看主服务器状态
读写分离搭建
mac的前世今生
https://yunpan.cn/cY4gQ6sXWaTXd 访问密码 7a0b
下载mysql-proxy
http://mirrors.sohu.com/mysql/MySQL-Proxy/
- mysql-proxy上传

- 解压操作
#tar -zxvf mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz -C /usr/local/

- 为mysql-proxy创建一个符号链接

- 添加一个mysql-proxy用户
# useradd mysql-proxy

- 命令查看

6. 在下面路径创建一个admin.lua脚本

参照

7. 服务启动
#
./mysql-proxy --daemon --log-level=debug
--log-file=/var/log/mysql-proxy.log
--plugins='proxy'
读写分离脚本
--proxy-lua-script='/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua'
写服务器
--proxy-backend-addresses='192.168.57.92:3306'
读服务器
--proxy-read-only-backend-addresses='192.168.57.29:3306'
--proxy-read-only-backend-addresses='192.168.57.37:3306'
--plugins='admin'
--admin-username='admin'
--admin-password='admin88' --admin-lua-script='/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua'

相关参数

MySQL读写分离的监控
mysql-proxy提供一个端口用来监控MySQL读写的实现
使用的默认端口是 4041
1. 使用下面的命令连接mysql-proxy的4041端口
# mysql -uadmin -padmin88 -h 192.168.57.92 --port 4041

- 使用下面的命令查看读写服务器的状态
# select * from backends;

- 如果效果不明显,可以修改下面的文件参数


MySQL读写分离-架构的更多相关文章
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- [记录]MySQL读写分离(Atlas和MySQL-proxy)
MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...
- mysql读写分离 主从同步
MySQL主从复制与读写分离的实现 转载 2013年01月17日 18:20:12 MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy) ...
- mysql读写分离实战
一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...
- 使用Amoeba实现mysql读写分离机制
Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实 ...
- 分库分布的几件小事(五)MYSQL读写分离
1.为什么进行读写分离 这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少.所以针对这个情况,就是写一个主库,但是主库挂多个 ...
- mysql读写分离--一主多从,冗余存储
转载了https://blog.csdn.net/u013421629/article/details/78793966 https://blog.csdn.net/justdb/article/de ...
- mysql读写分离(PHP类)
mysql读写分离(PHP类) 博客分类: php mysql 自己实现了php的读写分离,并且不用修改程序 优点:实现了读写分离,不依赖服务器硬件配置,并且都是可以配置read服务器,无限扩展 ...
- amoeba实现MySQL读写分离
amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...
随机推荐
- canda 常用命令
1.获取版本 conda -V conda --version 2.获取帮助 conda -h conda --help 查看某一命令的帮助 conda install -h conda instal ...
- 关于ADB push 出现failed to copy 'D:\file.xtxt' to '/system/temp/' : Read-only file system 的报错信息解决办法
首先使用USB连接电脑与小机,然后安装adb相应的驱动,这是第一步,也是必须要做的. 进入doc系统后,敲入adb shell 可以进入linux命令行状态,说明adb可以使用了. 回到标题,我们现 ...
- Linq中Count()和Any()引发的效率问题
1.count和any 今天看了鹤冲天的文章:Linq:切勿使用 Count() > 0 来判断集合非空 有所收获,写下文章总结一下: 先看如下代码: static void Main(st ...
- Grid 布局管理器
Grid 布局管理器: Grid布局类wx.GridSizer,Grid布局以网格形式对子窗口或控件进行摆放,容器被分成大小相等的矩形,一个矩形中放置一个子窗口或控件. wx.GridSizer构造方 ...
- 【志银】#define lowbit(x) ((x)&(-x))原理详解
分析下列语句 #define lowbit(x) ((x)&(-x)) 可写成下列形式: int Lowbit(x) { return x&(-x); } 例1:x = 1 十进制转二 ...
- iOS CGContextRef 画一条直线,仅仅是画一条直线
今天周末休息,想好好补补课,无奈,弄了一上午,全部都是半边拉块的demo,有一种深深的挫败感. 中午睡醒一觉后,又看了一集“奔跑吧兄弟”,然后一下午时间就过去了. 仔细一想,应该是我的补课方法不对:要 ...
- Linq学习(一)
与LINQ有关的语言特性 1.隐式类型 var 2.匿名类型 如:var obj = new {Guid.Empty, myTitle = "匿名类型", myOtherParam ...
- AJAX提交表单后要清空,否则再次提交原来的数据会认为重复提交,提交失败。使用ajaxSubmit 函数需要引入jquery.form.min.js 文件
<script src="../../Scripts/js/jquery.form.min.js" type="text/javascript">& ...
- 【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa
题目描述 有n个点.m条边.和k种商品.第$i$个点可以以$B_{ij}$的价格买入商品$j$,并以$S_{ij}$的价格卖出.任何时候只能持有一个商品.求一个环,使得初始不携带商品时以某种交易方式走 ...
- tcp slowstart (TCP 慢启动)
tcp slowstart (TCP 慢启动) 慢启动定义 慢启动,是传输控制协议使用的一种拥塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段 ...