文档章节

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale

s
 sunsyu
发布于 2017/04/13 16:03
字数 2150
阅读 191
收藏 1

mysql主从复制配置

配置思路
1. 修改master和slave的配置文件,使用二进制日志,指定serverid
目的是让各自都有了自己的唯一标示,并以二进制文件格式进行交流
2. master中创建授权用户,查看二进制日志文件名,及最新位置
让slave知道用哪个用户信息访问master,知道读取哪个日志文件,及从哪儿开始读
3. slave中使用被授权用户信息及日志文件信息,进行指向master
这时已经建立了和master的联系,明确了从哪儿读取日志文件
3. 执行启动slave的命令,开始主从复制,并查看复制状态信息
准备条件
停止对master数据库的操作
把master中的数据库全部导入到slave,使两边数据库完全一致
配置步骤
1. 修改配置文件 my.cnf
master:
[mysqld]
log-bin=MySQL-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
slave:
[mysqld]
log-bin=mysql-bin 
server-id=226 

2. 重新启动两台服务器的mysql
3. master创建授权用户
登陆主服务器mysql命令行,创建一个用于从服务器复制的用户
mysql>GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码'; 
"*.*"表示对所有库的所有操作,“%”表示所有客户端都可能连,也可用具体客户端IP代替,如192.168.145.226,加强安全
4. 查看master状态
登陆主服务器mysql命令行
mysql>show master status;
+-------------------------+----------+
| File | Position |
+-------------------------+----------+
| mysql-bin.000002 | 1308 |
+-------------------------+----------+
mysql-bin.000004 是用于主从复制的文件名
1308 是日志文件内的最新位置
5. slave指向master
登陆从服务器mysql命令行,使用之前创建的用户和master的日志文件及其位置
mysql>change master to master_host='master ip',master_user='用户名',master_password='密码',
master_log_file='mysql-bin.000002',master_log_pos=1308; //注意不要断开,“1308”无单引号。
6. 启动slave
mysql>start slave;
7. 查看slave状态
mysql> show slave status\G;
结果中有两个重要数据项:
常见的问题是SQL线程没有正常工作 Slave_SQL_Running: No
通常是两边的数据库不是完全对应的,需要确保master上的库及到目前为止的最新记录都复制到slave上了
8.测试
当IO线程和SQL线程都正常后,到master中随意测试下插入、修改、删除操作,同时到slave中检查

1) Slave_IO_Running: Yes

IO线程状态,必须YES

2) Slave_SQL_Running: Yes

SQL线程状态,必须YES


Mysql 5.7 主从复制的多线程复制配置方式

数据库复制的主要性能问题就是数据延时

为了优化复制性能,Mysql 5.6 引入了 “多线程复制” 这个新功能

但 5.6 中的每个线程只能处理一个数据库,所以如果只有一个数据库,或者绝大多数写操作都是集中在某一个数据库的,那么这个“多线程复制”就不能充分发挥作用了

Mysql 5.7 对 “多线程复制” 进行了改善,可以按照逻辑时钟的方式来分配线程,大大提高了复制性能

下面看一下在5.7中如何配置 “多线程复制” 

1、对两个 mysql 实例配置好主从复制

配置成功后,在从库上使用 show processlist 查看现在的状态


可以看到只有一个复制线程在运行

2、在从库上停止复制

mysql> stop slave;



3、设置并发同步类型为逻辑时钟方式

先看下现在 slave 的并发类型,通过变量 slave_parallel_type 的值来获得,这个变量用来决定如何使用多线程复制

mysql> show variables like 'slave_parallel_type';


默认是datebase,每个线程只能处理一个数据库

配置成基于逻辑时钟的方式

mysql> set global slave_parallel_type='logical_clock';




4、设置复制线程的数量

先看下当前的并发数量,通过变量 slave_parallel_workers 的值来获得,这个变量用来决定并发处理的线程数

mysql> show variables like 'slave_parallel_workers';


现在是 0,我们把他改成 4

mysql> set global slave_parallel_workers=4;


5、启动复制

mysql> start slave;

6、验证配置结果

mysql> show processlist;


可以看到已经有4个IO线程了,配置完成

Mysql 读写分离中间件 MaxScale

MaxScale 是干什么的?

配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡

读写分离负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能


MaxScale 的基础构成

MaxScale 是 Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟

MaxScale 是插件式结构,允许用户开发适合自己的插件

MaxScale 目前提供的插件功能分为5类

认证插件

提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证

协议插件

包括客户端连接协议,和连接数据库的协议

路由插件

决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的

监控插件

对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了

日志和过滤插件

提供简单的数据库防火墙功能,可以对SQL进行过滤和容错

MaxScale 的安装使用

