干货丨分布式数据库 DDM Sidecar 模式负载均衡

阅读数:29 2019 年 10 月 21 日 23:59

干货丨分布式数据库DDM Sidecar模式负载均衡

01 分布式数据库中间件 DDM

分布式数据库中间件(Distributed Database Middleware)是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,提供分库分表、读写分离、弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。

02 MySQL Router

mysql-router 是 mysql 官方的轻量级的中间件,用于取代 MySQL Proxy 应用程序像访问 MySQL 一样访问 MySQL Router,由 MySQL Router 将数据转发给后端的 DDM 节点,实现 Sidecar 模式负载均衡。

Sidecar 模式是一种从应用程序本身剥离应用程序功能作为单独进程的方法。此模式允许我们向应用无侵入添加多种功能,从而无需向应用程序添加其他配置代码。建议 MySQL Router 与应用程序部署在同一台机器做 Sidecar 模式负载均衡,相对于服务端形式的负载均衡,Sidecar 模式实现负载均衡可以缩短调用链路,减少服务端中心节点的压力,去中心化,使用更加可靠更加高效。

部署 Mysql-Router 服务

复制代码
# 解压安装程序文件
tar -xzvf mysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz
# 重命名安装文件夹
mv mysql-router-8.0.11-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter
# 创建日志和配置相关文件存放目录
cd /usr/local/mysqlrouter
mkdir logs
mkdir etc
# 利用模板文件创建配置文件
cp /usr/local/mysqlrouter/share/doc/mysqlrouter/sample_mysqlrouter.conf ./etc/mysqlrouter.conf
# 启动 mysql router
/usr/local/mysqlrouter/bin/mysqlrouter -c /usr/local/mysqlrouter/etc/mysqlrouter.conf &

配置文件详解

首先,获取 DDM 连接串,如下图所示:

干货丨分布式数据库DDM Sidecar模式负载均衡

下面详细介绍 mysql-router 三种配置方式:

01 作为中心代理节使用

mysql-router 绑定 IP 不限制,即监听所有 ip,任意节点都可以访问,作为数据库访问代理,轮询 DDM 各个节点。其中,destinations 为上文获得的 DDM 连接串。

vi /usr/local/mysqlrouter/etc/mysqlrouter.conf

复制代码
[DEFAULT]
logging_folder = /usr/local/mysqlrouter/log/
plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/
config_folder = /usr/local/mysqlrouter/etc/
runtime_folder = /usr/local/mysqlrouter/run/
[logger]
level = INFO
# 负载均衡配置
[routing:balancing]
# 绑定的 IP 地址
bind_address=0.0.0.0
# 监听的端口
bind_port = 7002
# 连接超时时间(秒)
connect_timeout = 3
# 最大连接数
max_connections = 100
# 后端服务器地址. 默认读进行轮询
destinations = 192.168.4.235:5066,192.168.4.231:5066
# 路由策略
routing_strategy=round-robin
[keepalive]
interval = 60

连接示例:

复制代码
[root@xxx ]# ./mysql -uddmtest -h128.11.2.2 -P7002 -p
Enter password:
mysql>

128.11.2.2 为 Mysql Router 所在 IP。

02 作为本地数据库代理使用

mysql-router 绑定本地地址 127.0.0.1,作为本地数据库访问代理,仅允许当前节点访问数据库。其要求需要访问数据库的应用与 router 部署在同一节点,更安全可靠。

vi /usr/local/mysqlrouter/etc/mysqlrouter.conf

复制代码
[DEFAULT]
logging_folder = /usr/local/mysqlrouter/log/
plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/
config_folder = /usr/local/mysqlrouter/etc/
runtime_folder = /usr/local/mysqlrouter/run/
[logger]
level = INFO
# 负载均衡配置
[routing:balancing]
# 绑定的 IP 地址
bind_address=127.0.0.1
# 监听的端口
bind_port = 7002
# 连接超时时间(秒)
connect_timeout = 3
# 最大连接数
max_connections = 100
# 后端服务器地址. 默认读进行轮询
destinations = 192.168.4.235:5066,192.168.4.231:5066
# 路由策略
routing_strategy=round-robin
[keepalive]
interval = 60

连接示例:

复制代码
[root@xxx ]# ./mysql -uddmtest -h127.0.0.1 -P7002 -p
Enter password:
mysql>

mysql 客户端与 Mysql Router 在同一节点。

03 作为本地数据库代理,使用 Unix sockets 连接(推荐)

mysql-router 不绑定 ip 和端口,只使用 Unix sockets 连接,这样可以不经过 tcp 协议转发数据,只走操作系统 socket 通道,更加高效。其同样要求需要访问数据库的应用与 router 部署在同一节点,但是安全可靠,且高效。

vi etc/mysqlrouter.conf

复制代码
[DEFAULT]
logging_folder = /usr/local/mysqlrouter/log/
plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/
config_folder = /usr/local/mysqlrouter/etc/
runtime_folder = /usr/local/mysqlrouter/run/
[logger]
level = INFO
# 负载均衡配置
[routing:balancing]
# 绑定的 IP 端口
socket = /tmp/mysqlrouter.sock
# 连接超时时间(秒)
connect_timeout = 3
# 最大连接数
max_connections = 100
# 后端服务器地址. 默认读进行轮询
destinations = 192.168.4.235:5066,192.168.4.231:5066
# 路由策略
routing_strategy=round-robin
[keepalive]
interval = 60

其中,destinations 为上文获得的 DDM 连接串

连接示例:

复制代码
[root@xxx ]# ./mysql -uddmtest -p -S /tmp/mysqlrouter.sock
Enter password:
mysql>

mysql 客户端与 Mysql Router 在同一节点。

本文转载自公众号中间件小哥(ID:huawei_kevin)。

原文链接:

https://mp.weixin.qq.com/s/SjgzSkzNXGrQfD-9QNYUzw

评论

发布