快速部署MySQL读写分离架构

(一)读写分离原理

1、只在主服务器上写,只在从服务器上读
2、主数据库处理事务性查询,从数据库处理select查询
3、数据库复制用于将事务性查询的变更同步到集群中的从数据库
读写分离原理示意图:
快速部署MySQL读写分离架构

(二)读写分离环境

三台装有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授权

快速部署MySQL读写分离架构

2.在amoeba服务器上安装JDK

快速部署MySQL读写分离架构

3.部署amoeba代理

快速部署MySQL读写分离架构

4.修改amoeba主配置文件

vi /usr/local/amoeba/conf/amoeba.xml
快速部署MySQL读写分离架构
快速部署MySQL读写分离架构

5.修改dbServers.xml 文件

vi /usr/local/amoeba/conf/dbServers.xml
快速部署MySQL读写分离架构

快速部署MySQL读写分离架构

6.启动amoeba服务器准备测试

快速部署MySQL读写分离架构
快速部署MySQL读写分离架构

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)

相关文章:

  • 2022-02-14
  • 2022-12-23
  • 2021-07-07
  • 2021-10-12
  • 2021-11-15
  • 2021-09-29
  • 2022-12-23
猜你喜欢
  • 2021-12-26
  • 2021-11-30
  • 2021-11-18
  • 2021-08-14
  • 2021-09-15
相关资源
相似解决方案