maxScale 解决读压力大的问题
1. 认证插件
提供数据库登录认证的功能
2. 协议插件
负责 maxscale和外部系统间接口的协议,包括客户端到maxscale的接口,以及maxscale 到后端数据库的接口
3. 路由插件
readconnroute 用来解决多台读服务器的负载均衡
readwritesplit 用来实现读写分离
4. 监控插件
用于对后端数据库进行实时监控,以便将前端请求发送到正确的(即正常的可以对外提供服务的)数据库中
5. 过滤和日志插件
提供了简单的数据库防火墙功能,可以对某些sql进行过滤和改写,可以进行一些简单的sql容错和语句的自动转换
=======================================================================
结构
maxscale 节点 192.168.182.131
master db: 192.168.182.128
slave db: 192.168.182.129
slave db: 192.168.182.131
第一步: 安装 maxscale
wget https://downloads.mariadb.com/MaxScale/2.2.0/centos/7server/x86_64/maxscale-2.2.0-1.centos.7.x86_64.rpm
yum install gnutls libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
rpm -ivh maxscale-2.2.0-1.centos.7.x86_64.rpm
第二步: 在 master 128 服务器中为 MaxScale 创建两个用户,用于监控模块和路由模块
1. 为监控模块创建mysql账号
mysql> create user scalemon@'192.168.182.%' identified by '123456';
mysql> grant replication slave,replication client on *.* to scalemon@'192.168.182.%';
2. 为路由模块创建mysql账号
用来读取mysql系统库下的表,获取后端数据库的权限
mysql> create user scaleroute@'192.168.182.%' identified by '123456';
mysql> grant select on mysql.* to scaleroute@'192.168.182.%';
第三步: 配置文件中的密码都是经过maxscale进行加密后的,可以防止密码泄露,具体的操作步骤为
which maxkeys
maxkeys /var/lib/maxscale/
maxpasswd /var/lib/maxscale/ 123456
得到密码:66FE1F175EFAB5111B5639F254C301CE
第四步:修改 /etc/maxscale.cnf 配置文件
[maxscale]
threads=1
[server1]
type=server
address=192.168.182.128
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.182.129
port=3306
protocol=MySQLBackend
[server3]
type=server
address=192.168.182.131
port=3306
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=scalemon
passwd=867E4F171CFFEAA62AEF9376A95308BE
monitor_interval=10000
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=scaleroute
passwd=867E4F171CFFEAA62AEF9376A95308BE
max_slave_connections=100%
[MaxAdmin Service]
type=service
router=cli
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
第五步:启动maxscale服务
maxscale -f /etc/maxscale.cnf
日志文件:/var/log/maxscale/maxscale.log
查看 MaxScale 的响应端口是否已经就绪
netstat -ntelp
maxscale的端口 4006
第六步:查看maxscale服务状态
maxadmin -S /tmp/maxadmin.sock
# 查看后端服务器列表
maxscale> list servers
第七步:
在128(主库)上创建一个测试账号
mysql> grant all on *.* to scott@'%' identified by 'tiger';
在maxscale节点连接数据库
[root@monitor ~]# mysql -uscott -ptiger -h192.168.182.131 -P4006
注意这里的-h连接的maxscale节点,-P是maxscale的端口,如果maxscale与mysql client不在同一台机器,还需要关闭maxscale上的防火墙