临夏城乡建设局网站,在线做动漫图片视频在线观看网站,seo排名赚钱,安徽工程建设信息网Maxscale介绍
MaxScale是maridb开发的一个mysql数据中间件#xff0c;其配置简单#xff0c;能够实现读写分离#xff0c;并且可以根据主从状态实现写库的自动切换。 使用Maxscale无需对业务代码进行修改#xff0c;其自带的读写分离模块#xff0c;能够解析SQL语句…Maxscale介绍
MaxScale是maridb开发的一个mysql数据中间件其配置简单能够实现读写分离并且可以根据主从状态实现写库的自动切换。 使用Maxscale无需对业务代码进行修改其自带的读写分离模块能够解析SQL语句从而把对应的请求转发到对应的服务器上。 注MaxScale需要MariaDB至少 10.3.1 以上版本的支持版本过低可能导致部分功能无法使用。 MariaDB MaxScale 2.2版本在支持原有读写分离的基础上又添加了主从复制集群管理功能 MariaDB MaxScale 2.5版本实现了GUI图形化、可视化监控管理web页面。
环境说明
数据库Mariadb10.3.37 Maxscale2.5.4
名称操作系统IP备注Maxscale代理Centos7192.168.1.203可以和应用服务器也可由单独配置一台服务器MasterCentos7192.168.1.154读写SlaveCentos7192.168.1.161只读
架构图 客户端通过Maxscale把请求转发给Master或者Slave如果Master连接出现故障则把请求转发给Slave
配置主从服务器
在MariaDB中只要开启了binlog所有的DML和DDL都会形成事件并且写入其中并且每一件事务都会生成全局唯一的事务IDGlobal transaction ID全局事务ID简称GTID。 GTID是属于全局唯一所以无需过多配置从机可通过GTID同步主机binlog文件从而形成主从架构在实际生产环境中能够提高数据库容错率
配置Master(192.168.1.154)服务器
Master-mariadb配置文件
复制配置文件到**/etc/my.cnf.d/**目录下
#########################
# 配置binlog选项 #
########################## 开启binlog
log-bin# 开启副本记录binlog日志
log-slave-updates ON# binlog记录方式为行
binlog_formatROW# 30天内清理binlog日志
expire_logs_days 30# 统一主从复制LOG名称,包含如下log-bin, log-bin-index, relay-log, relay-log-index, general-log-file,
# log-slow-query-log-file, --log-error-file, and pid-file.
log-basename master1# 开启记录binlog的库名多个用,分割
# binlog-do-db test#########################
# 以下为GTID主从复制选项#
########################## 开启半同步
# 10.3以插件方式安装
plugin-load rpl_semi_sync_mastersemisync_master.so
rpl-semi-sync-master-enabled 1# 10.3之后集成到了系统内只需开启插件即可
plugin_load_add semisync_master
rpl_semi_sync_master_enabled ON
rpl_semi_sync_master_wait_pointAFTER_SYNC # 开启半同步# 配置Master,ServerID,不能和Slave重复
server-id 100# 开启Master记录Slave binlog日志前提Slave需要开启binlog
log-slave-updates1# 开启GTID严格模式
gtid_strict_mode1查看Master同步是否成功
SHOW VARIABLES LIKE rpl_semi_sync_master_enabled;
-------------------------------------
| Variable_name | Value |
-------------------------------------
| rpl_semi_sync_master_enabled | ON |
-------------------------------------
1 row in set (0.001 sec)配置Master监控账户
监控用于监控节点服务器工作状态出现故障时可以自动迁移
CREATE USER maxscale_monitor% IDENTIFIED BY maxscale123456;
GRANT RELOAD,SUPER,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO maxscale_monitor%;# 查看授权
SHOW GRANTS FOR maxscale_monitor%;配置Master路由账户
Maxscale需要对传入的客户请求进行后端身份验证所以要创建一个特殊账户做验证。在代理服务器执行如下命令
CREATE USER maxscale_route% IDENTIFIED BY maxscale123456;
GRANT SELECT ON mysql.user TO maxscale_route%;
GRANT SELECT ON mysql.db TO maxscale_route%;
GRANT SELECT ON mysql.tables_priv TO maxscale_route%;
GRANT SELECT ON mysql.columns_priv TO maxscale_route%;
GRANT SELECT ON mysql.procs_priv TO maxscale_route%;
GRANT SELECT ON mysql.proxies_priv TO maxscale_route%;
GRANT SELECT ON mysql.roles_mapping TO maxscale_route%;
GRANT SHOW DATABASES ON *.* TO maxscale_route%;
GRANT SELECT ON mysql.* TO maxscale_route%;# 查看授权
SHOW GRANTS FOR maxscale_route%;制作、恢复Slave备份
制作Master备份用于恢复到Slave服务器制作备份推荐使用**MariaDB-backup**这样制作和恢复速度比较快能节省非常多的时间
安装MariaDB-backup
在Master和Slave安装MariaDB-backup
yum install MariaDB-backup开始创建Slave备份
在Master执行
# 创建备份文件
mariabackup --backup --target-dir/backup/dbbak --userroot --passwordtest123456# 生成预恢复文件
mariabackup --prepare --target-dir/backup/dbbak参数说明 –backup创建指定动作为备份 –target-dir/backup/dbbak指定Master全备文件存放目录 –userroot --passwordtest123456指定数据库用户名和密码 –prepare指定动作为预恢复 –target-dir/backup/dbbak 指定刚才创建的全备存放目录
复制备份文件到Slave从机
scp -r /backup/dbbak root192.168.1.161:/home/user恢复Master备份到Slave从机
恢复时需要停掉Slave mariadb服务并且清空mariadb数据目录 在Slave执行
# 停止服务
systemctl stop mariadb# 清空目录rm -rf /home/mysql/*锁Master库
在恢复从库时为避免主库产生事务导致GTID改变需要锁住主库 在Master执行
FLUSH TABLES WITH READ LOCK;开始Slave恢复
在Slave执行
mariabackup --copy-back --target-dir/home/user/dbbak#重新授权
chown -R mysql:mysql /home/mysql/#启动服务
systemctl start mariadb–copy-back : 指定动作为恢复备份恢复时保留备份文件 –target-dir指定恢复文件目录
解锁Master
待Slave恢复完成后解锁Master
UNLOCK TABLES;配置Slave(192.168.1.161)服务器
Master-mariadb配置文件
复制配置文件到**/etc/my.cnf.d/**目录下
#########################
# 配置binlog选项 #
########################## 开启binlog
log-bin# 开启副本记录binlog日志
log-slave-updates ON# binlog记录方式为行
binlog_formatROW# 30天内清理binlog日志
expire_logs_days 30# 统一主从复制LOG名称,包含如下log-bin, log-bin-index, relay-log, relay-log-index, general-log-file,
# log-slow-query-log-file, --log-error-file, and pid-file.
log-basename master1# 开启记录binlog的库名多个用,分割
# binlog-do-db test#########################
# 以下为GTID主从复制选项#
########################## 开启半同步
# 10.3以插件方式安装
plugin-load rpl_semi_sync_slavesemisync_slave.so
rpl-semi-sync-slave-enabled 1# 10.3之后集成到了系统内只需开启插件即可
# 从库开启半同步
plugin_load_add semisync_slave
rpl_semi_sync_slave_enabledON# 配置ServerID,不能和master重复
server-id 200# 开启Master记录Slave binlog日志前提Slave需要开启binlog
log-slave-updates1# 开启GTID严格模式
gtid_strict_mode1# 开启Slave并行复制
slave_parallel_threads4# 开启Slave从Master读取binlog时进行完整校验
master-verify-checksum1# 只允许读不允许写
read only1配置Slave同步监控账户
由于主备配置文件已包含此步可以掠过
配置Slave路由账户
由于主备配置文件已包含此步可以掠过
查看Slave同步是否成功
出现**rpl_semi_sync_slave_enabledON**说明开启成功
SHOW VARIABLES LIKE rpl_semi_sync_slave_enabled;
------------------------------------
| Variable_name | Value |
------------------------------------
| rpl_semi_sync_slave_enabled | ON |
------------------------------------
1 row in set (0.001 sec)配置同步信息
配置同步信息首先要获取Master的binlog名称、position点和最后一次的GTID号可以在上面的备份文件**xtrabackup_info**中获取到
# 在从库执行
cat /home/mysql/xtrabackup_info# 找到如下选项就是
binlog_pos filename master1-bin.000009, position 598081860, GTID of the last change 0-100-2622在Slave配置同步Master的信息
# 登录mysql
mysql -u root -p# 在从库mysql执行
CHANGE MASTER TOMASTER_HOST192.168.1.154,MASTER_USERmaxscale_monitor,MASTER_PASSWORDmaxscale123456,MASTER_PORT3306,MASTER_LOG_FILEmaster1-bin.000011,MASTER_LOG_POS598081860,MASTER_USE_GTIDslave_pos,MASTER_CONNECT_RETRY10;启动Slave
# 登录mysql
mysql -u root -p# 启动从机
START SLAVE;# 查看从机工作状态
SHOW SLAVE STATUS \G
测试同步
测试数据增删改查
如果出现如下两个选项说明Slave同步Master成功
# 出现如下两个选项说明启动成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes数据同步需要一些时间长短关系到网速以及主库和从库之间的binlog数据偏移量 在Master查看
MariaDB [mysql] SHOW MASTER STATUS \G
*************************** 1. row ***************************File: master1-bin.000011Position: 64952Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)在Slave查看 如果 Master_Log_File: master1-bin.000011 Read_Master_Log_Pos: 64952 和主库里的一致说明同步正常接下来可以进行测试了
MariaDB [(none)] SHOW SLAVE STATUS \G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.154Master_User: maxscale_monitorMaster_Port: 3306Connect_Retry: 10Master_Log_File: master1-bin.000011Read_Master_Log_Pos: 64952在主库表里进行增删改查查看从库表里数据是否正常并且上面的参数主库和从库一致说明同步完全正常
测试同步Binlog同步
在网上看到在配置Slave同步信息时不要设置Master_Log_File原因是当主服务器切换记录binlog文件时从服务器将无法切换到对应的文件如果需要自动配置从库切换Binlog则需要将Master_Log_File参数留空即可。
CHANGE MASTER TO MASTER_HOST192.168.1.154,
MASTER_PORT3306,
MASTER_USERmaxscale_monitor,
MASTER_PASSWORDmaxscale123456,
# MASTER_LOG_FILEmaster1-bin.000011, # 此参数不要设置
MASTER_USE_GTIDslave_pos,
MASTER_CONNECT_RETRY10;在Master执行切换binlog和查看binlog
# 手动切换LOG
MariaDB [vipshop] FLUSH LOGS;
Query OK, 0 rows affected (0.015 sec)#查看Binlog名称和检查点
MariaDB [mysql] SHOW MASTER STATUS;
--------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
--------------------------------------------------------------
| master1-bin.000012 | 389 | | |
--------------------------------------------------------------
1 row in set (0.000 sec)在Slave执行查看是否和Master一致
MariaDB [(none)] SHOW SLAVE STATUS \G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.154Master_User: maxscale_monitorMaster_Port: 3306Connect_Retry: 10Master_Log_File: master1-bin.000012Read_Master_Log_Pos: 389然后再次在主库执行增删改查查看从库和主库数据是否一致如果一致则说明同步正常;
报错简单排查
如果未提示error connecting to master maxscale_monitor192.168.1.154:3306请做如下检查
防火墙是否关闭或者允许3306端口通行;密码是否正确;授权是否正确
详细排错可以查看这篇文章https://www.yingsoo.com/news/database/69306.html
安装maxscale
添加mariadb源
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-maxscale-version2.5安装
如果maxscal和应用服务器一台在应用服务器上安装即可如果maxscale是单独的一台在maxscal上安装即可
yum install maxscale -ymaxscale配置文件
maxscale的配置文件在/etc/根目录下 首先复制一份保留个备份
cp /etc/maxscale.cnf /etc/maxscale.cnf.bak前面的英文注释为官方文档不明白的可以去官方文档查看
# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25/# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/# 全局模块
# 开启maxscale线程,默认为1最大为100;
# 如果maxscal为单独服务器建议设置为auto;
# 如果maxscal和其他应用在同一服务器建议设置为1根据需求逐步添加;
[maxscale]
threads1# 开启maxscale记录info信息
log_info1# 关闭debug调试信息
# log_debug0# 关闭消息扩展
log_augmentation0# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#
# 主机模块
# 定义主从服务器连接信息,有几台就配置几台
# 连接方式可以为ip:port或者使用socket[server1]
typeserver
address192.168.1.154
# 注意socket 与 IP:PORT 冲突只能选其一。同时需要注意MariaDB的GRANT配置。
# socket/var/lib/mysql/mysql.sock
port3306
protocolMariaDBBackend[server2]
typeserver
address192.168.1.161
port3306
protocolMariaDBBackend# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/maxscale-25-monitors/# 配置故障转移模块
[MariaDB-Monitor]
typemonitor
modulemariadbmon
# 监控的服务器
serversserver1,server2
# 配置监控账号和密码
usermaxscale_monitor
passwordmaxscale123456
# 心跳检测2000秒监测一次也就是2秒
monitor_interval2000# 启用自动故障转移false为关闭需要人工执行命令去做故障转移通常为true
auto_failovertrue
# 启用故障恢复后自动加入集群,false为关闭需要人工在从库执行CHANGE MASTER TO NEW_MASTER, MASTER_USE_GTID current_pos命令通常为true
auto_rejointrue# Service definitions# ReadConnRoute documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25-readconnroute/# 服务模块
# ReadWriteSplit documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-25-readwritesplit/# 读写分离模块
# 基于statement SQL解析的方式
[Read-Write-Service]
typeservice
routerreadwritesplit
router_optionsmaster,slave
serversserver1,server2
# 路由账号
usermaxscale_route
passwordmaxscale123456# root用户远程访问
# enable_root_user1# 允许主服务器读用于服务器少的情况下
master_accept_readstrue# 路由模块处理主服务器故障时的方法默认主库出现故障时此时有写请求maxscale会断开连接;
# 值为error_on_write当主库出现问题无法写入时会提示客户端目前处于只读模式
master_failure_modeerror_on_write
# 和上个参数配合当主库恢复正常时客户端有写请求,恢复正常
master_reconnectiontrue# 启用因果读取
# 例如主库上写入了一条数据从库还没来得写入该记录。那么可以通过设置causal_readslocal
# 此时客户端在从库上查询会hang住直至等待causal_reads_timeout1010秒后请求会强制转发给master
causal_readslocal
causal_reads_timeout10# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
## 配置监听模块
[Read-Write-Listener]
typelistener
serviceRead-Write-Service
protocolMariaDBClient
# 应用连接这个端口
port4006启动服务
systemctl start maxscale如果启动报错可以查看maxscale文档
cat /var/log/maxscale/maxscale.log 测试
maxctrl操作命令
通过maxctrl后台管理命令查看主从复制集群状态信息命令如下
[rootloacl maxscale]# maxctrl list servers # 查看注册的主机
┌─────────┬───────────────┬──────┬─────────────┬─────────────────┬────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server1 │ 192.168.1.154 │ 3306 │ 0 │ Master, Running │ 0-100-2700 │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server2 │ 192.168.1.161 │ 3306 │ 0 │ Slave, Running │ 0-100-2700 │
└─────────┴───────────────┴──────┴─────────────┴─────────────────┴────────────┘[root203 maxscale]# maxctrl list services # 查看注册服务
┌────────────────────┬────────────────┬─────────────┬───────────────────┬──────────────────┐
│ Service │ Router │ Connections │ Total Connections │ Targets │
├────────────────────┼────────────────┼─────────────┼───────────────────┼──────────────────┤
│ Read-Write-Service │ readwritesplit │ 0 │ 0 │ server1, server2 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴──────────────────┘更多命令参考官方文档https://kb-prod.mariadb.com/kb/en/mariadb-maxscale-6-maxctrl/
创建测试用户
在主库执行创建程序连接用户名/密码
MariaDB [(none)] CREATE USER test;
Query OK, 0 rows affected (0.004 sec)MariaDB [(none)] GRANT SELECT, INSERT, UPDATE,INDEX,CREATE VIEW, EXECUTE, SHOW VIEW, EVENT, TRIGGER ON test.* TO test% IDENTIFIED BY 123456;
Query OK, 0 rows affected (0.002 sec)MariaDB [(none)] GRANT SELECT ON mysql.proc TO test%;
Query OK, 0 rows affected (0.002 sec)使用 Mysql 客户端到连接 MaxScale
开始测试
-P 4006为maxscale的端口
# 登录maxscale
[root203 maxscale]# mysql -u test -h 192.168.1.203 -P 4006 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 10.3.37-MariaDB-log MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type help; or \h for help. Type \c to clear the current input statement.# 使用查询当前主机名字发现为slave从库
MariaDB [(none)] select hostname;
------------
| hostname |
------------
| slave |
------------
1 row in set (0.00 sec)# 开启事务
MariaDB [(none)] start transaction;
Query OK, 0 rows affected (0.00 sec)# 查询当前主机名为master主库
MariaDB [(none)] select hostname;
------------
| hostname |
------------
| pev.154 |
------------
1 row in set (0.01 sec)# 回滚事务
MariaDB [(none)] rollback;
Query OK, 0 rows affected (0.00 sec)# 再次查询发现
MariaDB [(none)] select hostname;
------------
| hostname |
------------
| slave |
------------
1 row in set (0.00 sec)
文章来源
https://www.cnblogs.com/backups/p/maridb_maxscale.html 官方文档 https://mariadb.com/kb/en/mariadb-maxscale-25-setting-up-mariadb-maxscale/ https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/ 主从常见错误 https://www.yingsoo.com/news/database/69306.html