1,术语
Maxscale 是一个C语言实现的智能代理(intelligent proxy),提供读写分离,负载均衡和高可用性。它同时维护client端请求的连接以及到后端server的连接。
使用maxscale搭建的读写分离架构,再结合MHA做master的故障转移,业务层面上不需要做任何的改动。
1)server an individual database server 独立的、client应用端可以通过maxscale连接的数据库。maxadmin list servers
[server-master]
type=server
address=10.103.131.39
port=3306
protocol=MySQLBackend
persistpoolmax=500
persistmaxtime=1000
2)service a set of databases with a specific access mechanism带有特定访问策略的数据库集合
##给应用提供只读/写的端口
[read-connection-based-service]
type=service
router=readconnroute ## provide either a read or write port for an application.
servers=server-master, server-slave-1, server-slave-2
user=maxscale_one ##service需要获取mysql.user表的用户信息。
passwd=938EAF7E729090812ABA91FFA4C47BCB
router_options=slave ##指定只在slave之间负载均衡。valid types servers
[readwrite-statement-based-service]
type=service
router=readwritesplit
servers=server-master, server-slave-1, server-slave-2
user=maxscale_one
passwd=938EAF7E729090812ABA91FFA4C47BCB
max_slave_connections=100%
max_slave_replication_lag=10
3)router 通过maxscale提供的service接口,将client的requests路由到数据库集合
connection based routing 一旦一个连接建立,通过这个链接的所有请求,都会路由到单独的数据库
statement based routing 每个request单独处理,可能会被路由到一个或者多个server
4)protocol 用来和另一个软件实体交流的模块
module 运行时可以进行加载
image.png
image.png
5)monitor 监控一组server,它需要监控用户
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server-master,server-slave-1,server-slave-2
user=maxscale_one ## 监控用户名
passwd=938EAF7E729090812ABA91FFA4C47BCB
monitor_interval=1000
detect_replication_lag=true
detect_stale_master=true
6)Listener 监听来自应用client的连接,关联一个单独的service。但是一个service可以关联多个Listener(可以有多个端口)。represent the ports the services will listen on 代表service(db集合)监听的端口。
[Read-Only Listener]
type=listener
service=read-connection-based-service
protocol=MySQLClient
port=4006
[Read-Write Listener]
type=listener
service=readwrite-statement-based-service
protocol=MySQLClient
port=4008
7)filter 在client和router之间,所有的client data都会经过filter,可以被检查和修改。
2,细节
1)maxscale使用监控用户,从db中读取mysql.user的信息,缓存到maxscale中。用于用户验证
2)maxscale默认不允许root用户链接后端数据库。
3)connection failover maxscale发现一个正在被client使用的连接,在链接后端server时发送错误,它会自动重建一个新的连接来代替,client无感。
3,注意点。
1)Readwritesplit 可用于传统的主-从复制集群(The router is designed to be used with a traditional Master-Slave replication cluster.) router的路由策略
image.png
image.png
2)Readconnroute (provides simple and lightweight load balancing across a set of servers.)
router_options=slave// 角色信息表示,当session创建时,maxsacle从合法的角色中取得 server的集合,来建立连接。
处理顺序为 from first entry to last.
默认值为running,将在所有的running servers中将connections负载均衡。
3)maxscale计算主从延迟。
原理: master上创建maxscale_schema数据库,创建replication_heartbeat 主从复制心跳表。
master上每1s,更新一次master_timestamp 字段(会产生一条binlog记录。)。
每个slave上,读取该字段和当前时间对比,差值就是主从同步的延时。(延迟的时候,slave上的系统时间 - master_timestamp字段值 就是主从同步的延时)
image.png