例如有 3 台数据库服务器,是一主二从的结构

过程概述

(1)配置好集群环境

(2)下载安装 MaxScale

(3)配置 MaxScale,添加各数据库信息

(4)启动 MaxScale,查看是否正确连接数据库

(5)客户端连接 MaxScale,进行测试

详细过程

(1)配置一主二从的集群环境

准备3台服务器,安装 Mysql,配置一主二从的复制结构

(2)安装 MaxScale

最好在另一台服务器上安装,如果资源不足,可以和某个 Mysql 放在一起

MaxScale 的下载地址

https://downloads.mariadb.com/files/MaxScale

根据自己的服务器选择合适的安装包

以 centos 7 为例 安装步骤如下:

yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y

rpm -ivh maxscale-1.4.3-1.centos.7.x86_64.rpm

(3)配置 MaxScale

在开始配置之前,需要在 master 中为 MaxScale 创建两个用户,用于监控模块和路由模块

创建监控用户

mysql> create userscalemon@'%' identified by "111111";

mysql> grant replication slave, replication client on *.* to scalemon@'%';

创建路由用户 

mysql> create usermaxscale@'%' identified by "111111";

mysql> grant select on mysql.* to maxscale@'%';

用户创建完成后,开始配置

vi/etc/maxscale.cnf

找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口

复制2次 [server1] 的整块儿内容,改为 [server2] 与 [server3],同样修改其中的 address 和 port,分别指向 slave1 和 slave2


找到 [MySQL Monitor] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的监控用户的信息(scalemon,111111)


找到 [Read-Write Service] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的路由用户的信息(maxscale,111111)


由于我们使用了 [Read-Write Service],需要删除另一个服务 [Read-Only Service],删除其整块儿内容即可

配置完成,保存并退出编辑器

(4)启动 MaxScale

执行启动命令 

maxscale --config=/etc/maxscale.cnf

查看 MaxScale 的响应端口是否已经就绪

netstat -ntelp


4006 是连接 MaxScale 时使用的端口

6603 是 MaxScale 管理器的端口

登录 MaxScale 管理器,查看一下数据库连接状态,默认的用户名和密码是 admin/mariadb

maxadmin --user=admin --password=mariadb

MaxScale> list servers


可以看到,MaxScale 已经连接到了 master 和 slave

(5)测试

先在 master 上创建一个测试用户

mysql> grant ALL PRIVILEGES on *.* tortest@"%" Identified by "111111";

使用 Mysql 客户端到连接 MaxScale

mysql -hMaxScale所在的IP -P4006 -u rtest -p111111

执行查看数据库服务器名的操作来知道当前实际所在的数据库


开启事务后,就自动路由到了 master,普通的查询操作,是在 slave上

MaxScale 的配置完成了


转载自:http://yogoup.sinaapp.com/?sukey=3997c0719f151520ae4d9d483b4ebd7887d7a1b1584cfb4af239f10e02bab8b4454a80fdd4f3393a37138bae23442345

© 著作权归作者所有

s
粉丝 0
博文 109
码字总数 135924
作品 0
深圳
私信 提问
优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

本文根据DBAplus社群第67期线上分享整理而成。 讲师介绍 本次分享主要包括以下内容: 1、MySQL高可用方案 2、为什么选择MHA 3、读写分离方案的寻找以及为什么选择Maxscale 常见的Failover方案...

侯野
2016/07/29
0
0
mysql系列之8------读写分离

一、前言:读写分离的基本原理 mysql的读写分离的基本原理是:让master(主数据库)来响应事务性操作, 让slave(从数据库)来响应select非事务性操作, 然后再采用主从复制来把master上的事...

bentian1208
2018/10/29
0
0
MaxScale:实现MySQL读写分离与负载均衡的中间件利器

配置好了MySQL的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡。 读写分离和负载均衡是MySQL集群的基础需求,MaxScale 就可以帮着我们...

杜亦舒
2016/08/23
0
0
MySQL链式复制加速神器: MaxScale Binlog Server(附视频)

本文根据DBAplus社群第83期线上分享整理而成 讲师介绍 感谢大家参与我今天的分享,希望今天大家能有所收获,并能把这项新技术玩起来先。在介绍MaxScale Binlog Server前,我先把我们这边的情...

贺春旸
2016/12/02
0
0
Docker Swarm 部署Mysql/Mariadb高可用主从复制集群

本文为转载,原文:Docker Swarm 部署Mysql/Mariadb高可用主从复制集群 1. MariaDB与MySQL MariaDB是MySQL源代码的一个分支,在意识到Oracle会对MySQL许可做什么后分离了出来(MySQL先后被S...

ChainZhang
2018/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部