MaxScale Binlog Server实践

MaxScale Binlog Server实践

简介

Part1:写在最前

在之前的博文中有说到MaxScale,作为中间件,配合MHA使用或者主从使用可实现读写分离和负载均衡,今天简单介绍下MaxScale作为Binlog Server来减少主从延迟的问题;MySQL的主从架构中,链式拓扑的架构比较容易出现主从延迟的问题。本文着重介绍MaxScale作为Binlog Server是如何降低主从延迟的。

MaxScale配合MHA请移步至:

http://suifu.blog.51cto.com/9167728/1869520

Part2:本文环境

HE1:192.168.1.248 slave

HE3:192.168.1.250 master

HE4:192.168.1.251 maxscale

架构演示

实战

Part1:安装maxscale

[[email protected] ~]# yum -y install maxscale-2.0.1-2.centos.6.x86_64.rpm

[[email protected] ~]# mkdir -p /data/binlog

[[email protected] ~]# useradd maxscale

[[email protected] ~]# chown -R maxscale. /data/binlog

[[email protected] ~]# cat /etc/maxscale.cnf

[maxscale]
threads=1
##根据CPU核数设置
[Replication]
type=service
router=binlogrouter
user=mysync
passwd=MANAGER
# 使用主库上的repl复制账号
# 权限:
#   GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘repl‘@‘%‘ IDENTIFIED BY   ‘repl‘;
router_options=server_id=1251,heartbeat=30,binlogdir=/data/binlog,transaction_safety=1,mariadb10-compatibility=1,send_slave_heartbeat=1
# server_id设置maxscale的,记得不能与主和从库重复,要唯一
#   heartbeat=30秒,意思为当maxscale在30秒内没有接收到主库推送的binlog日志,发送心跳检查
#   binlogdir设置接收binlog的存放路径,目录属性chown -R maxscale.maxscale   /data/binlog
# transaction_safety=1此参数用于启用binlog日志中的不完整事务检测。   当MariaDB MaxScale启动时,如果当前binlog文件已损坏或找到不完整的事务,则可能会出现错误消息。   在正常工作期间,binlog事件不会分配到从库,直到事务已经提交。 默认值为off,设置transaction_safety = on以启用不完全事务检测。
#   send_slave_heartbeat=1开启心跳检查
[Replication   Listener]
type=listener
service=Replication
protocol=MySQLClient
port=5308
# 后端的从库CHANGE   MASTER TO这个端口,默认5308
[CLI]
type=service
router=cli
[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
port=6603

Part2:启动Maxscale

[[email protected] ~]# /etc/init.d/maxscale start

Starting MaxScale: maxscale (pid 16680) is running...      [  OK  ]

[[email protected] ~]# /etc/init.d/maxscale status

Checking MaxScale status: MaxScale (pid  16680) is running.[  OK  ]

Part2:从库配置

[[email protected] ~]# mysql -umysync -pMANAGER -h192.168.1.251 -P5308
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3196
Server version: 10.0.0 2.0.1-maxscale
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
MySQL [(none)]>  CHANGE MASTER TO MASTER_HOST=‘192.168.1.250‘,MASTER_USER=‘mysync‘,MASTER_PASSWORD=‘MANAGER‘,MASTER_PORT=3306,MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=20;
ERROR 1234 (42000): Can not set MASTER_LOG_POS to 20: Permitted binlog pos is 4. Specified master_log_file=mysql-bin.000005
MySQL [(none)]>  CHANGE MASTER TO MASTER_HOST=‘192.168.1.250‘,MASTER_USER=‘mysync‘,MASTER_PASSWORD=‘MANAGER‘,MASTER_PORT=3306,MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=4;
MySQL [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

这里可以看出,Maxscale binlog server只能从位置4开始配置

配置好后,在/data/binlog下生成的binlog文件

[[email protected] ~]# cd /data/binlog/

[[email protected] binlog]# ls

cache  master.ini  mysql-bin.000003

Part2:主库配置

[[email protected] ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.1.16-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      652 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MariaDB [(none)]>  grant replication client,replication slave on *.* to ‘mysync‘@‘192.168.1.%‘ identified by ‘MANAGER‘;
MariaDB [(none)]>flush privileges;

Part3:主从配置

从库指向binlogserver
[[email protected] ~]# mysql -uroot -pMANAGER
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.16-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘192.168.1.251‘,MASTER_USER=‘mysync‘,MASTER_PASSWORD=‘MANAGER‘,MASTER_PORT=5308,MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=652;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.251
                  Master_User: mysync
                  Master_Port: 5308
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 652
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 652
              Relay_Log_Space: 835
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1250
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative
1 row in set (0.00 sec)


——总结——

生产环境中,大多采用的是一主多从架构,例如星状拓扑和链式拓扑,星状拓扑在从库过多的情况下,会增加主库的io压力,而链式拓扑虽然缓解了主库的网络IO压力,但其缺点是:二级Slave得到最新的数据,需要再经过一层的复制才到达,期间的延迟比一主多从架构要大。而采用maxscale binlog server则避免了这类问题。由于者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

时间: 2024-10-11 12:04:12

MaxScale Binlog Server实践的相关文章

MaxScale binlog server的搭建

官方手册: https://mariadb.com/resources/blog/binlog-server 参考文章: http://www.linuxidc.com/Linux/2016-12/137892.htm http://www.sohu.com/a/120438391_487514 缺点:目前binlog server还不支持GTID的复制. 实验拓扑图: 步骤1: Node1上创建复制权限的账户: > grant replication client,replication sl

MySQL binlog server

从5.6版本开始,可以利用 mysqlbinlog命令把远程机器的日志备份到本地目录,这样就更加方便快捷的实现一个binlog server. 环境介绍:192.168.56.100是备份服务器,192.168.56.101是需要备份binlog的MySQL服务器. 重点参数介绍: -R,--read-from-remote-server  代表从远程MySQL服务器上读取binlog. -raw  以binlog格式存储日志,方便后期使用. --stop-never  连接到远程的MySQL服

近期一些新技术文章汇总

1.MySQL链式复制加速神器: MaxScale Binlog Server(附视频) 2.MariaDB新版本实力逆袭,不仅仅是MySQL的替代品 3.MariaDB ColumnStore初探(1):安装.使用及测试 4.如何使用与维护,才能把MySQL GR发挥到极致? 5.一个参数救活被hang住的数据库! 6.安利一款运维杀手锏,让监控部署不再尴尬!(附视频) 7.DBA的40条军规 8.DB账号防泄密,请立刻为数据库加把锁!(附演示视频) 9.MariaDB Spider:实现My

使用mysqlbinlog server远程备份binlog的脚本

#注意,备份机到远程mysql服务器需要免密钥登录,此脚本放到计划任务中每五分钟执行一次,避免mysqlbinlog server进程长时间挂掉无人知晓 cat backup_binlog.sh #!/bin/bash [ -e /etc/profile ] && source /etc/profile || exit 0 #本地binlog路径 local_binlog_dir=/data/3306/247binlog [ ! -d "$local_binlog_dir&quo

mysql的binlog详解

binlog是mysql记录操作的二进制日志文件,有三种格式可选,但是老旧的SBR已经不适合现在大多数业务需求,所以大多数都建议用MBR和RBR,即mixed或row,而解析他的原因,几乎都只有一个,就是恢复数据库,或者是反编译来恢复数据库,目的都是一样. 以下是基于mysql5.6的mysqlbinlog来描述的,请各位知照. 下面转入正题: 先简单看看binlog使用方法 只查看第一个binlog文件的内容(不建议) show binlog events; 查看指定binlog文件的内容(不

mysql时点还原全备+binlog的快速方法

适合mysql版本:4.1~5.7 所有数据库机器损坏,只有全备和binlog情况下恢复数据库到某个时间点 方法1:全备+binlog server 准备两台机器:binlog server机器,恢复机器 1.构造binlog server把所有的binlog文件拷贝到一台机器,这个机器叫master binlog server这个机器安装好mysql空实例,然后设置好Server-id ,auto.cnf(server-uuid)master binlog server:Server-id 从

使用MySQL自身复制来恢复binlog

如果需要恢复的二进制日志较多,较复杂,强烈建议使用MySQL自身复制来恢复binlog,而不要使用mysqlbinlog. 目录 [hide] 1. 如何操作 1.1 将binlog作为relay log来执行 1.2 从专门构建的binlog server上拉binlog 2. 其他需要注意的事项 在MySQL手册中一直是推荐使用mysqlbinlog工具来实现指定时间点的数据恢复,事实上,这是一个经常"让人郁闷"的办法.更好的办法是,使用MySQL内部复制线程中的SQL Threa

从 Spring Cloud 开始,聊聊微服务架构实践之路

[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用

从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为.net+sqlserver: 表示层 位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用的是基于.