Mysql双主多从,以及Mycat代理

一主一从 (M-S)

配置好环境:

在从服务器操作,清空数据
systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
grep password /var/log/mysqld.log
mysqladmin -p'VsudOt+g%5Nw' password 'jrev@123'

主:

1 启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1

systemctl restart mysqld  #重启服务

2 授权复制用户rep
grant replication slave,replication client on *.* to 'rep'@'192.168.122.%' identified by 'QianFeng@123';
flush privileges;

3 备份数据
mysqldump -p'jrev@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp 2020-1-1-mysql-all.sql    slave1:/tmp

4 模拟数据变化
insert into master1db.master1tab values (6666666666);

从:

1 测试rep用户是否可用
mysql -h master1 -urep -p'jrev@123'

2 启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1

systemctl restart mysqld  #重启服务

3 还恢复手动同步数据
set sql_log_bin=0;
source /tmp/2020-1-1-mysql-full.sql
select * from master1db.master1tab;
因临时停止二进制日志,此步骤做完之后需退出数据库,重新进入

4 设置主服务器
mysql> change master to
master_host='master1',   #提前做好解析
master_user='rep',
master_password='jrev@123',
master_auto_position=1;

start slave;
show slave status\G;

5 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。
双主(M-M)

前面的实验,主服务器为单节点设置。假如主服务器故障会影响全局的写入事件,故设置双主。
目前已经设置master1为slave1的主服务器,现在只需设置slave1为master1的主服务器。

此时可以把slave1的解析改为master2

设置master2为master1的主服务器

在master2 上进行授权

mysql> grant replication slave, replication  client on *.* to 'rep'@'192.168.181.%'  identified by 'jrev@123';   #设置为自己服务器的网段
mysql> flush privileges;

更改master1的主服务器

mysql> change master to
master_host='master2',
master_user='rep',
master_password='jrev@123',
master_auto_position=1;

start slave;
show slave status\G;

master1上插入数据,在master2上观察
master2上插入数据,在master1上观察

添加从服务器(可多从,重复操作)

1 同步现有数据库

master1
mysqldump -p'jrev@123' --all-databases --single-transaction --master-data=2  --flush-logs > `date +%F`-mysql-all.sql
scp -r 2020-1-1-mysql-all.sql slave1:/tmp  #拷贝数据至从服务器
scp -r 2020-1-1-mysql-all.sql slave2:/tmp
略... 

2 启动从服务器ID,gtid

配置slave1
vim /etc/my.cnf
server-id=3    #区别服务器id
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

systemctl restart mysqld


配置slave2
vim /etc/my.cnf
server-id=4   #区别服务器id
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

systemctl restart mysqld

添加从服务器同上,略。。。

3 设置主服务器

slave1
mysql> change master to
master_host='master1',
master_user='rep',
master_password='jrev@123',
master_auto_position=1 for channel 'master1';

mysql> change master to
master_host='master2',
master_user='rep',
master_password='jrev@123',
master_auto_position=1 for channel 'master2';

start slave;
show slave status\G;

其他slave数据库操作同上,略。。。

在master1 和master2插入数据,在slave上进行确认。


负载均衡可解决高并发,提高服务器可用性,可远程灾备,保障数据有效性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
  2. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
  3. 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

Mycat代理技术

代理简介
DB Proxy,数据库中间件。可进行读写分离,负载均衡,支持数据的分片自动路由与聚合。
产品
Mycat                 阿里巴巴
MySQL Proxy     MySQL官方
Atlas(奇虎360)、DBProxy(美团点评)、Amoeba(早期阿里巴巴)、cober(阿里巴巴)
在这里插入图片描述

Mycat配置

基于之前所做的mysql集群,来配置mycat。
新服务器,解析为mycat
proxy mycat
M master1
M master2
S slave1
S slave2
S slave3
略。。。

配置java环境

甲骨文官网下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
在这里插入图片描述

tar xf jdk-8u261-linux-x64.tar.gz -C /usr/local
ln -s /usr/local/jdk1.8.0_261/ /usr/local/java

vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH

source /etc/profile    ; env |grep JAVA
java   -version
下载mycat

mycat官方网站:http://www.mycat.org.cn/

tar xf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
ls /usr/local/mycat/
配置mycat前端
vim  /usr/local/mycat/conf/server.xml

注释掉多余用户
在这里插入图片描述
启动mycat管理员
在这里插入图片描述

配置mycat后端
可提前备份此文件
vim  /usr/local/mycat/conf/schema.xml

在这里插入图片描述
schema name:mycat维护的集群名称。
datanode:后方节点群的名称。
datahost:后方节点群的主机名称。
writehost:写主机
readhost:读主机
在本例中switchType值设置为1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用2判断主从状态后再切换
切换的触发条件为主节点mysql服务崩溃或停止
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为60秒,则设置此值为60,此例中设置值为100

关于属性的介绍

balance 类型

  1. balance=“0”, 关闭读写分离功能。所有读操作都发送到当前可用的writeHost上。
  2. balance=“1”,开启读写分离,所有读操作都随机的发送到readHost。

writeType 属性

备份型:1. writeType=“0”, 所有写操作发送到配置的第一个 writeHost,
第一个挂了切到还生存的第二个writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

负载型:2. writeType=“1”,所有写操作都随机的发送到配置的 writeHost。

switchType 模式
switchType指的是切换的模式,目前的取值也有4种:

  1. switchType=’-1’ 负1表示不自动切换
  2. switchType=‘1’ 默认值,表示根据延时自动切换
  3. switchType=‘2’ 根据MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
配置mysql群

M-M-S-S-S… 准备Mycat连接的用户及权限

例如master1
grant all on *.* to 'mycatproxy'@'192.168.181.mycat主机' identified by 'jrev@123';   #指定mycat服务器的ip
启动Mycat
在mycat服务器上
/usr/local/mycat/bin/mycat start
netstat  -anpt | grep java  #检测端口是否启动
ps aux | grep mycat   #检测进程是否启动

yum install -y mariadb
mysql -hmycat -uroot -p123456 -P8066
show databases;

在mysql-master1上创库创表
create database  tianyun;
create table tianyun.t1 (id int);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值