写点什么

打造极致性能数据库中间件丨 LVS+Keepalive+ 华为云 DDM 之理论篇

2019 年 10 月 23 日

打造极致性能数据库中间件丨LVS+Keepalive+华为云DDM之理论篇

华为云分布式数据库中间件(Distributed Database Middleware,简称 DDM),专注于解决数据库分布式扩展问题,突破了传统数据库的容量和性能瓶颈,实现海量数据高并发访问。

DDM 使用华为关系型数据库(RDS)作为存储引擎,具备自动部署、分库分表、弹性伸缩、高可用等全生命周期运维管控能力。


上边几句话是从华为云官网的帮助手册摘录出来的[1],简单介绍了 DDM 服务。从我这个使用者的角度看来,DDM 主要优点有:高性能[2]、海量数据支持、数据平滑扩容和业务无感知的读写分离。这些特点正是公司当前需要的。改用 DDM 服务之后,各方面的性能都有很大的提升。但是,公司一部分代码使用的是 PHP 语言,而 PHP 语言对长连接和客户端负载均衡的支持不是很好[3]。为了解决这个问题,打算是用 LVS 做一个负载均衡,通过 LVS 连接 DDM 服务。花了将近一周的时间将 LVS 相关背景了解清楚,并搭建成功,业务运行正常。这篇文章详细介绍了搭建过程,并且对 LVS+keepalive 从个人理解的角度做了介绍,希望对同辈中人能略有帮助。


LVS+Keeplive 理论知识

一、LVS 理论基础

1.LVS 是什么

The Linux Virtual Server(LVS) is a highly scalable and highly available server built on a cluster of real servers, with the load balancer running on the Linux operating system. The architecture of the server cluster is fully transparent to end users, and the users interact as if it were a single high-performance virtual server. For more information, click here.


LVS 官网的介绍[4],个人理解,LVS 提供一种从 Linux 内核态支持的高可用、高转发效率的负载均衡。本身源码是开源的 GPL 协议。值得一提的,LVS 是是国人章文嵩发起的一个开源项目。


【问】LVS 工作在 TCP/IP 的哪一层?


【答】LVS 有多种工作模式,不能严格的说工作在哪一层。简单说,LVS-NAT 工作在 IP 层,LVS-DR 工作在数据链路层,LVS-TUN 工作在 IP 层。


【问】LVS 能负载多少 RealServer?


【答】不同的工作模式转发性能不一样,LVS-DR 号称可以支持 200+以上节点。


如下对 LVS 的几种工作模式做个简单的介绍,内容均来自简书“酱油菠菜”的一篇文章:https://www.jianshu.com/p/8a61de3f8be9。目前是看到的最简清晰的介绍了:


LVS 的 3 种工作模式,各自有自己的适用场景,目前用的比较多是 LVS-DR 模式,DR 模式也是 3 中模式中性能最高的。


2.LVS-NAT

原理:


基于 ip 伪装 MASQUERADES,原理是多目标 DNAT。


所以请求和响应都经由 Director 调度器。


优点:


  • 支持端口映射

  • RS 可以使用任意操作系统

  • 节省公有 IP 地址。


RIP 和 DIP 都应该使用同一网段私有地址,而且 RS 的网关要指向 DIP。


使用 nat 另外一个好处就是后端的主机相对比较安全。


缺点:


请求和响应报文都要经过 Director 转发;极高负载时,Director 可能成为系统瓶颈。


就是效率低的意思。



3.LVS-TUN

原理:


基于隧道封装技术。在 IP 报文的外面再包一层 IP 报文。


当 Director 接收到请求的时候,选举出调度的 RealServer


当接受到从 Director 而来的请求时,RealServer 则会使用 lo 接口上的 VIP 直接响应 CIP。


这样 CIP 请求 VIP 的资源,收到的也是 VIP 响应。


优点:


  • RIP、VIP、DIP 都应该使用公网地址,且 RS 网关不指向 DIP;

  • 只接受进站请求,解决了 LVS-NAT 时的问题,减少负载。

  • 请求报文经由 Director 调度,但是响应报文不需经由 Director。


缺点:


  • 不指向 Director 所以不支持端口映射。

  • RS 的 OS 必须支持隧道功能。

  • 隧道技术会额外花费性能,增大开销。



3.LVS-DR

原理:


当 Director 接收到请求之后,通过调度方法选举出 RealServer。


讲目标地址的 MAC 地址改为 RealServer 的 MAC 地址。


RealServer 接受到转发而来的请求,发现目标地址是 VIP。RealServer 配置在 lo 接口上。


处理请求之后则使用 lo 接口上的 VIP 响应 CIP。


优点:


  • RIP 可以使用私有地址,也可以使用公网地址。

  • 只要求 DIP 和 RIP 的地址在同一个网段内。

  • 请求报文经由 Director 调度,但是响应报文不经由 Director。

  • RS 可以使用大多数 OS


缺点:


  • 不支持端口映射。

  • 不能跨局域网。



二、Keepalive 简介

Keepalive 的官网介绍如下:


Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures. Loadbalancing framework relies on well-known and widely used Linux Virtual Server (IPVS) kernel module providing Layer4 loadbalancing. Keepalived implements a set of checkers to dynamically and adaptively maintain and manage loadbalanced server pool according their health. On the other hand high-availability is achieved by VRRP protocol. VRRP is a fundamental brick for router failover. In addition, Keepalived implements a set of hooks to the VRRP finite state machine providing low-level and high-speed protocol interactions. Keepalived frameworks can be used independently or all together to provide resilient infrastructures.


