#1. 读写分离(一主一从)
##1.1 前期准备
一主一从准备两台机器:
IP
|
MySQL |
MyCat
|
角色
|
192.168.68.133
|
安装配置
|
安装配置
|
Matser
|
192.168.68.134
|
安装配置
|
无
|
Slave
|
##1.2 配置主从复制
步骤:
- 配置Master主机
- 配置Slave从机
###1.2.1 配置Master
步骤:
- 配置my.cnf文件
- 重启,后进入MySQL
- 创建一个Slave账号
- 查看Master状态
① 在Master的配置文件(/etc/my.cnf)中,添加如下内容
# mysql服务ID,必须保证整个集群环境中的唯一性 server-id=1 # mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin # 设置logbin格式 # binlog_format=STATMENT # 是否只读,1代表只读,0代表读写 read-only=0 # 忽略的数据,指不需要同步的数据库 # binlog-ignore-db=mysql # 指定同步的数据库 binlog-do-db=wqltest
systemctl restart mysqld.service
grant replication slave on *.* to 'slavewql'@'192.168.68.134' identified by '123456789'; flush privileges;
show master status;
状态释义:
- File:从哪个日志文件开始推送日志文件
- Position:从哪个位置开始推送日志
- Binlog_Do_DB:指定需要同步的数据库
- Binlog_Ignore_DB:指定不需要同步的数据库
###1.2.2 配置Slave
① 在slave端配置文件/etc/my.cnf中,添加如下内容
# mysql服务ID,唯一 server-id=2 # mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin # 启动中继日志 relay-log=mysql-relay
② 重启MySQL服务
systemctl restart mysqld.service
③ 指定master主节点位置
change master to master_host='192.168.68.133', master_user='slavewql', master_password='123456789', master_log_file='mysqlbin.000007', master_log_pos=154;
指定当前从库对应的主库的IP地址,用户,密码,从那个日志文件开始的,那个位置开始同步推送日志
注:这些消息查看master状态时有
④ 开启同步操作
start slave;
⑤ 查看slave的状态
show slave status\G;
##1.3 读写分离
###1.3.1 读写分离原理
读写分离:把数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样减轻单台数据库的压力
通过MyCat可以轻松实现上述功能,不仅可以支持MySQL,也可以支持Oracle和SQL Servre
MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制
###1.3.2读写分离配置
① 检查MySQL主从复制是否配置成功
② 配置Schema.xml文件
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!--逻辑库--> <schema name="ZC_DB" checkSQLschema="true" sqlMaxLimit="100"> <!--逻辑表--> <table name="wql" dataNode="dn1" primaryKey="id" rule="mod-long"/> </schema> <!--数据节点,绑定dataHost数据源和database数据库--> <dataNode name="dn1" dataHost="localhost1" database="fq" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> <!--心跳检测--> <heartbeat>select user()</heartbeat> <!--writeHost数据写入节点,也就是数据源--> <writeHost host="hostM1" url="jdbc:mysql://192.168.68.133:3306" user="root" password="123456789"> <readHost host="hostS1" url="jdbc:mysql://192.168.68.134:3306" user="root" password="123456789"/> </writeHost> </dataHost> </mycat:schema>
注意事项:
1)cheackSQLschema
当值设置为true时,如果执行语句"select * from test01;"语句时,MyCat则会把schema字符去掉,可以避免数据库执行报错
2)balance
负载均衡类型,目前取值有4种:
- 0 --> 不开启读写分离机制,所有操作都发送到当前可用的writeHost上
- 1 --> 全部的readHost与stand by writeHost(备用WriteHost)都参与负载均衡,简而言之就是支持读写分离
- 2 --> 所有的读写操作都随机在writeHost和readHost上分发
- 3 --> 所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力;balance=3只在MyCat1.4之后生效
配置完成自行测试:测试可以结合mycat.log
tail -f mycat.log
#2. 读写分离(双主双从)
##2.1前期准备
编号
|
角色
|
IP地址
|
端口号
|
Mycat
|
1
|
Master1
|
192.168.68.133
|
3306
|
配置
|
2
|
Slave1
|
192.168.68.151
|
3306
|
无
|
3
|
Master2
|
192.168.68.134
|
3306
|
无
|
4
|
Slave2
|
192.168.68.152
|
3306
|
无
|
##2.2主从复制
###2.2.1双主的配置
① Master1配置
# 主服务器唯一ID server-id=1 # 启动二进制日志 log-bin=/var/lib/mysql/mysql-bin # 设置需要复制的数据库 binlog-do-db=db01 binlog-do-db=db02 # 设置logbin格式 # binlog_format=STATMENT # 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates
② Master2配置
# 主服务器唯一ID server-id=3 # 启动二进制日志 log-bin=/var/lib/mysql/mysql-bin # 设置需要复制的数据库 binlog-do-db=db01 binlog-do-db=db02 # 设置logbin格式 # binlog_format=STATMENT # 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates
③ 两台主机重启MySQL服务
systemctl restart mysqld.service
④ 两台主机关闭防火墙
systemctl stop firewalld
⑤ 在两台主机上建立slave授权账号
grant replication slave on *.* to 'slavefq'@'%' identified by '123456789'; flush privileges;
查询Master1的状态:
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 592 | db01,db02 | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
###2.2.2 双从的配置
① Slave1配置
# 服务器唯一ID server-id=2 # 启动中继日志 relay-log=mysql-relay
② Slave2配置
# 服务器唯一ID server-id=4 # 启动中继日志 relay-log=mysql-relay
③ Slave1指令,在从机上配置需要复制的主机
change master to master_host='192.168.68.133', master_user='slavefq', master_password='123456789', master_log_file='mysql-bin.000001', master_log_pos=592;
④ Slave2指令,在从机上配置需要复制的主机
change master to master_host='192.168.68.134', master_user='slavefq', master_password='123456789', master_log_file='mysql-bin.000001', master_log_pos=584;
⑤启动两台从服务器复制功能,查看主从复制的运行状态
start slave; show slave status\G;
###2.2.3双主相互复制
高可用必须保证单节点故障备用节点必须顶替正常维持运行,所以Master1和Master2一个主机一个备用主机
Master1复制Master2,Master2复制Master1
① Master1执行指令:
change master to master_host='192.168.68.134', master_user='slavefq', master_password='123456789', master_log_file='mysql-bin.000001', master_log_pos=584;
② Master2执行指令:
change master to master_host='192.168.68.133', master_user='slavefq', master_password='123456789', master_log_file='mysql-bin.000001', master_log_pos=592;
③ 启动两台主机复制功能,查看主从复制运行状态
start slave; show slave status\G;
配置完成后自行测试,建一个db01数据库看是否全部同步
##2.3 读写分离
###2.3.1 读写分离的原理
一个主机Master1用于处理所有写请求,它的从机slave1和另一台主机Master2还有它的从机slave2 负责所有读请求。当Master1主机容机后,Master2主机负责写请求,Masterl,Muster2互为备机
###2.3.2读写分离的配置
① 检查MySQL主从配置是否成功
② 在Master1中对Mycat的Schema.xml进行配置
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!--逻辑库--> <schema name="SZC_DB" checkSQLschema="true" sqlMaxLimit="100"> <!--逻辑表--> <table name="lala" dataNode="dn1" primaryKey="id"/> </schema> <!--数据节点,绑定dataHost数据源和database数据库--> <dataNode name="dn1" dataHost="localhost1" database="db01" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> <!--心跳检测--> <heartbeat>select user()</heartbeat> <!--writeHost数据写入节点,也就是数据源--> <writeHost host="hostM1" url="jdbc:mysql://192.168.68.133:3306" user="root" password="123456789"> <readHost host="hostS1" url="jdbc:mysql://192.168.68.151:3306" user="root" password="123456789"/> </writeHost> <writeHost host="hostM2" url="jdbc:mysql://192.168.68.134:3306" user="root" password="123456789"> <readHost host="hostS2" url="jdbc:mysql://192.168.68.152:3306" user="root" password="123456789"/> </writeHost> </dataHost> </mycat:schema>
③ 配置server.xml文件
<user name="root" defaultAccount="true"> <property name="password">123456789</property> <property name="schemas">SZC_DB</property> </user> <user name="user"> <property name="password">123456789</property> <property name="schemas">SZC_DB</property> <property name="readOnly">true</property> </user>
配置完成自行测试:测试可以结合mycat.log
tail -f mycat.log
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109