快速部署MySQL读写分离架构
(一)读写分离原理
1、只在主服务器上写,只在从服务器上读
2、主数据库处理事务性查询,从数据库处理select查询
3、数据库复制用于将事务性查询的变更同步到集群中的从数据库
读写分离原理示意图:
(二)读写分离环境
三台装有MySQL5.7版本的服务器,角色分配如下:
master:20.0.0.10
slave1:20.0.0.11
slave2:20.0.0.13
一台Amoeba代理服务器:20.0.0.12
(三)部署过程
1.在三台MySQL数据库中为amoeba授权
2.在amoeba服务器上安装JDK
3.部署amoeba代理
4.修改amoeba主配置文件
vi /usr/local/amoeba/conf/amoeba.xml
5.修改dbServers.xml 文件
vi /usr/local/amoeba/conf/dbServers.xml
6.启动amoeba服务器准备测试
7.验证
1)、在master新建库和表
mysql> create database test;
mysql> create table aaa(id int(2) not null primary key, name varchar(48), score char(48));
mysql> show tables;
±---------------+
| Tables_in_test |
±---------------+
| aaa |
±---------------+
1 row in set (0.00 sec)
2)、在两台从服务器上看是否有库及表生成
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
±-------------------+
5 rows in set (0.00 sec)
mysql> use test;
mysql> show tables;
±---------------+
| Tables_in_test |
±---------------+
| aaa |
±---------------+
1 row in set (0.00 sec)
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
±—±---------±------+
1 row in set (0.00 sec)
3)、在两台上停止服务
mysql> stop slave;
4)、在主服务上插入内容不会同步(通过amoeba操作)
主:
mysql> insert into aaa values(2,‘lisi’,89);
从:
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
±—±---------±------+
1 row in set (0.00 sec)
5)、在从服务器1上直接插入内容
mysql> insert into aaa values(3,‘wangwu’,60);
Query OK, 1 row affected (0.00 sec)
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 3 | wangwu | 60 |
±—±---------±------+
2 rows in set (0.00 sec)
6)、在从服务器2上直接插入内容
mysql> insert into aaa values(4,‘bb’,68);
Query OK, 1 row affected (0.00 sec)
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 4 | bb | 68 |
±—±---------±------+
2 rows in set (0.00 sec)
7)、在客户端amoeba上测试(第一次向从服务器1读数据,第二次向从服务器2读数据)
MySQL [test]> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 3 | wangwu | 60 |
±—±---------±------+
2 rows in set (0.00 sec)
MySQL [test]> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 4 | bb | 68 |
±—±---------±------+
2 rows in set (0.00 sec)
8)、在通过客户端连接数据库后写入的数据只有主会记录,然后同步给从-从服务器,从而实现读写分离
MySQL [test]> insert into aaa values(5,‘cc’,90);
主:
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 5 | cc | 90 |
±—±---------±------+
3 rows in set (0.00 sec)
从1:
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 3 | wangwu | 60 |
±—±---------±------+
2 rows in set (0.00 sec)
从2:
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 4 | bb | 68 |
±—±---------±------+
2 rows in set (0.00 sec)
9)、在客户端amoeba上看不到新插入的数据,因为同步没有开启,只有主服务器上可以看到数据
MySQL [test]> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 3 | wangwu | 60 |
±—±---------±------+
2 rows in set (0.00 sec)
MySQL [test]> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 4 | bb | 68 |
±—±---------±------+
2 rows in set (0.00 sec)
10)、在开启同步后,主服务器上的数据会同步到各从服务器上中,但从服务器上的自己增加的数据不会同步,只有本地保存
从1:
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 5 | cc | 90 |
±—±---------±------+
3 rows in set (0.00 sec)
从2:
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 5 | cc | 90 |
±—±---------±------+
3 rows in set (0.00 sec)
客户端:
MySQL [test]> select * from aaa;
±—±---------±------+
| id | name | score |
±—±---------±------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 5 | cc | 90 |
±—±---------±------+
3 rows in set (0.00 sec)