11 MySQL 读写分离

作者: Kokoronashi | 来源:发表于2019-02-12 03:53 被阅读32次

    MySQL 数据读写分离

    [TOC]

    读写分离概述

    什么是读写分离

    把客户端访问数据库服务时的查询请求和写数据的请求给不同的数据库服务器处理.

    分类 命令
    seelct
    insert update delete

    方法

    1. 人肉分离

      代码层面通过程序分离读写,需要修改代码.繁琐复杂

    2. 代理分离

      通过添加中间件代理层软件,自动实现区分读写操作.不需要修改代码.

    读写分离的原理

    多台 MySQL 服务器

    • 分别提供读,写服务,均衡流量
    • 通过主从复制保持数据一致性

    由MySQL代理面向客户端

    • 收到 SQL 写请求时,交给服务器A处理
    • 收到 SQL 读请求时,交给服务器B处理
    • 具体区分策略 由服务设置

    MySQL 读写分离架构部署

    1549908190387

    配置主从同步

    把192.168.1.103配置为192.168.1.102的从库

    部署代理

    MySQL中间件

    和mysql搭配使用实现某种目的的统称为中间件

    常用 mysql 中间件

    1. MaxScale
    2. ProxySQL
    3. Mycat
    4. Mysql-Proxy

    安装代理软件包

    maxscale RPM包下载

    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
    

    测试配置

    1. 代理服务器上连接管理服务查看监控信息

    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
    -------------------+-----------------+-------+-------------+--------------------
    
    
    1. 在客户端连接100主机,访问数据时能否实现数据读写分离.
    mysql -h192.168.1.101 -ujim -p123qqq... -P4006  #客户端连接maxscale
    mysql> select @@hostname;   #查询的时候 显示在从库
    +------------+
    | @@hostname |
    +------------+
    | test3      |
    +------------+
    
    插入数据再去主库从库验证数据是否都存在,都有的话即写入时进入主库.完成读写分离.
    

    相关文章

      网友评论

        本文标题:11 MySQL 读写分离

        本文链接:https://www.haomeiwen.com/subject/gnfheqtx.html