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 负载均衡的软件(读写分离实现)

 

使用三台服务器搭建环境

  1. 一台主(写)服务器
    1. 192.168.57.92
    2. 这台主服务器还运行一个读写分离的软件 mysql-proxy
  2. 二台从(读)服务器
    1. 192.168.57.26
    2. 192.168.57.37

     

    注意事项

  3. 防火墙的关闭

     

  4. selinux关闭

    selinux永久关闭

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

  6. MySQL的版本需要为 5.5 及以上

    主从复制搭建

  7. 先配置主服务器
  8. 然后在配置从服务器

     

    主服务操作

    1. 主服务上的配置

  9. 在主服务上添加一个授权的账户,使得到时候从服务器可以使用该账号来完成数据的获取

    # GRANT REPLICATION SLAVE ON *.* TO repuser@"192.168.%.%" IDENTIFIED BY 'admin88';

    添加了一个 repuser的用户,密码为admin88 可以在 192.168.这个网段完成数据的复制。

    查看

     

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

     

     

    从服务器的配置

  11. 修改从服务器的配置文件

  12. 使用在主服务器上的授权账号去连接主服务器,等待主服务器的数据的写入后,通知获取

    # 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

  13. 开启从服务器

    命令:

  14. stop slave 可以停止 从服务器
  15. reset slave 清空从服务器的规则
  16. start slave 启动从服务器
  17. show slave status 查看从服务器状态
  18. show master status 查看主服务器状态

     

     

    读写分离搭建

    mac的前世今生

    https://yunpan.cn/cY4gQ6sXWaTXd 访问密码 7a0b

     

    下载mysql-proxy

    http://mirrors.sohu.com/mysql/MySQL-Proxy/

     

  19. mysql-proxy上传

  20. 解压操作

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

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

     

  22. 添加一个mysql-proxy用户

    # useradd mysql-proxy

     

  23. 命令查看

     

    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

  24. 使用下面的命令查看读写服务器的状态

    # select * from backends;

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

     

     

MySQL读写分离-架构的更多相关文章

  1. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  2. [记录]MySQL读写分离(Atlas和MySQL-proxy)

    MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...

  3. mysql读写分离 主从同步

    MySQL主从复制与读写分离的实现 转载 2013年01月17日 18:20:12   MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy) ...

  4. mysql读写分离实战

    一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...

  5. 使用Amoeba实现mysql读写分离机制

    Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实 ...

  6. 分库分布的几件小事(五)MYSQL读写分离

    1.为什么进行读写分离 这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少.所以针对这个情况,就是写一个主库,但是主库挂多个 ...

  7. mysql读写分离--一主多从,冗余存储

    转载了https://blog.csdn.net/u013421629/article/details/78793966 https://blog.csdn.net/justdb/article/de ...

  8. mysql读写分离(PHP类)

    mysql读写分离(PHP类) 博客分类: php mysql   自己实现了php的读写分离,并且不用修改程序 优点:实现了读写分离,不依赖服务器硬件配置,并且都是可以配置read服务器,无限扩展 ...

  9. amoeba实现MySQL读写分离

    amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...

随机推荐

  1. mongoDB坑

    1 mongodb.cnf文件中有个选项为bind_id:127.0.0.1,如果是测试环境,需要远程访问的话,就先改成0.0.0.1 auth:如果只是学习的话,建议先改成false,否则后面会有各 ...

  2. selenium初识(一)

    Selenium是一个开源的便携式的自动化软件测试工具,用于测试web应用程序.有能力在不同浏览器和操作系统运行.它是一套工具,帮助我们有效地给予web应用程序的自动化. Selenium分为以下几个 ...

  3. django-settings里mysql连接配置

    DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dailyfresh', 'HOST': 'loca ...

  4. parameter localparam define的区别

    `define 语法格式 `define A 12 //注意不加:不能忘记" ` " 作用区域 在整个工程中均有效,因为它是可以跨模块的定义 parameter 和 localpa ...

  5. 设置EntityFramework中decimal类型数据精度问题(EF默认将只会保留到2为精度)

    原文:设置EntityFramework中decimal类型数据精度 EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度. e.g. .19990将会 ...

  6. Android M中 JNI的入门学习

    今年谷歌推出了Android 6.0,作为安卓开发人员,对其学习掌握肯定是必不可少的,今天小编和大家分享的就是Android 6.0中的 JNI相关知识,这是在一个安卓教程网上看到的内容,感觉很不错, ...

  7. 点对点协议(Point-to-Point Protocol)

    简介 点对点协议简称PPP协议,工作在数据链路层.设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机. 网桥和路由器之间简单连接的一种共通的解决方案. PPP协议的组成 建立 ...

  8. [AT2699]Flip and Rectangles

    题目大意:有一个$n\times m$的$01$矩阵,可以把任意行或列反转,问最大的全为一的子矩阵的面积 题解:有一个结论:若一个子矩形$S$中的任意一个$2\times 2$的子矩形都含有偶数个$1 ...

  9. BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治

    题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...

  10. linux系统——ld-linux.so.X查找和加载共享动态库的顺序

    ld-linux.so查找共享库的顺序: Glibc安装的库中有一个为ld-linux.so.X,其中X为一个数字,在不同的平台上名字也会不同.可以用ldd查看: #ldd /bin/cat linu ...