美文网首页
atlas读写分离

atlas读写分离

作者: 慕知 | 来源:发表于2021-03-17 09:34 被阅读0次

    一,读写分离优势及原理

    优势:提升数据库性能,用于高并发场景;
    原理:基于主从复制的结构上,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询
    

    二、Atlas安装

    1,环境及安装

    环境:
    atlas   10.0.0.7
    db01    10.0.0.51   mysql主库
    db02    10.0.0.52   mysql从库
    
    
    [root@\ db02/tmp]# ll
    -rw-r--r-- 1 root root   5574363 2021-03-16 14:55 Atlas-sharding_1.0.1-el6.x86_64.rpm
    
    
    
    #rpm直接安装
    [root@\ db02/tmp]# yum install -y Atlas-sharding_1.0.1-el6.x86_64.rpm
    或
    [root@\ db02/tmp]# rpm -ivh  Atlas-sharding_1.0.1-el6.x86_64.rpm
    
    
    
    #安装完成后atlas的安装目录为/usr/local/mysql-proxy
    
    [root@\ db02/tmp]# cd /usr/local/mysql-proxy/
    [root@\ db02/usr/local/mysql-proxy]# ll
    drwxr-xr-x 2 root root  125 2021-03-16 15:10 bin
    drwxr-xr-x 2 root root   22 2021-03-16 15:10 conf
    drwxr-xr-x 2 root root 4096 2021-03-16 15:10 include
    drwxr-xr-x 4 root root 4096 2021-03-16 15:10 lib
    drwxr-xr-x 2 root root    6 2015-05-19 18:39 libexec
    drwxr-xr-x 2 root root   22 2021-03-16 15:10 log
    drwxr-xr-x 3 root root   17 2021-03-16 15:10 share
    
    

    2,授权Atlas管理账号

    mysql> grant all privileges  on *.* to atlas@'172.16.1.%' identified by 'atlas';
    Query OK, 0 rows affected (0.00 sec)
    
    # 两台数据服务器都需要
    
    

    3,修改test配置文件

    # 密码加密,下面的配置文件需要用到(atlas为数据库主从授权的密码)
    [root@\ db/usr/local/mysql-proxy]# ./bin/encrypt atlas
    KsWNCR6qyNk=
    
    
    
    
    
    
    [root@\ db]# vim /usr/local/mysql-proxy/conf/test.cnf
    [mysql-proxy]
    
    #带#号的为非必需的配置项目
    
    #管理接口的用户名
    admin-username = admin
    
    #管理接口的密码
    admin-password = admin
    
    #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
    proxy-backend-addresses = 172.16.1.51:3306
    
    
    #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
    proxy-read-only-backend-addresses = 172.16.1.52:3306@1
    ... ...
    
    
    #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
    pwds = atlas:KsWNCR6qyNk=
    
    ... ...
    
    #Atlas监听的工作接口IP和端口
    proxy-address = 0.0.0.0:1234
    
    #Atlas监听的管理接口IP和端口
    admin-address = 0.0.0.0:2345
    .. ....
    
    
    

    4,启动服务

    [root@db ~]# cd /usr/local/mysql-proxy/
    
    [root@\ db/usr/local/mysql-proxy]# ./bin/mysql-proxyd test start
    OK: MySQL-Proxy of test is started
    
    
    
    
    #查看进程及端口
    [root@\ db02/usr/local/mysql-proxy]# !ps
    ps -ef | grep proxy
    root      21390      1  0 20:30 ?        00:00:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
    root      21391  21390  0 20:30 ?        00:00:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
    root      21404  17221  0 20:32 pts/0    00:00:00 grep --color=auto proxy
    
    
    
    
    root@\ db/usr/local/mysql-proxy]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address            8074/php-fpm: maste
    tcp        0      0 0.0.0.0:2345            0.0.0.0:*               LISTEN      21391/mysql-proxy
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5889/rpcbind
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9056/nginx: master
    tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      9056/nginx: master
    tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      21391/mysql-proxy
    ... ...
    
    #可以看到1234 和2345端口都已开启
    
    
    
    
    #重启服务
    [root@\ db/usr/local/mysql-proxy]# ./bin/mysql-proxyd test restart
    
    #关闭服务
    [root@\ db/usr/local/mysql-proxy]# ./bin/mysql-proxyd test stop
    
    

    5,atlas管理界面

    [root@\ db]# mysql -h 172.16.1.7 -P2345 -uadmin -padmin
    
    #查看可查询的语句
    mysql> select * from help;
    +---------------------------------------+---------------------------------------------------------+
    | command                               | description                                             |
    +---------------------------------------+---------------------------------------------------------+
    | SELECT * FROM help                    | shows this help                                         |
    | SELECT * FROM backends                | lists the backends and their state                      |
    | SET OFFLINE $backend_id               | offline backend server, $backend_id is backend_ndx's id |
    | SET ONLINE $backend_id                | online backend server, ...                              |
    | ADD MASTER $backend                   | example: "add master 127.0.0.1:3306", ...               |
    | ADD SLAVE $backend                    | example: "add slave 127.0.0.1:3306", ...                |
    | ADD GMASTER $group_id $backend        | example: "add gmaster 1 127.0.0.1:3306", ...            |
    | ADD GSLAVE $group_id $backend         | example: "add gslave 1 127.0.0.1:3306", ...             |
    | REMOVE BACKEND $backend_id            | example: "remove backend 1", ...                        |
    | REMOVE GBACKEND $group_id $backend_id | example: "remove gbackend 1 1", ...                     |
    | SELECT * FROM clients                 | lists the clients                                       |
    | ADD CLIENT $client                    | example: "add client 192.168.1.2", ...                  |
    | REMOVE CLIENT $client                 | example: "remove client 192.168.1.2", ...               |
    | SELECT * FROM pwds                    | lists the pwds                                          |
    | ADD PWD $pwd                          | example: "add pwd user:raw_password", ...               |
    | ADD ENPWD $pwd                        | example: "add enpwd user:encrypted_password", ...       |
    | REMOVE PWD $pwd                       | example: "remove pwd user", ...                         |
    | SAVE CONFIG                           | save the backends to config file                        |
    | SELECT VERSION                        | display the version of Atlas                            |
    +---------------------------------------+---------------------------------------------------------+
    19 rows in set (0.00 sec)
    
    
    
    
    #查看主后段服务器的工作状态
    mysql> select * from backends;
    +----------+------------------+-------+------+-------------+
    | group_id | address          | state | type | backend_ndx |
    +----------+------------------+-------+------+-------------+
    |       -1 | 172.16.1.51:3306 | up    | rw   |           1 |
    |       -1 | 172.16.1.52:3306 | up    | ro   |           2 |
    +----------+------------------+-------+------+-------------+
    2 rows in set (0.00 sec)
    
    
    
    
    
    mysql> set offline 3;   #某库故障下线
    mysql> set online 3;   #某库新增上线(后面是主机号)
    
    

    6,atlas工作界面,读写测试

    1,从库设置延迟同步(主从复制同步较快,方便查看检测结果)
    mysql> stop slave;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> change master to master_delay=180;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.01 sec)
    
    
    
    
    
    2,atlas服务端登陆工作账号
    
    #查看查询所指向的server_id,是从库
    [root@\ db]# mysql -h 172.16.1.7 -P1234 -uatlas -patlas
    mysql> select @@server_id;
    +-------------+
    | @@server_id |
    +-------------+
    |           3 |
    +-------------+
    1 row in set (0.00 sec)
    
    
    
    #执行多次查询 
    mysql> select @@server_id;
    
    #执行多次写数据 
    mysql> insert into excel(id) values(34);
    
    
    
    
    
    
    
    
    
    3,在主库和从库查看查询及写数据的量变化
    mysql> show global status like '%insert%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | Com_insert             | 1     |
    | Com_insert_select      | 0     |
    | Delayed_insert_threads | 0     |
    | Innodb_rows_inserted   | 1     |
    | Qcache_inserts         | 0     |
    +------------------------+-------+
    5 rows in set (0.00 sec)
    
    
    
    
    总结:
    可以看到写数据会到主库172.16.1.51这台机器
    查询数据会到从库172.16.1.52这台机器
    
    

    相关文章

      网友评论

          本文标题:atlas读写分离

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