手机网站建设价钱,网站建设中建站广告html单页面,手机免费制作app平台,上海外贸瓦屑包装袋有限公司一个主机 Master1 用于处理所有写请求#xff0c;它的从机 Slave1 和另一台主机 Master2 还有它的从 机 Slave2 负责所有读请求。当 Master1 主机宕机后#xff0c; Master2 主机负责写请求#xff0c; Master1 、 Master2 互为备机。架构图如下 : 准备 我们… 一个主机 Master1 用于处理所有写请求它的从机 Slave1 和另一台主机 Master2 还有它的从 机 Slave2 负责所有读请求。当 Master1 主机宕机后 Master2 主机负责写请求 Master1 、 Master2 互为备机。架构图如下 : 准备 我们需要准备 4 台服务器具体的服务器及软件安装情况如下 编号 IP 预装软件 角色 1 192.168.2.3 MyCat 、 MySQL MyCat 中间件服务器、M1 2 192.168.2.4 MySQL S1 3 192.168.2.5 MySQL M2 4 192.168.2.6 MySQL S2 关闭以上所有服务器的防火墙 systemctl stop firewalld systemctl disable firewalld 搭建双主从
主库配置
1.Master1(192.168.2.3) 修改配置文件 /etc/my.cnf
#mysql 服务ID保证整个集群环境中唯一取值范围1 – 2^32-1默认为1
server-id1
#指定同步的数据库
binlog-do-dbdb01
binlog-do-dbdb02
binlog-do-dbdb03
# 在作为从数据库的时候有写入操作也要更新二进制日志文件
log-slave-updates 重启 MySQL 服务器 systemctl restart mysqld 创建账户并授权 #创建mytest用户并设置密码该用户可在任意主机连接该MySQL服务
CREATE USER mytest% IDENTIFIED WITH mysql_native_password BY Root123456;
#为 mytest% 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO mytest%; 通过指令查看两台主库的二进制日志坐标 show master status ; 2.Master2(192.168.2.5) 修改配置文件 /etc/my.cnf
#mysql 服务ID保证整个集群环境中唯一取值范围1 – 2^32-1默认为1
server-id3
#指定同步的数据库
binlog-do-dbdb01
binlog-do-dbdb02
binlog-do-dbdb03
# 在作为从数据库的时候有写入操作也要更新二进制日志文件
log-slave-updates 重启 MySQL 服务器 systemctl restart mysqld 创建账户并授权 #创建mytest用户并设置密码该用户可在任意主机连接该MySQL服务
CREATE USER mytest% IDENTIFIED WITH mysql_native_password BY Root123456;
#为 mytest% 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO mytest%; 通过指令查看两台主库的二进制日志坐标 show master status ; 从库配置
1.Slave1(192.168.2.4) 修改配置文件 /etc/my.cnf
#mysql 服务ID保证整个集群环境中唯一取值范围1 – 232-1默认为1
server-id2 重新启动 MySQL 服务器 systemctl restart mysqld 创建账户并授权 #创建mytest用户并设置密码该用户可在任意主机连接该MySQL服务
CREATE USER mytest% IDENTIFIED WITH mysql_native_password BY Root123456;
#为 mytest% 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO mytest%; 通过指令查看两台主库的二进制日志坐标 show master status ; 2.Slave2(192.168.2.6) 修改配置文件 /etc/my.cnf
#mysql 服务ID保证整个集群环境中唯一取值范围1 – 232-1默认为1
server-id4 重新启动MySQL服务器
systemctl restart mysqld
从库关联主库 需要注意slave1对应的是master1slave2对应的是master2。 在 slave1(192.168.2.4)上执行
CHANGE MASTER TO MASTER_HOST192.168.2.3, MASTER_USERmytest,
MASTER_PASSWORDRoot123456, MASTER_LOG_FILEbinlog.000010,
MASTER_LOG_POS157; 在 slave2(192.168.2.6) 上执行 CHANGE MASTER TO MASTER_HOST192.168.2.5, MASTER_USERmytest,
MASTER_PASSWORDRoot123456, MASTER_LOG_FILEbinlog.000005,
MASTER_LOG_POS585; 启动两台从库主从复制查看从库状态 start slave;
show slave status \G; 两台主库相互复制 在 Master1(192.168.2.3)上执行
CHANGE MASTER TO MASTER_HOST192.168.2.5, MASTER_USERmytest,
MASTER_PASSWORDRoot123456, MASTER_LOG_FILEbinlog.000005,
MASTER_LOG_POS585; 在 Master2(192.168.2.5) 上执行 CHANGE MASTER TO MASTER_HOST192.168.2.3, MASTER_USERmytest,
MASTER_PASSWORDRoot123456, MASTER_LOG_FILEbinlog.000010,
MASTER_LOG_POS453; 启动两台从库主从复制查看从库状态 start slave;
show slave status \G; 经过上述的配置之后双主双从的复制结构就已经搭建完成了。 接下来我们可以来测试验证一下。
测试 分别在两台主库 Master1 、 Master2 上执行 DDL 、 DML 语句查看涉及到的数据库服务器的数据同步情况。 create database db01;
use db01;
create table tb_user(
id int(11) not null primary key ,
name varchar(50) not null,
sex varchar(1)
)engineinnodb default charsetutf8mb4;insert into tb_user(id,name,sex) values(1,Tom,1);
insert into tb_user(id,name,sex) values(2,Trigger,0);
insert into tb_user(id,name,sex) values(3,Dawn,1);
insert into tb_user(id,name,sex) values(4,Jack Ma,1);
insert into tb_user(id,name,sex) values(5,Coco,0);
insert into tb_user(id,name,sex) values(6,Jerry,1); 在Master1中执行DML、DDL操作看看数据是否可以同步到另外的三台数据库中。 在Master2中执行DML、DDL操作看看数据是否可以同步到另外的三台数据库中。 双主双从读写分离 完成了上述双主双从的结构搭建之后接下来我们再来看看如何完成这种双主双从的读写分离。 配置 MyCat 控制后台数据库的读写分离和负载均衡由 schema.xml 文件 datahost 标签的 balance 属性控制通过writeType 及 switchType 来完成失败自动切换的。 schema.xml 配置逻辑库 schema nameTEST_RW2 checkSQLschematrue sqlMaxLimit100 dataNodedn7
/schema 配置数据节点 dataNode namedn7 dataHostdhost7 databasedb01 / 配置节点主机 dataHost namedhost7 maxCon1000 minCon10 balance1 writeType0 dbTypemysql dbDriverjdbc switchType1 slaveThreshold100heartbeatselect user()/heartbeatwriteHost hostmaster1 urljdbc:mysql://192.168.2.3:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordnewPwd520 readHost hostslave1 urljdbc:mysql://192.168.2.4:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordnewPwd520 //writeHostwriteHost hostmaster2 urljdbc:mysql://192.168.2.5:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordnewPwd520 readHost hostslave2 urljdbc:mysql://192.168.2.6:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordnewPwd520 //writeHost/dataHost 属性说明 balance1 代表全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡简单的说当双主双从模式(M1-S1 M2-S2 并且 M1 与 M2 互为主备 ) 正常情况下M2,S1,S2 都参与 select 语句的负载均衡 ; writeType 0 : 写操作都转发到第 1 台 writeHost, writeHost1 挂了 , 会切换到 writeHost2 上 ; 1 : 所有的写操作都随机地发送到配置的 writeHost 上 ; switchType -1 : 不自动切换 1 : 自动切换 user.xml 配置 root 用户也可以访问到逻辑库 TEST _RW2 。 user nameroot defaultAccounttrue
property namepassword123456/property
property nameschemasTEST_RW2/property
!-- 表级 DML 权限设置 --
!--
privileges checktrue
schema nameDB01 dml0110
table nameTB_ORDER dml1110/table
/schema
/privileges
--
/user 重启MyCat bin/mycat restart 测试 登录 MyCat 测试查询及更新操作判定是否能够进行读写分离以及读写分离的策略是否正确。 当主库挂掉一个之后是否能够自动切换。 先在mycat插入数据 insert into tb_user(id,name,sex) values(4,Jack Ma,1); 插入数据成功 在全部mysql也插入数据成功 然后停掉master1
systemctl stop mysqld 再次在mycat插入数据
insert into tb_user(id,name,sex) values(5,Coco,0);
还是成功 除了master其他mysql也插入数据成功