社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。
基于 Docker
环境描述:
安装部署 MySQL Router
tar -zxvf mysql-router-2.1.4-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/
cd /usr/local/
ln -s mysql-router-2.0.3-linux-glibc2.12-x86-64bit/ mysql-router
配置 MySQL Router
mkdir /etc/mysql-route/
cp share/doc/mysqlrouter/sample_mysqlrouter.conf /etc/mysql-route/mysqlrouter.conf
[DEFAULT]
# 日志存放目录
logging_folder = /data/log/mysql-route
# 插件存放目录
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
# 配置文件存放目录
config_folder = /etc/mysql-route
# 运行目录
runtime_folder = /var/run
[logger]
# 日志运行级别
level = INFO
# 主节点故障转移配置
[routing:basic_failover]
# 写节点地址
bind_address=172.17.0.2
# 写节点端口
bind_port = 7001
# 模式,读写
mode = read-write
# 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库
destinations = 172.17.0.8:3306,172.17.0.9:3306
# 从节点负载均衡配置
[routing:balancing]
# 绑定的IP地址
bind_address=172.17.0.2
# 监听的端口
bind_port = 7002
# 连接超时时间
connect_timeout = 3
# 最大连接数
max_connections = 1024
# 后端服务器地址
destinations = 172.17.0.9:3306,172.17.0.10:3306
# 模式:读还是写
mode = read-only
[keepalive]
interval = 60
mkdir /data/log/mysql-route
chown root:root /data/log/mysql-route/
启动 MySQL Router
root@mysql-router:/usr/local/mysql-router/bin# ./mysqlrouter -c /etc/mysql-route/mysqlrouter.conf &
测试读写分离
验证负载均衡
mysql -h 172.17.0.2 -uroot -P7002 -proot -e "show variables like 'hostname';"
mysql -h 172.17.0.2 -uroot -P7001 -proot -e "show variables like 'hostname';"
测试主主故障切换
缺陷
在一主多从的情况,如果主库down机,切换到备份节点,其他从库的主库地址连接还是故障的
主库,这样就会造成一个从库slave_io线程connecting状态,造成复制延迟
1、在切换时需要自己编写脚本触发一个shell脚本或者event来处理重连的问题。
2、不使用mysql router主主故障转移功能,而是自己使用其他方式保证mysql主库高可用。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!