热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于maxscale的读写分离部署笔记

使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可。基于connect方式的不要使用。



使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可。


基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记



基于connect方式的不要使用。从库延迟他还会继续分发请求过去,暂时不适合生产使用。

 

 

 

 

 

 

实验演示:

目前的主从结构:

node93     10.1.20.93 master

node94  10.1.20.94 slave

node95  10.1.20.95 slave

node96  10.1.20.96 maxscale

 

 

先在master主库上创建相关的账户:

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

 

创建监控用户,用于[MySQL Monitor]段的配置中:

> create database maxscale_schema ;    # maxscale监控用的心跳信息会写到这个库里面

> create user scalemon@'%' identified by"111111";

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

> grant all on maxscale_schema.* to scalemon@'%';

 

创建路由用户,用于[Read-Write Service]段的配置中:

> create user maxscale@'%' identified by"111111";

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

 

 

maxscale 部署:

rpm -ivh maxscale-2.0.5-1.rhel.6.x86_64.rpm

 

主要生成文件如下:

/etc/maxscale.cnf

/etc/maxscale.cnf.template

/usr/bin/cdc.py

/usr/bin/cdc_kafka_producer.py

/usr/bin/cdc_last_transaction.py

/usr/bin/cdc_users.py

/usr/bin/maxadmin

/usr/bin/maxavrocheck

/usr/bin/maxbinlogcheck

/usr/bin/maxkeys

/usr/bin/maxpasswd

/usr/bin/maxscale

/var

/var/lib

/var/lib/maxscale

 

 

 

 

创建秘钥文件:

[root@maxscale /root ]# maxkeys /var/lib/maxscale

生成加密后的密码:

[root@maxscale /root ]# maxpasswd/var/lib/maxscale/.secrets 123456

上面划掉的这2步骤我们用不到,直接在配置文件/etc/maxscale.cnf里写上明文密码就行了。(这里踩了坑,配置这个参数,导致后面maxscale起来后,无法连接到其他库提示access denied

 

 

vim/etc/security/limits.conf

    * softnofile 65535 

    * hardnofile 65535

 

vim/etc/sysctl.conf :

    fs.file-max=655350

    net.ipv4.ip_local_port_range= 1025 65000

    net.ipv4.tcp_tw_reuse= 1

 

修改完内和参数后,需要重启下服务器。

 

修改配置文件:

cat /etc/maxscale.cnf

[maxscale]

threads=auto

 

ms_timestamp=1             #timestamp精度 

syslog=1                   #将日志写入到syslog   

maxlog=1                   #将日志写入到maxscale的日志文件中 

log_to_shm=0               #不将日志写入到共享缓存中,开启debug模式时可打开加快速度 

log_warning=1              #记录告警信息 

log_notice=1               #记录notice 

log_info=1                 #记录info 

log_debug=0                #不打开debug模式 

log_augmentation=1         #日志递增 

 

# Server definitions

#

# Set the address of the server to the network

# address of a MySQL server.

#

 

# 需要把masterslave地址都配上,maxscale会自动分辨出哪个是masterslave

[server1]

type=server

address=10.1.20.93

port=3306

protocol=MySQLBackend

 

[server2]

type=server

address=10.1.20.94

port=3306

protocol=MySQLBackend

 

[server3]

type=server

address=10.1.20.95

port=3306

protocol=MySQLBackend

 

# Monitor for the servers

#

# This will keep MaxScale aware of the state of theservers.

# MySQL Monitor documentation:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Monitors/MySQL-Monitor.md

 

[MySQL Monitor]

type=monitor

module=mysqlmon

servers=server1,server2,server3    # 这里要把全部server都写上,以便maxscale去监测

user=scalemon 

passwd=111111  

monitor_interval=10000    # 每隔10s检查一次

detect_replication_lag=true     # 检查复制延迟的情况

detect_stale_master=true       # 当所有的slave都不可用时,select查询请求会转发到master

 

# Service definitions

#

# Service Definition for a read-only service and

# a read/write splitting service.

#

 

# ReadConnRoute documentation:

#https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadConnRoute.md

 

由于我们使用了 [Read-Write Service],可以删除另一个服务[Read-Only Service],注释掉下面整块儿内容即可。

# 需要把masterslave地址都配上

#[Read-Only Service]

#type=service

#router=readconnroute

#servers=server1,server2,server3

#user=maxscale           # 读写分离的账户和密码

#passwd=111111           # 读写分离的账户和密码

#router_optiOns=slave

 

# ReadWriteSplit documentation:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md

 

# 配置的读写分离,需要把masterslave地址都配上

[Read-Write Service]

type=service

router=readwritesplit

servers=server1,server2,server3

user=maxscale        # 读写分离的账户和密码

passwd=111111       # 读写分离的账户和密码

 

max_slave_cOnnections=100%         # 所有的slave提供select查询服务

max_slave_replication_lag = 5      # slave超时5秒,就把请求转发到其他slave

use_sql_variables_in = all         #

 

# This service enables the use of the MaxAdmininterface

# MaxScale administration guide:

#https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Reference/MaxAdmin.md

 

[MaxAdmin Service]

type=service

router=cli

 

# Listener definitions for the services

#

# These listeners represent the ports the

# services will listen on.

#

 

#[Read-Only Listener]

#type=listener

#service=Read-Only Service

#protocol=MySQLClient

#port=4008

 

[Read-Write Listener]

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006

 

 

[MaxAdmin Listener]

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

 

 

启动maxscale

maxscale -f/etc/maxscale.cnf

 

ss -lnt 可以看到4006端口启动了。

可以使用之前的业务账号连接到maxscale4006端口上,例如:

mysql -utest -ptest -P 4006 -h 10.1.20.96 

基于maxscale的读写分离部署笔记


注意begin;select @@hostname;commit;这种的select会在主库上执行。此外,执行存储过程或者函数时候也是会自动在主库去执行的。

 

执行SQL  > begin;select@@hostname; commit; insert into t2 select 3; select @@hostname; 对应的在/var/log/maxscale/maxscale.log记录如下:

基于maxscale的读写分离部署笔记

很明显的可以看:开启事务、插入等操作会被转发到主库去处理。而单纯的select则会被转发到某个从库去处理。

 

 

maxscale不能对master进行故障切换,可以配合使用MHA来进行。MHA的故障切换后,maxscale可以自动识别哪台机器是master。然后自动将求发送到新的主从结构中。

 

 

maxscale的延迟检测:

pt-heartbeat的原理类似。maxscale会对masterslavereplication_heartbeat表的master_timestamp时间戳进行对比,相减得出差异。这个差异就是MySQL主从同步的延迟值。

 

select * frommaxscale_schema.replication_heartbeat;

基于maxscale的读写分离部署笔记



从库故障或延迟过大会被自动剔除:

我们可以在192.168.2.12stop slave; 稍等片刻,再执行查询操作的话,会发现请求不会被转发到192.168.2.12mysql上,maxscale里面自动将这个机器踢下线了。如下图:

基于maxscale的读写分离部署笔记


192.168.2.12 出现延迟,则在maxscale日志显示如下:基于maxscale的读写分离部署笔记


192.168.2.12 3306端口不通(可能mysqld挂掉或者服务器宕机),则在maxscale日志显示如下:

基于maxscale的读写分离部署笔记




其他后补充进笔记的,管理maxscale的一些命令

maxadmin -S /tmp/maxadmin.sock 

基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记

基于maxscale的读写分离部署笔记





推荐阅读
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
sawachan_107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有