我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TiDB 最佳实践系列(六)HAProxy 的使用

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TiDB 最佳实践系列(六)HAProxy 的使用

作者:李仲舒

HAProxy 是一个使用 C 语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和 Tuenti 在内的知名网站,及亚马逊网络服务系统都在使用 HAProxy。

TiDB Server 作为无限水平扩展的无状态计算节点,需要能提供稳定且高性能的负载均衡组件用对外统一的接口地址来提供服务,而 HAProxy 在负载均衡的生态中占有很大的市场,TiDB 用户可以将这一成熟稳定的开源工具应用在自己的线上业务中,承担负载均衡、高可用的功能。

图 1 部署架构

HAProxy 简介

HAProxy 由 Linux 内核的核心贡献者 Willy Tarreau 于 2000 年编写,他现在仍然负责该项目的维护,并在开源社区免费提供版本迭代。最新的稳定版本 2.0.0 于 2019 年 8 月 16 日发布,带来更多 优秀的特性。

HAProxy 部分核心功能

  • 高可用性:HAProxy 提供优雅关闭服务和无缝切换的高可用功能;

  • 负载均衡:L4(TCP)和 L7(HTTP)负载均衡模式,至少 9 类均衡算法,比如 roundrobin,leastconn,random 等;

  • 健康检查:对 HAProxy 配置的 HTTP 或者 TCP 模式状态进行检查;

  • 会话保持:在应用程序没有提供会话保持功能的情况下,HAProxy 可以提供该项功能;

  • SSL:支持 HTTPS 通信和解析;

  • 监控与统计:通过 web 页面可以实时监控服务状态以及具体的流量信息。

HAProxy 部署操作

1. 硬件要求

根据 HAProxy 官方文档 对 HAProxy 的服务器硬件配置有以下建议(也可以根据负载均衡环境进行实际推算,在此基础上提高服务器配置):

硬件资源 最低配置
CPU 2 核,3.5 GHz
内存 16 GB
存储容量 50 GB(SATA 盘)
网卡 万兆网卡

2. 软件要求

根据官方介绍,我们对操作系统和依赖包有以下建议(如果是通过 yum 源部署安装 HAProxy 软件,依赖包可以不需要单独安装):

操作系统

  • Linux 2.4 操作系统,支持 x86、x86_64、Alpha、SPARC、MIPS 和 PA-RISC 架构。
  • Linux 2.6 或 3.x 操作系统,支持 x86、x86_64、ARM、SPARC 和 PPC64 架构。
  • Solaris 8 或 9 操作系统,支持 UltraSPARC II 和 UltraSPARC III 架构。
  • Solaris 10 操作系统,支持 Opteron 和 UltraSPARC 架构。
  • FreeBSD 4.10~10 操作系统,支持 x86 架构。
  • OpenBSD 3.1 及以上版本操作系统,支持 i386、AMD64、macppc、Alpha 和 SPARC64 架构。
  • AIX 5.1~5.3 操作系统,支持 Power™ 架构。

依赖包

  • epel-release
  • gcc
  • systemd-devel

3. 推荐版本

根据官方建议,目前 HAProxy 稳定版本为稳定版 2.0,特性介绍参考 这篇文章。

4.操作步骤

HAProxy 配置 Database 负载均衡场景操作简单,以下 step by step 操作具有普遍性,不具有特殊性,建议根据实际场景,个性化配置相关的配置文件。

  1. 安装 HAProxy:推荐 yum 安装

    	# yum 安装 HAProxy
    	yum -y install haproxy
    	# 验证 HAProxy 安装是否成功
    	which haproxy
    
  2. 配置 HAProxy

    # yum 安装过程中会生成配置模版
    vim /etc/haproxy/haproxy.cfg
    
  3. 启动 HAProxy

    方法一:直接启动

    haproxy -f /etc/haproxy/haproxy.cfg
    

    方法二:systemd 启动 HAProxy,默认读取(推荐)

    systemctl start haproxy.service
    
  4. 停止 HAProxy

    方法一:kill -9

    ps -ef | grep haproxy 
    kill -9 haproxy.pid
    

    方法二:systemd 停止 HAProxy(如果使用 systemd 启动)

    systemctl stop haproxy.service
    

HAProxy 命令介绍

通过以下命令查看 HAProxy 的命令列表:

$ haproxy --help
Usage : haproxy [-f ]* [ -vdVD ] [ -n  ] [ -N  ]
        [ -p  ] [ -m  ] [ -C  ] [-- *]
