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

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 查看现在的状态

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第1张图片

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

2、在从库上停止复制

mysql> stop slave;

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第2张图片


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

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

mysql> show variables like 'slave_parallel_type';

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第3张图片

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

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

mysql> set global slave_parallel_type='logical_clock';



Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第4张图片

4、设置复制线程的数量

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

mysql> show variables like 'slave_parallel_workers';

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第5张图片

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

mysql> set global slave_parallel_workers=4;

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第6张图片

5、启动复制

mysql> start slave;

6、验证配置结果

mysql> show processlist;

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第7张图片

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

Mysql 读写分离中间件 MaxScale

MaxScale 是干什么的?

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

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

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第8张图片

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 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第9张图片

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

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第10张图片

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

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第11张图片

由于我们使用了 [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

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第12张图片

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

(5)测试

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

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

使用 Mysql 客户端到连接 MaxScale

mysql -hMaxScale所在的IP -P 4006 -u rtest -p111111

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

Mysql 5.7 主从复制的多线程复制配置方式以及读写分离中间件 MaxScale_第13张图片

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

MaxScale 的配置完成了


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


你可能感兴趣的:(mysql,运维相关)