简单概括如下:


  • Keepalive 是 C 语言写的

  • Keepalive 被广泛应用于和 LVS 一起提供 4 层的负载均衡

  • Keepalive 可以探测负载均衡节点的健康状态,管理负载均衡节点

  • 通过 VRRP 协议提供高可靠


从上文的介绍可以看出,使用 LVS+Keepalive 可以搭建一个具备故障自动迁移的高可用负载均衡。本篇主要介绍了一些基础理论知识,下一篇会详细的说明怎么样一步步使用 LVS+Keepalive+DDM 搭建高性能的数据库中间件,敬请期待。


参考文献

[1]. 华为云DDM官网帮助文档


[2]. 华为云DDM性能指标


[3]. 如何连接华为云DDM实例


[4]. LVS官网


[5]. Linux服)务器集群系统(一)


[6]. Keepalive官网


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


原文链接:


https://mp.weixin.qq.com/s/HQF_pT4IRMt0fG-RP00ZRA


2019 年 10 月 23 日 10:50346

评论

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

字节跳动技术总监自爆:Android项目开发如何设计整体架构?建议收藏

欢喜学安卓

android 程序员 面试 移动开发

5年CRUD的我,年底突击面试20多家一线互联网企业,我是如何脱颖而出拿到20+offer的?

Java成神之路

Java 程序员 架构 面试 编程语言

可视化表单编辑器

day day up

云计算、大数据已经过时?不,正是因为它们RPA才能大流行

王吉伟频道

人工智能 云计算 大数据 RPA 自动化

【万字好文】一文看懂持续部署按需发布!DevOps部署和发布方法大全

京东科技开发者

DevOps SaaS

区块链助力山东文化旅游整体行业解决方案

源中瑞-龙先生

力扣(LeetCode)刷题,简单+中等题(第29期)

不脱发的程序猿

LeetCode 编程之路 面试刷题 28天写作 算法面经

使用SSO增强身份安全性的四个原因

龙归科技

身份认证 SSO 密码管理

Github一夜星标57.9K!阿里技术官亲码“高并发速成笔记”也太香了!

Java王路飞

Java 程序员 面试 系统设计 高并发

产品经理如何帮助减少技术债务 ?

禅道项目管理

产品 代码规范 技术债

基于GES图数据库的大规模数据追溯服务优化

华为云开发者社区

数据 华为云 图数据库 数据追溯 华为云GES

5G时代,为什么NoSQL和SQL存在短板?

VoltDB

数据库 通信 VoltDB 电信

产品更新 | 阿里云CDN边缘图像处理功能开放内测

阿里云Edge Plus

CDN 边缘计算 图像处理

【LeetCode】比特位计数Java题解

HQ数字卡

算法 LeetCode 28天写作

如何实现在直播中播放音频文件

anyRTC开发者

音视频 WebRTC 直播 RTC 音频

一个100%省力的,让城市管廊运维变得轻松的秘诀

一只数据鲸鱼

物联网 数据可视化 智慧城市 3D可视化 智慧管廊

力扣(LeetCode)刷题,简单+中等题(第28期)

不脱发的程序猿

LeetCode 编程之路 面试刷题 28天写作 算法面经

Pgbouncer最佳实践:系列三

PostgreSQLChina

数据库 postgresql 软件 开源社区

5年开发经验,面试10分钟后,面试者:我只会crud,不好意思

Java成神之路

Java 程序员 架构 面试 编程语言

Linux 多线程详解 —— 线程创建、终止、等待、分离

赖猫

Linux 多线程与高并发 服务器开发 Linux服务器开发 Linux线程

从根上理解高性能、高并发(七):深入操作系统,一文读懂进程、线程、协程

JackJiang

字节跳动Android面试:来一份全面的面试宝典练练手,不吃透都对不起自己

欢喜学安卓

android 程序员 面试 移动开发

JVM 分析工具

insight

JVM 3月日更

2021Java岗面试清单最新整理:分布式/Spring/JVM/并发编程等(15专题全面解析)

比伯

Java 编程 程序员 架构 面试

金三银四面试突击!终于有大牛将一线大厂Java架构师面试题收录成册,全网开源了!

程序员小毕

Java spring 程序员 面试 分布式

快手基于 Flink 的持续优化与实践

Apache Flink

flink

一文详解什么是可解释AI

华为云开发者社区

mindspore 可解释AI Gradient GradCAM RISE

Atlassian Data Center 如何优化企业中新员工的远程入职流程

Atlassian

HR Atlassian 远程工作

终于学完了2021年阿里内部480道全套java面试题及答案

周老师

Java 编程 程序员 架构 面试

DataPipeline合伙人&CPO陈雷:成为中国的世界级数据中间件厂商

DataPipeline

年薪50W的华为大佬毕生总结的这份MySQL入门实战文档,拿出去吊打面试官铁定没问题

Java成神之路

Java 程序员 架构 面试 编程语言

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

打造极致性能数据库中间件丨LVS+Keepalive+华为云DDM之理论篇-InfoQ