maxscale读写分离

摘要:
一.maxscale简介1.MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。

一.maxscale简介
1.MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。

二.安装
1.安装可以通过rpm安装
2.可以直接下载文件放入指定目录,本次采用第二种方法
#tar zxvf maxscale-2.2.0.rhel.6.tar.gz
#mkdir /usr/local/maxscale
#mv ./maxscale-2.2.0/* /usr/local/maxscale/
#cp /usr/local/maxscale/etc/maxscale.cnf.template /etc/maxscale.cnf
三.账户配置
1.在主从库上授权两个账户
a.监视账户
create user maxscale_monitor@'100.100.100.%' identified by "123456";
grant replication slave, replication client on *.* to maxscale_monitor@'100.100.100.%';
b.路由账户
create user maxscale_route@'100.100.100.%' identified by "123456";
GRANT SELECT ON mysql.user TO maxscale_route@'100.100.100.%';
GRANT SELECT ON mysql.db TO maxscale_route@'100.100.100.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'100.100.100.%';
GRANT SHOW DATABASES ON *.* TO maxscale_route@'100.100.100.%';

四.读写分离配置
vi /etc/maxscale.cnf
# MaxScale documentation on GitHub:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Documentation-Contents.md
# Global parameters
#
# Complete list of configuration options:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md
[maxscale]
threads=1
log_info=1
logdir=/tmp/
# Server definitions
#
# Set the address of the server to the network
# address of a MySQL server.
#
[server1]
type=server
address=100.100.100.20
port=3306
protocol=MySQLBackend
[server2]
type=server
address=100.100.100.21
port=3306
protocol=MySQLBackend
#[server3]
#type=server
#address=
#port=3306
#protocol=MySQLBackend
# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# 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
user=maxscale_monitor
passwd=123456
monitor_interval=10000
# 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-Only Service]
# type=service
# router=readconnroute
# servers=server1
# user=myuser
# passwd=mypwd
# router_options=slave
# ReadWriteSplit documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_route
passwd=123456
max_slave_connections=100%
# This service enables the use of the MaxAdmin interface
# 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

五.启动
1./usr/local/maxscale/bin/maxscale start
2.查看状态(以下的user和password均为默认账号密码):
/usr/local/maxscale/bin/maxadmin -S /tmp/maxadmin.sock

MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 100.100.100.20 | 3306 | 0 | Master, Running
server2 | 100.100.100.21 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

测试:

mysql -h 100.100.100.22 -P 4006 -usystem -poralinux
mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql02 |
+------------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql02 |
+------------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql02 |
+------------+
1 row in set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql01 |
+------------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql02 |
+------------+
1 row in set (0.00 sec)

mysql>   

更多帮助可以使用 help命令来获得

如果想要更改maxadmin的密码在配置文件中加上

[MaxAdmin Service]
type=service
router=cli
user=maxscale
passwd=123456
3.设置服务器维护状态

MaxScale> set server server2 maintenance
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 100.100.100.20 | 3306 | 0 | Master, Running
server2 | 100.100.100.21 | 3306 | 0 | Maintenance, Slave, Running
-------------------+-----------------+-------+-------------+--------------------
4.清除维护状态
MaxScale> clear server server2 maintenance
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 100.100.100.20 | 3306 | 0 | Master, Running
server2 | 100.100.100.21 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
六.只读,按一定比例分摊读
1.配置只读服务

[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2
user=maxscale_route
passwd=123456
weightby=serv_weight
server1和server2增加分摊比例
[server1]
type=server
address=100.100.100.20
port=3306
protocol=MySQLBackend
serv_weight=3
[server2]
type=server
address=100.100.100.21
port=3306
protocol=MySQLBackend
serv_weight=2
2.配置端口
[Read-Only Listener]
type=listener
service=Read-Only Service
protocol=MySQLClient
port=4008

3.重新启动

七.filter
1.读写分离,如果slave没有问题,默认读全部走slave,但有时候我们需要能够读走master,这时候就需要配置filter
在读写分离项中配置,多个filter之前用'|'号分开

filters=Hint
[Hint]
type=filter
module=hintfilter

重启maxscale

应用在sql查询中:
select * from table where id=10; -- maxscale route to master
将使读走master

2.有时候我们希望一个数据表能到达指定服务器,则可以这样配置

[tableFilter]
type=filter
module=namedserverfilter
match=table_name1|table_name2|table_name3
options=ignorecase,extended #忽略大小写,并启用扩展配置,这将使用正则表达式
server=server1
ps:以上options中按文档应该ignorecase,extended两者都应该生效,但实际测试是发现前面的生效,后面的就不生效

读写分离路由中配置
filters=tableFilter

这将使带有table_name1,table_name2,table_name3的查询或更新,全部到达server1

免责声明:文章转载自《maxscale读写分离》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 字符串加密解密方法namesilo注册域名用来做域名邮箱下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

zabbix proxy配置实战案例

            zabbix proxy配置实战案例                                      作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.zabbix proxy概述   上一篇博客我们分享了zabbix agent有两种工作模式,即主动模式和被动模式,默认是被动模式,主动模式需要我们手动...

mysql安装使用

  linux系统 mysql-5.7.14-linux.zip部署包支持在CentOS 6.x/7.x 服务器硬盘大小要求     a) /data/mysql_data  如果存在该独立分区,要求该分区 >10G b) 如果仅存在 /data 分区, 要求该分区 >10G c) 否则,要求根分区/ > 10G MySQL_INST...

Redis系列(四)-Redis 哨兵(Sentinel)模式

Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。 可喜的是Redis从2.8开始正式提供了Redis Sentinel(哨兵) 架构来解决这个问题。Redis主从复制的缺点:没有办法对master进行动态选举,需要使用Sent...

大数据采集和抽取怎么做?这篇文章终于说明白了!

本文来源于公众号【胖滚猪学编程】,转载请注明出处! 关于数据中台的概念和架构,我们在大白话 六问数据中台和数据中台全景架构及模块解析!一文入门中台架构师!两篇文章中都说明白了。从这一篇文章开始分享中台落地实战。 其实无论是数据中台还是数据平台,数据无疑都是核心中的核心,所以闭着眼睛想都知道数据汇聚是数据中台/平台的入口。纵观众多中台架构图,数据采集与汇聚都...

mysql数据库设置外键,更新与删除选项

CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;NO A...

python之路——表操作

阅读目录   引擎介绍   表介绍   创建表   查看表结构   mysql中的数据类型   表的完整性约束   修改表结构   删除表   多表结构的创建与分析   作业 返回顶部 引擎介绍 mysql中的存储引擎(https://www.cnblogs.com/l-hf/p/11533999.html) 返回顶部 表介绍 表就相当于文...