1. 环境架构
需要三台服务器。
192.168.2.10(master)
192.168.2.20(slave)
192.168.2.30(maxscale)
2. 部署mysql主从同步
3. 部署maxscale服务
由MySQL兄弟公司MariaDB开发
下载地址: https://downloads.mariadb.com/MaxScale/
3.1. 安装maxscale
[ root@localhost ~]
[ root@localhost ~]
3.2. 修改配置文件
[ root@localhost ~]
[ root@localhost ~]
[ maxscale]
threads = auto ----定义线程数,可以根据服务器性能填多少,或者选择auto,auto会根据本身服务器CPU核数来自动创建。
//下面内容定义mysql信息。
[ server1]
type = server --类型
address = 192.168 .2.10 ---ip地址
port = 3306 ---端口号
protocol = MySQLBackend ---协议
[ server2]
type = server
address = 192.168 .2.20
port = 3306
protocol = MySQLBackend
//定义代理服务器监视的服务器信息。
[ MySQL Monitor]
type = monitor ---类型为监视
module = mysqlmon ---定义模块
servers = server1,server2 ----指定需要监视的服务器
user = maxscale ---被监视的服务器用户名
passwd = 1234 ---被监视的服务器密码
monitor_interval = 10000 ---用户maxscalemon连接server1和server2的频率,单位是毫秒。
//注意这个用户名和密码等一下配置完需要在主库创建出来。
//下面是定义只读服务,而我这边是需要定义读写分离服务。
//定义读写分离服务信息。
[ Read-Write Service]
type = service
router = readwritesplit
servers = server1,server2
user = myuser 路由用户
passwd = mypwd 路由密码
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
prot = 4016
socket = default
4. 创建授权用户
//在主库创建监控用户
mysql> grant replication slave,replication client on *.* to 'maxscale' @'%' identified by '1234' ;
//创建路由用户
mysql> grant select on mysql.* to 'maxscale1' @'%' identified by '1234' ;
5. 启动代理服务
//启动服务
[ root@localhost ~]
//查看进程是否存在
[ root@localhost ~]
PID TTY TIME CMD
2359 ? 00:00:00 maxscale
//查看代理服务端口号是否启动
[ root@localhost ~]
tcp6 0 0 :::4016 :::* LISTEN 2359 /maxscale
tcp6 0 0 :::4006 :::* LISTEN 2359 /maxscale
6. 测试配置
6.1. 查看监控状态
管理用户密码默认的
[ root@localhost ~]
MaxScale> list servers --显示监控列表
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168 .2.10 | 3306 | 0 | Master, Running
server2 | 192.168 .2.20 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
//假如监控状态角色不对,看一下监控的授权用户是否和maxscale配置文件一致。
6.2. 验证写是否在主库查是否在从库
//在从库db1库t1表插入数据,这样主库和从库数据不一致
mysql> use db1;
mysql> create table t1(
-> id int not null,name char( 10 ) not null) ;
mysql> insert into t1 values( '1' ,'tom' ) ;
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | tom |
+----+------+
//在主库查看这个表信息。
mysql> use db1;
Database changed
mysql> show tables;
Empty set ( 0.00 sec) ----可以看的出来主库没有表格
//在客户端登录代理服务器查看db1.t1;
[ root@localhost ~]
mysql> select * from db1.t1;
+----+------+
| id | name |
+----+------+
| 1 | tom |
+----+------+
1 row in set ( 0.00 sec)
可以看的出来读是在从库提取的。