一、简述

MGR单主模式,不再叙述

​ https://blog.51cto.com/u_13236892/3840342 ​

这里使用的是MGR+mysqlroute,并不是mic,有很多局限性,比如最好俩节点

二、安装配置

1、简介

mysqlrouter会提供一个ip和两个端口来供客户端读写分离,mysql的master主机和slave从机相对客户端app来说是透明的,不建议使用mysqlrouter做高可靠,因为router缺点就是,写的主机挂了,备机会顶上,备机如果也挂了,mysqlrouter也就挂了,而且主机如果现在好了,也不会自动的添加到mysqlrouter中重新使用,mysqlrouter的优点是做负载均衡很方便,配置很简单。

2、安装

下载地址:
https://downloads.mysql.com/archives/router/

cd /usr/local
tar -xvf mysql-router-2.1.6-linux-glibc2.12-x86-64bit.tar.gz #解压
ln -s mysql-router-2.1.6-linux-glibc2.12-x86-64bit mysql-router

mkdir /etc/mysql-router/
cp /usr/local/mysql-router/share/doc/mysqlrouter/sample_mysqlrouter.conf /etc/mysql-route/mysqlrouter.conf

3、配置

##一定要找到MGR主节点,把主节点放到写模块destinations的第一个位置,首次启动mysqlrouter,7001只认第一个ip:port,即使是错的
##除非第一个ip:port不可用,才会去考虑第二个

vi /etc/mysql-route/mysqlrouter.conf

[DEFAULT]
logging_folder = /data/log/mysql-router ##日志文件目录
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter ##插件目录
config_folder = /etc/mysql-router ##配置文件目录
runtime_folder = /var/run
#data_folder = /var/lib
#keyring_path = /var/lib/keyring-data
#master_key_path = /var/lib/keyring-key
[logger]
level = debug
# 主节点故障转移配置
[routing:basic_failover]
# 写节点地址,这是mysqlrouter的地址
bind_address=192.168.10.131
# 写节点端口
bind_port = 7001
# 模式,读写
mode = read-write
# 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库 如果需要配置备机做高可靠 就添加一个ip用逗号分割
destinations = 192.168.10.131:3306,192.168.10.132:3306

# 从节点负载均衡配置
[routing:balancing]
# 绑定的IP地址,这是mysqlrouter的地址
bind_address=192.168.10.131
# 监听的端口
bind_port = 7002
# 连接超时时间
connect_timeout = 3
# 最大连接数
max_connections = 1024
# 后端服务器地址
destinations = 192.168.10.131:3306,192.168.10.132:3306
# 模式:读还是写
mode = read-only

[keepalive]
interval = 60

4、启动

mkdir -p /data/log/mysql-router
chown root:root /data/log/mysql-router/

启动:
/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf &

5、测试

根据配置
7001是访问192.168.10.131
7002是访问192.168.10.131,192.168.10.132

当192.168.10.131的mysql关闭后
7001是访问192.168.10.132
7002是访问192.168.10.132

当192.168.10.131的mysql重启加入组以后
7001是访问192.168.10.132
7002是访问192.168.10.131,192.168.10.132

但是当192.168.10.132的mysql关闭,关闭期间mysqlrouter没有任何连接,192.168.10.132的mysql又重启了
虽然这时候主节点变成192.168.10.131了
但是通过mysqlrouter查询的时候
7001是访问192.168.10.132
7002是访问192.168.10.131,192.168.10.132
所以局限性很大