一.maxscale简介
1.MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。
2.官网:
https://mariadb.com/kb/en/mariadb-enterprise/mariadb-maxscale-20/

二.安装
1.安装可以通过rpm安装
2.可以直接下载文件放入指定目录,本次采用第二种方法

#wget https://downloads.mariadb.com/MaxScale/2.0.2/centos/5Server/x86_64/maxscale-2.0.2.centos.5.tar.gz
#tar zxvf maxscale-2.0.2.centos.5.tar.gz
#mkdir /usr/local/maxscale
#mv ./maxscale-2.0.2/* /usr/local/maxscale/
#cp /usr/local/maxscale/etc/maxscale.cnf.template /etc/maxscale.cnf

修改启动脚本,使其可以提供service服务

#cp /usr/local/maxscale/share/maxscale/maxscale /etc/init.d/maxscale
#vi /etc/init.d/maxscale

将脚本中的///bin替换为/usr/local/maxscale/bin/maxscale
这将可以使用 service maxscale start|stop|restart启动停止或重启maxscale

三.账户配置
1.在主从库上授权两个账户
a.监视账户

create user maxscale_monitor@'192.168.1.%' identified by "123456";
grant replication slave, replication client on *.* to maxscale_monitor@'192.168.1.%';

  

b.路由账户

create user maxscale_route@'192.168.1.%' identified by "";
GRANT SELECT ON mysql.user TO maxscale_route@'192.168.1.%';
GRANT SELECT ON mysql.db TO maxscale_route@'192.168.1.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.1.%';
GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.1.%';

四.读写分离配置
0.vi /etc/maxscale.cnf
基本配置

[maxscale]
# 开启线程个数,默认为1.设置为auto会同cpu核数相同
threads=auto
# timestamp精度
ms_timestamp=1
# 将日志写入到syslog中
syslog=1
# 将日志写入到maxscale的日志文件中
maxlog=1
# 不将日志写入到共享缓存中,开启debug模式时可打开加快速度
log_to_shm=0
# 记录告警信息
log_warning=1
# 记录notice
log_notice=1
# 记录info
log_info=1
# 不打开debug模式
log_debug=0
# 日志递增
log_augmentation=1 # 相关目录设置
basedir=/usr/local/maxscale/
logdir=/u01/maxscale/logs/trace/
datadir=/u01/maxscale/data/
cachedir=/u01/maxscale/cache/
piddir=/u01/maxscale/tmp/

  

1.读写分离配置
a.配置两个server

[server1]
type=server
address=192.168.1.126
port=3306
protocol=MySQLBackend
serv_weight=3 #读的比重 [server2]
type=server
address=192.168.1.84
port=3306
protocol=MySQLBackend
serv_weight=2 #读的比重

  

b.配置monitor

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=maxscale_monitor
passwd=123456
monitor_interval=10000

  

c.配置读写分离