参数 描述
-v 显示简略的版本信息。
-vv 显示详细的版本信息。
-d debug 模式开启。
-db 仅禁止后台模式
-dM [] 执行分配内存。
-V 启动过程显示配置和轮询信息。
-D 开启守护进程模式。
-C 在加载配置文件之前更改目录位置。
-W 主从模式。
-q 静默模式,不输出信息。
-c 只检查配置文件并在尝试绑定之前退出。
-n 设置最大总连接数为 2000。
-m 限制最大可用内存(单位:MB)。
-N 设置单点最大连接数,默认为 2000。
-L 本地实例对等名称。
-p 将 HAProxy 所有子进程的 PID 信息写入该文件。
-de 禁止使用 speculative epoll,epoll 仅在 Linux 2.6 和某些定制的 Linux 2.4 系统上可用。
-dp 禁止使用 epoll,epoll 仅在 Linux 2.6 和某些定制的 Linux 2.4 系统上可用。
-dS 禁止使用 speculative epoll,epoll 仅在 Linux 2.6 和某些定制的 Linux 2.4 系统上可用。
-dR 禁止使用 SO_REUSEPORT。
-dr 忽略服务器地址解析失败。
-dV 禁止在服务器端使用 SSL。
-sf/-st 在启动后,在 pidlist 中发送 FINISH 信号给 PID。收到此信号的进程将等待所有会话在退出之前完成,即优雅停止服务。此选项必须最后指定,后跟任意数量的 PID,SIGTTOU 和 SIGUSR1 都被发送。
-x ,[...] 获取 socket 信息。
-S ,[...] 分配新的 socket。

HAProxy 最佳实践

global                                     # 全局配置
   log         127.0.0.1 local0            # 定义全局的 syslog 服务器,最多可以定义两个
   chroot      /var/lib/haproxy            # 将当前目录为指定目录,设置超级用户权限启动进程,提高安全性
   pidfile     /var/run/haproxy.pid        # 将 HAProxy 进程写入 PID 文件
   maxconn     4000                        # 设置每个 HAProxy 进程锁接受的最大并发连接数
   user        haproxy                     # 同 uid 参数,使用是用户名
   group       haproxy                     # 同 gid 参数,建议专用用户组
   nbproc      40                          # 启动多个进程来转发请求,需要调整到足够大的值来保证 HAProxy 本身不会成为瓶颈
   daemon                                  # 让 HAProxy 以守护进程的方式工作于后台,等同于“-D”选项的功能。当然,也可以在命令行中用“-db”选项将其禁用。
   stats socket /var/lib/haproxy/stats     # 定义统计信息保存位置

defaults                                   # 默认配置
   log global                              # 日志继承全局配置段的设置
   retries 2                               # 向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用
   timeout connect  2s                     # HAProxy 与后端服务器连接超时时间,如果在同一个局域网内可设置成较短的时间
   timeout client 30000s                   # 定义客户端与 HAProxy 连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间
   timeout server 30000s                   # 定义 HAProxy 与上游服务器非活动连接的超时时间

listen admin_stats                         # frontend 和 backend 的组合体,监控组的名称,按需自定义名称
   bind 0.0.0.0:8080                       # 配置监听端口
   mode http                               # 配置监控运行的模式,此处为 `http` 模式
   option httplog                          # 表示开始启用记录 HTTP 请求的日志功能
   maxconn 10                              # 最大并发连接数
   stats refresh 30s                       # 配置每隔 30 秒自动刷新监控页面
   stats uri /haproxy                      # 配置监控页面的 URL
   stats realm HAProxy                     # 配置监控页面的提示信息
   stats auth admin:pingcap123             # 配置监控页面的用户和密码 admin,可以设置多个用户名
   stats hide-version                      # 配置隐藏统计页面上的 HAProxy 版本信息
   stats  admin if TRUE                    # 配置手工启用/禁用,后端服务器(HAProxy-1.4.9 以后版本)

listen tidb-cluster                        # 配置 database 负载均衡
   bind 0.0.0.0:3390                       # 配置浮动 IP 和 监听端口
   mode tcp                                # HAProxy 中要使用第四层的应用层
   balance leastconn                       # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于实例启动慢的服务器,权重会在运行中作调整。
   server tidb-1 10.9.18.229:4000 check inter 2000 rise 2 fall 3       # 检测 4000 端口,检测频率为 2000 毫秒。如果检测出 2 次正常就认定机器已恢复正常使用,如果检测出 3 次失败便认定该服务器不可用。
   server tidb-2 10.9.39.208:4000 check inter 2000 rise 2 fall 3
   server tidb-3 10.9.64.166:4000 check inter 2000 rise 2 fall 3

总结

本文介绍了在 TiDB 下使用 HAProxy 的最佳实践,全文对于 HAProxy 的基本使用方法进行较为详细的介绍,这里唯一遗憾的是没有将 HAProxy 的高可用架构和方案加以文字描述,大家在线上使用中可以通过 Linux 的 Keepalived 来实现主备配置,实现 HAProxy 的高可用;在按照该文档搭建 HAProxy 时候,一定要结合自己的具体业务需求和场景,适当调整参数,为业务的负载均衡和可用性提供最佳的保障方案。

