MySQL 运维 16- 双主双从读写分离
一、双主双从架构介绍
在 MySQL 多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了。下面以双主双从作为示例演示。其中一个主机 maste1 用于处理所有写请求,它的从机 slave1 和另外一台主机 master2 还有它的从机 salve2 负责所有读数据请求,当 master1 主机宕机后,master2 主机会立刻切换到负责写请求,master1 和 master2 互为备机,架构如下:
二、双主双从主机配置
四台 MySQL 主机,分别如下
192.168.3.91:角色 master1, 启动服务 Mycat,MySQL, 关闭防火墙
192.168.3.92:角色 slave1, 启动服务 MySQL,关闭防火墙
192.168.3.93:角色 master2, 启动服务 MySQL,关闭防火墙
192.168.3.94:角色 slave2, 启动服务 MySQL,关闭防火墙
说明 1:其中 192,168.3.91 即当 MySQL 服务器,又充当 Mycat 的服务器
三、master1 节点配置
3.1 修改 mysql 配置文件
192.168.3.91 这个台服务器当做双主中的一个,修改其配置文件如下:vim /etc/my.cnf
说明 1: server-id=1 是 mysql 集群服务中的唯一标识
说明 2:binlog-do-db 是指定要主从复制的数据库,不指定默认是全部数据库都做主从复制
说明 3:在主服务器上要配置 log-slave-updates 因为当存在多个主服务器的时候,有可能会存在备用主机,备用主机也是需要通过 binlog 文件向自己的从机同步数据的,所以要开始 log-slave-updates
3.2 重启 mysql
3.3 创建用于主从复制的账号
要进入 mysql 交互界面,注意不是进入 Mycat
3.4 查看二进制日志坐标
四、master2 节点配置
4.1 修改 mysql 配置文件
192.168.3.93 这个台服务器当做双主中的另外一个,修改其配置文件如下:vim /etc/my.cnf
说明 1:这里的 server-id=3
4.2 重启 mysql
4.3 创建用于主从复制的账号
要进入 mysql 交互界面,注意不是进入 Mycat
4.4 查看二进制日志坐标
五、slave1 节点配置
5.1 修改配置文件
slave1 节点是 192.168.3.92, 修改其配置文件如下 vim /etc/my.cnf
5.2 重启 mysql
5.3 slave1 关联 master1
说明 1:master_host 是该从库关联的主库,slave1 关联的事 192.168.3.91 这台 master1
说明 2:master_user 是关联账号,houlei 这个账号是在 master1 中刚创建的账号,就是用来做主从复制使用的
说明 3:master_password 是关联账号的密码
说明 4:master_log_file 是开始主从复制的 binlog 文件名
说明 5:master_log_poss 是 binlog 日志文件位置,这个参数是不用加引号或单引号的。
5.4 启动 slave1 的主从复制
说明 6:start slave 开始主从复制
六、slave2 节点配置
6.1 修改配置文件
slave2 节点是 192.168.3.94,修改其配置文件如下 vim /etc/my.cnf
6.2 重启 mysql
6.3 slave2 关联 master2
说明 1:master_host 是该从库关联的主库,slave2 关联的事 192.168.3.93 这台 master2
说明 2:master_user 是关联账号,houlei 这个账号是在 master1 中刚创建的账号,就是用来做主从复制使用的
说明 3:master_password 是关联账号的密码
说明 4:master_log_file 是开始主从复制的 binlog 文件名
说明 5:master_log_poss 是 binlog 日志文件位置,这个参数是不用加引号或单引号的。
说明 6:该语句是在 slave2 的 mysql 交互界面执行的
6.4 启动 slave2 的主从复制
七、两台主库相互复制
以上 6 章节我们等于部署了 master1-slave1 和 master2-slave2 两套一主一从,但是目前位置这两个一主一从还没有任何关系,所以接下来我们就要配置两台主机上的关联了。即 master1 复制 master2 的同时 master2 也复制 master2.
在 master1 上执行:
说明 1:以上代码其实就是将 master1 配置为 master2 的从库
然后在 master2 上执行:
说明 2:以上代码其实就是将 master2 配置为 master1 的从库
八、双主双从测试
分别在两台主库 master1,master2 上执行 DDL 和 DML 语句,查看涉及到的数据库服务器的数据同步情况
在 master1 上操作:
8.1、创建数据库 test_db1
说明 1:我们在 192.168.3.91 的 master1 主库上创建了数据库 test_db1,然后再 slave1,和 master2,slave2 上立刻就复制创建了 test_db1 出来
2、我们在 master2 上的 test_db1 的数据库中创建一个 tb_test 表
说明 2:在 master2 上进行创建表同样会自动复制到 master1 和其他从表中
说明 3:至此双主双从算是配置好了
九、双主双从的读写分离
Mycat 控制后台数据库的读写分离和负载均衡有 schema.xml 文件中的 dataHost 标签的 balance 属性控制,通过 writeType 及 switchType 来完成失败自动切换的。
9.1 配置 schema.xml
说明 1:在配置 schema 逻辑库的时候就要指定数据节点 dataNode 的值,因为如果逻辑库下的所有表都要实现读写分离,则不需要配置 table 标签
说明 2:dn1 数据节点下对应的 mysql 的 database 为 test_db1
说明 3:在 dataHost 标签的配置中要注意,balance 值为"1",writeType 值为"0",switchType 的值为"1",解释如下:
balance="1": 关于 balance 所有值的解释在上一遍文章中有解释,需要的请通过合集找到上一篇文章查看,这里直接是 balance="1"的情况:代表全部的 readHost 和备用主机的 writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(master1->slave1,master2->slave2,并且 master1 和 master2 互为主备),正常情况下 master2,slave1,slave2 都要参与 select 语句的负载均衡
writeType:0:代表写操作都转发到第一台 writerHost,writeHost1 挂了,会切换到 writeHost2 上。1:代表所有写操作都随机的发送到配置的 witerHost 上
switchType:-1:代表不自动切换,1:代表自动切换
说明 4:双主双从即配置两个 writeHost 和 readHost 组合,如果是多主多从即配置多个 writeHost 和 readHost 组合即可。
9.2 配置 server.xml
说明 5:给 root 用户增加 test_db1 数据库的操作权限
9.3 双主双从读写分离测试
首先重启 Mycat
登录 Mycat
查看逻辑库和逻辑表
插入测试数据
说明 6:在 Mycat 中插入数据 master1,slave1,master2,slave2 中都添加了数据.
查询数据测试:同样的直接查询我们是没办法确定查询的数据到底是来自哪里,所以我们还是修改从库中的数据,将 slave1 中的“张三”改了“张三 s1”,将 slave2 中的“张三”改为“张三 s2”
说明 7:查询结果是张三的说明数据来源 master2
说明 8:查询结果是张三 s1 的说明数据来源是 slave1
说明 9:查询结果是张三 s2 的说明数据来源是 slave2
说明 10:以上测试说明了双主双从实现了读写分离
十、双主双从的高可用测试
测试一台主机宕机下,双主双从是否可以继续运行。
10.1、现将 master1(192.168.3.91)的服务关闭
10.2 进入 Mycat 进行增删改查测试
说明 1:仍然可以查询,说明可以进行读数据
说明 2:master1 挂了的情况下,我们的双主双从架构的 MySQL 依然可读可写,所以高可用也没问题
总结:在双主双从的基础上,多主多从同样的实现思路。
文章转载自:Se7eN_HOU
评论