[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_route
passwd=123456
max_slave_connections=100% #所有的slave提供select查询服务
#use_sql_variables_in=all #动态参数可以走全部的数据库 [all|master] 如果设置为master的话前台看到的中文是乱码,一般建议设置为all
#weightby=serversize #权重设置
#enable_root_user=1 #允许root用户登录执行
master_accept_reads=true #master是否接受读请求
#auth_all_servers=true #
#log_auth_warnings=true #身份验证失败和警告的日志记录,记录那些试图连接到MaxScale和来自哪里
#filters=Hint #强制select走master的选项

  

d.配置端口

[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006 [MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
port=6603
socket=default

  

五.启动
1./usr/local/maxscale/bin/maxscale start
2.查看状态(以下的user和password均为默认账号密码):
/usr/local/maxscale/bin/maxadmin --user=admin --password=mariadb
(/usr/local/maxscale/bin/maxadmin -S /tmp/maxadmin.sock #使用该项也可以登录)

MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 2 | Master, Running
server2 | 192.168.1.84 | 3306 | 2 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

  

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

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

[MaxAdmin Service]
type=service
router=cli
user=maxscale
passwd=123456

  

3.设置服务器维护状态

MaxScale> set server server2 maintenance
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 1 | Master, Running
server2 | 192.168.1.84 | 3306 | 0 | Maintenance, Slave, Running

  

4.清除维护状态

MaxScale> clear server server2 maintenance
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.1.126 | 3306 | 3 | Master, Running
server2 | 192.168.1.84 | 3306 | 3 | 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=192.168.118.126
port=3306
protocol=MySQLBackend
serv_weight=3 [server2]
type=server
address=192.168.118.84
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

八.测试和总结
1.如果你有用过mycat和amoeba,你将会发现maxscale配置更加简单一些,与前两者相比,maxscale并没有使用连接池(不知道是不是我理解有误)
2.mycat和amoeba作为中间件,客户端在连接时候,账号和密码是在其配置文件中指定.但maxscale并不是,而是要求在后端(server1和server2)上定义账号,maxscale并不验证账号密码正确性,而是有后端去验证.
这项相比前两者,更加透明.

maxscale的更多相关文章

  1. MaxScale:实现MySQL读写分离与负载均衡的中间件利器

    1. MaxScale 是干什么的? 配置好了 MySQL 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡 是MySQL集群的 ...

  2. Ubuntu之MaxScale安装配置

    原文github:https://github.com/mariadb-corporation/MaxScale/blob/develop/Documentation/Documentation-Co ...

  3. 编译maxscale

    编译maxscale,需要依赖mariadb版本的MySQL.有自己的版本就是任性啊

  4. maxscale读写分离

    今天,写写mysql兄弟公司maridb开发的一个读写分离,既然是兄弟,那也适用于mysql. 1.安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-d ...

  5. docker环境 mysql读写分离 mycat maxscale

    #mysql读写分离测试 环境centos 7.4 ,docker 17.12 ,docker-compose mysql 5.7 主从 mycat 1.6 读写分离 maxscale 2.2.4 读 ...

  6. MariaDB MaxScale

    1. down https://mariadb.com/downloads/#mariadb_platform-mariadb_maxscale (1) install sudo yum locali ...

  7. Maxscale安装-读写分离(1)

    前言 关于MySQL中间件的产品也很多,之前用过了360的Atlas.玩过MyCat.这边我选择 Maxscale的原因就是功能能满足需求,也看好他的未来发展. 其实有关于如何安装 Maxscale的 ...

  8. MaxScale初探

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mrcto.blog.51cto.com/1923168/1437287 内容预览 ...

  9. 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

    本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  ...

随机推荐

  1. Linux下对比两个文件夹的方法

    最近拿到一份源代码,要命的是这份源代码是浅克隆模式的git包,所以无法完整显示里面的修改的内容. 今天花了一点点时间,找了一个在Linux对比两个文件夹的方法. 其实方法很简单,用meld 去对比两个 ...

  2. WEB API异常处理

    当一个web api抛出一个异常后 此异常会被转化成一个HTTP响应 错误代码为500的服务错误 但是如果你不想让客户端看到500的错误码 你也可以自定义错误码 如下代码当用户输入的ID没有与之相关的 ...

  3. Servlet 之 HttpServlet

    package cn.jiemoxiaodi.http; import java.io.IOException; import javax.servlet.GenericServlet; import ...

  4. Memcache之内存分配机制

    可参见:http://blog.csdn.net/hguisu/article/details/7353482

  5. 基于NPOI的报表引擎——ExcelReport

    前言 其实现在说ExcelReport是报表引擎还为时尚早,但该组件我既然要决心维护下去,这便算是初衷吧! 1.现在,ExcelReport能为你做什么呢? 如果,你有导出数据到Excel的需求,Ex ...

  6. 【Java EE 学习 23】【log4j的使用】【ant的使用】【内省】

    一.ant下载地址:http://ant.apache.org/bindownload.cgi  二.log4j下载地址:http://logging.apache.org/log4j/2.x/dow ...

  7. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  8. myeclipse eclipse 使用git插件访问github 的解决方案

    具体的步骤很多帖子都有写,这里不再赘述,需要说明的一点,git插件的版本很重要,在官网上下载的最新版本在MyEclipse8.5,MyEclipse9.1,MyEclipse10上面都没有成功. 这里 ...

  9. 数据的平面拟合 Plane Fitting

    数据的平面拟合 Plane Fitting 看到了一些利用Matlab的平面拟合程序 http://www.ilovematlab.cn/thread-220252-1-1.html

  10. 已解决:Strict Standards: Only variables should be passed by reference in

    今天安装ecshop的时候最上面出现了一个错误提示:Strict Standards: Only variables should be passed by reference in F:\www.x ...