写点什么

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

  • 2019-10-21
  • 本文字数:2079 字

    阅读完需:约 7 分钟

干货丨分布式数据库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/mysqlroutermkdir logsmkdir 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 连接串,如下图所示:



下面详细介绍 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 -pEnter 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 -pEnter 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.sockEnter password: mysql>
复制代码


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


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


原文链接:


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


2019-10-21 23:59742

评论

发布
暂无评论
发现更多内容

绝~ 阿里内部“Java进阶必备宝典”,理论到实战,一键通关

程序知音

Java java架构 Java进阶 后端技术

如何获得高并发经验?看这篇文章就够了

Java永远的神

程序员 系统设计 高并发 架构师 java面试

由Elasticsearch7.8评分脚本引起的一个索引迁移解决方法

北桥苏

elasticsearch Logstash ELK Stack

简单聊聊Java中线程安全有哪些实现思路?

做梦都在改BUG

Java 多线程

背废完虐面试官!字节架构师8年心血终成《图解设计模式》手册

做梦都在改BUG

Java 设计模式

阿里架构师总结的互联网面试必问Java八股文进阶手册,堪称面试前必看系列

开心学Java

Java 编程 面试 java面试 八股文

用扩展的方式在 PHP 中使用 Kafka

北桥苏

php Kakfa

华为许超:伙伴成功,才有华为企业业务成功

脑极体

华为

深入解析Java适配器模式:将接口转换为你所需要的形式

做梦都在改BUG

Java 适配器

windows下Hive搭建踩坑汇总

北桥苏

hadoop hive hql

浅谈Kafka2.8+在Windows下的搭建与使用

北桥苏

php scala kafka

我的网站中了马!

北桥苏

php thinkphp 网站开发

我通过 tensorflow 预测了博客的粉丝数

北桥苏

人工智能 深度学习 tensorflow

香港影视集团星光文化旗下 NFT 发售平台——StarNFT 上线

BlockChain先知

工赋开发者社区 | 何谓智能工厂?国内外智能工厂建设的现状分析

工赋开发者社区

Windows下hadoop环境搭建之NameNode启动报错

北桥苏

大数据 hadoop

最简单的canal 1.1.6服务搭建方法

北桥苏

elasticsearch canal

n-Track Studio 9录音、音频编辑一站式完成!

真大的脸盆

Mac 音频制作 Mac 软件 音频处理 录音工具

京东内部疯传的Redis学习笔记,被阿里P7夸爆

小小怪下士

Java redis 程序员

在Inteillj IDEA中使用Spark操作Hive

北桥苏

spark hive Big Data

ElasticSearch中文分词和模糊查询

北桥苏

php elasticsearch

Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册

做梦都在改BUG

Java 搜索引擎 elasticsearch ES

关于 PHP 启动 MongoDb 找不到指定模块问题

北桥苏

php mongodb

SocketLog 的基本使用

北桥苏

php thinkphp SocketLog

BOSS直聘首发半小时被下架!300MB实战SpringBoot笔记爆赞过百万

做梦都在改BUG

Java spring Spring Boot 框架

PoseiSwap:合规、隐私与支持更广泛的资产

股市老人

独一份,15年经验汇聚而成的《SpringBoot“踩坑”手册》首次开源

做梦都在改BUG

Java spring Spring Boot 框架

平台工程 | 内部开发者门户权威指南

杨振涛

DevOps 平台 平台工程 内部开发者平台 内部开发门户

如何让ESP8266板子像APP开发一样方便

北桥苏

php 物联网 esp8266 mqtt

如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法

北桥苏

thinkphp 反射调用

干货丨分布式数据库DDM Sidecar模式负载均衡_文化 & 方法_姚东海_InfoQ精选文章