MaxScale是MariaDB开发的一个数据库智能代理服务,一直看好的开源数据库MariaDB的又一利器。MaxScale允许根据数据库 SQL 语句将请求转向目标一个到多个服务器,可设定各种复杂程度的转向规则。MaxScale 设计用于透明的提供数据库的负载均衡和高可用性,同时提供高度可伸缩和灵活的架构,支持不同的协议和路由决策。简单的讲就是使用MaxScale可以轻松解决mariaDB读写分离的问题。下面就详细的带大家一起看看MariaDB MaxScale实现读写分离的具体步骤。
MaxScale有五类插件:身份验证(Authentication)、协议(Protocol)、监控(Monitoring)、路由器(Router)、过滤(Filter),他们彼此相互配合一起工作来实现读写分离的。Protocol负责接口或从外部系统和maxscale协议方面,Monitoring来确定系统内的服务器发送请求的当前状态,Router则基于路由算法、服务器路由权重、服务器状态、可选的查询类型(读与写)和数据库模式的查询进行路由选择请求发送到后端哪里。Filter则可以自己编写一些小程序检查和修改SQL请求。通过一张图来让我们看一下MaxScale的工作原理。
MaxScale安装和配置:
MariaDB master为192.168.1.150
MariaDB slave为192.168.1.145
MariaDB的版本是10.1.16
1 2 3 4
| [root@MariaDB soft]# rpm -ivh configure-maxscale-repo-0.1.2.rpm Preparing... ########################################### [100%] 1:configure-maxscale-repo########################################### [100%] [root@MariaDB soft]# yum install maxscale |
#拷贝配置文件
1 2 3 4 5
| [root@MariaDB etc]# pwd /usr/local/mariadb-maxscale/etc [root@MariaDB etc]# cp MaxScale_template.cnf maxscale.cnf #定义MAXSCALE_HOME环境变量,或是加到/etc/profile文件中 [root@MariaDB etc]# export MAXSCALE_HOME=/usr/local/mariadb-maxscale |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [root@MariaDB etc]# vi maxscale.cnf #编辑配置文件maxscale.cnf #定义读写路由器 [RW Split Router] type=service router=readwritesplit servers=server2,server1 user=root passwd=50514A05CE2C0909BA630B29A29D620D enable_root_user=1 #use_sql_variables_in= #max_slave_connections=100% #max_slave_replication_lag=21 #router_options=slave_selection_criteria= #filters=fetch|qla #为该路由器定义一个listener [RW Split Listener] type=listener service=RW Split Router protocol=MySQLClient port=4007 #socket=/tmp/rwsplit.sock
#定义服务器成员 [server1] type=server address=192.168.1.145 port=3307 protocol=MySQLBackend [server2] type=server address=192.168.1.150 port=3306 protocol=MySQLBackend |
password是一个加密的密文,maxscal使用该用户连接数据库
#生成密码文件,再加密
1 2 3
| [root@MariaDB bin]# /usr/local/mariadb-maxscale/bin/maxkeys /usr/local/mariadb-maxscale/etc/.secrets [root@MariaDB bin]# /usr/local/mariadb-maxscale/bin/maxpasswd root 50514A05CE2C0909BA630B29A29D620D |
#启动maxscale,并以后台方式运行,查看端口是否正常打开,4007是连接 MaxScale 时使用的端口,6603是 MaxScale 管理器的端口,4442是MaxScale debug测试的端口
1 2 3 4 5
| [root@MariaDB bin]# /usr/local/mariadb-maxscale/bin/maxscale --config=/usr/local/mariadb-maxscale/etc/maxscale.cnf [root@MariaDB etc]# netstat -nltp | grep max tcp 0 0 0.0.0.0:4007 0.0.0.0:* LISTEN 15153/maxscale tcp 0 0 0.0.0.0:6603 0.0.0.0:* LISTEN 15153/maxscale tcp 0 0 0.0.0.0:4442 0.0.0.0:* LISTEN 15153/maxscale |
#使用管理工具连接,设置服务器状态
1 2 3 4 5 6 7 8 9 10 11 12
| [root@MariaDB bin]# /usr/local/mariadb-maxscale/bin/maxadmin --user=admin --password=mariadb --host=127.0.0.1 #手动设定手服务器的状态 MaxScale> set server server1 slave MaxScale> set server server2 master MaxScale> list servers Servers. -------------------+-----------------+-------+-------------+-------------------- Server | Address | Port | Connections | Status -------------------+-----------------+-------+-------------+-------------------- server1 | 192.168.1.145 | 3307 | 0 | Slave, Running server2 | 192.168.1.150 | 3306 | 0 | Master, Running -------------------+-----------------+-------+-------------+-------------------- |
这样就配置成功了可以实现读写分离,可以写一个select查询和update更新测试。