最后也希望活跃在 TiDB 社区的小伙伴可以踊跃分享最佳实践经验,大家可以在 TiDB User Group 问答论坛交流讨论使用技巧(https://asktug.com/)。

原文阅读:https://pingcap.com/blog-cn/best-practice-haproxy/

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TiDB 最佳实践系列(六)HAProxy 的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TiDB 最佳实践系列(六)HAProxy 的使用

作者:李仲舒HAProxy 是一个使用 C 语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和
TiDB 最佳实践系列(六)HAProxy 的使用
2021-01-04

TiDB 最佳实践系列(五)Java 数据库应用开发指南

作者:Su Li,Zhang MingJava 是当前非常流行的开发语言,很多 TiDB 用户的业务层都是使用 Java 开发的,本文将从 Java 数据库交互组件开发的角度出发,介绍各组件的推荐配置和推荐使用方式,希望能帮助 Java 开发者在使用 TiDB
TiDB 最佳实践系列(五)Java 数据库应用开发指南
2015-07-08

使用 PHP 函数库的最佳实践

最佳使用 php 函数库的方法:选择最合适的函数。使用命名空间防止函数名冲突。利用自动化函数节省编码时间。缓存昂贵的函数调用以减少开销。使用依赖注入解耦函数和它们所依赖的对象。PHP 函数库的最佳实践PHP 函数库提供了丰富的函数来简化开
使用 PHP 函数库的最佳实践
2024-04-19

Golang RabbitMQ: 构建高可用的消息队列系统的最佳实践

构建高可用的消息队列系统的最佳实践包括以下要点:1. 使用集群模式:RabbitMQ支持集群模式,通过在多个节点上运行多个RabbitMQ实例来提高可用性。在集群模式下,消息队列可以在节点之间复制和分发,以确保即使一个节点发生故障,系统仍然
2023-10-08

使用Golang实现文件锁的最佳实践

使用Golang实现文件锁的最佳实践在开发中,我们经常会遇到需要对文件进行加锁的情况,以保证文件在多个goroutine或进程间的并发访问时能够正确操作。在Golang中,实现文件锁并不复杂,这篇文章将介绍如何使用Golang实现文件锁的
使用Golang实现文件锁的最佳实践
2024-02-28

PHP gPRC 跨平台实践:在不同系统中使用 gPRC 的最佳实践

gRPC 作为一种高效、灵活的跨平台远程过程调用(RPC)框架,在 PHP 中的应用愈发广泛。本文将分享 PHP gRPC 跨平台实践的最佳方法,助力开发者在不同系统中轻松使用 gRPC。
PHP gPRC 跨平台实践:在不同系统中使用 gPRC 的最佳实践
2024-02-19

使用 Golang 实现页面跳转的最佳实践

使用 Golang 实现页面跳转的最佳实践在开发 web 应用程序时,页面跳转是一个常见的功能需求。在 Golang 中,我们可以使用一些库来实现页面跳转,例如使用 Gin 框架来处理路由和页面跳转。本文将介绍如何在 Golang 中实现
使用 Golang 实现页面跳转的最佳实践
2024-03-05

使用MySQL索引的最佳实践是什么?

数据库索引是一种提高表操作速度的数据结构。可以使用一列或多列创建索引,为快速随机查找和记录访问的高效排序提供基础。使用 MySQL 索引的最佳实践是。如果表对于 CSV 来说非常大,那么使用索引会将记录插入到末尾。索引创建表的一系列行。
2023-10-22

在 PHP OOP 中使用函数的最佳实践

在 php oop 中使用函数的最佳实践包括:使用命名空间分組相關函数,避免名稱衝突。遵循駝峰命名法,提高可讀性和一致性。指定參數類型和返回值類型,增強可讀性,並偵測錯誤。使用默認參數值,簡化函數調用。避免使用全局函數,以提高可維護性。根據
在 PHP OOP 中使用函数的最佳实践
2024-04-10

使用golang框架的最佳实践有哪些?

使用 go 框架的最佳实践包括:选择合适的框架使用依赖管理遵循框架约定使用中间件分离逻辑处理错误使用测试遵循这些最佳实践有助于构建健壮、可维护且高效的基于 go 框架的应用程序。使用 Go 框架的最佳实践Go 框架为在 Go 语言中构建高
使用golang框架的最佳实践有哪些?
2024-05-24

使用 PHP 函数进行对象关系映射的最佳实践?

使用 php 函数进行 orm 的最佳实践:声明强类型化变量以确保数据完整性。妥善处理一对一、一对多和多对多关联。通过 where()、orderby() 和其他函数自定义查询构建。避免嵌套查询以提高性能。使用缓存优化性能。使用 PHP 函
使用 PHP 函数进行对象关系映射的最佳实践?
2024-05-01

编程热搜

目录