思路:拿出四台虚拟机,两台作为master主服务器,两台作为slave从服务器,两台主服务器之前互为主从,两台从服务器则配置从服务器。
流程:具体流程查看上一部主从复制流程
1.配置四台服务器的环境:本地域名解析,环境清理mysql数据库,修改主机名,关闭防火墙selinux,同步时间,固定ip
2.配置主配置服务器:对于主服务器master1,进行如下配置
- 创建binlog目录,并赋予mysql权限
- 在配置文件中启动二进制日志binlog功能:log-bin=/home/binlog/mysql-bin
- 设置server-id参数为1:server-id = 1
- (binlog日志只能读取一次,如若双主双从则必须添加log-slave-updates,此时所有的从库都可读取同步内容)
- 配置其他相关参数,如数据库地址,端口号,用户名,密码
3.配置主从关系:在主服务器maste1上创建一个新的复制用户,并为其授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by '123';
将复制的权限给与此用户
4.show master status\G查看主服务器master1的binlog信息:连接到主服务器master2中,并执行以下命令拉取master1的信息,在master2中配置并记录
mysql>\e (\e中输入以下内容)
CHANGE MASTER TO
MASTER_HOST='主机名',
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_PORT=3306,
MASTER_LOG_FILE='主服务器1当前的binlog文件名',
MASTER_LOG_POS=master1当前的binlog位置,
MASTER_CONNECT_RETRY=10;
5.启动主从复制:在master2中: start slave; (如若出现故障可 reset slave; 重置slave)
6.配置master2:重复以上操作
7.在从库slave中重复第4部操作即可完成双主双从.
MyCAT读写分离
准备好另一台虚拟机在双主双从操作的基础上进行如下操作
1.下载JDK与MyCAT
2.解压两文件至 /usr/local下 ,并改名JDK为JAVA
[root@mycat ~]# tar -xf jdk-8u181-linux-x64.tar.gz -C /usr/local/
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
3.配置JDK环境变量
[root@localhost ~]# vi /etc/profile 环境变量配置文件
[root@localhost ~]# source /etc/profile 刷新环境变量
[root@localhost ~]# java -version 查看java环境变量
4.配置mycat
vi server.xml
vim schema.xml
/usr/local/mycat/bin/mycat start 启动mycat
测试
断开主从,在四个库中分别添加text1-text4表,一个库一个,然后改变balance值,测试值带来的效果
balance 属性
负载均衡类型,目前的取值有 4种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。(每次测试只能显示text1)
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 (互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。(每次测试只能分次显示text2-text4)
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。(四个表分次全部显示)
5. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。(只显示读库,text3,text4)writeType 属性
负载均衡类型
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.