黄东旭解析 TiDB 的核心优势
981
2023-05-08
HAProxy 是一个使用 C 语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和 Tuenti 在内的知名网站,及亚马逊网络服务系统都在使用 HAProxy。
TiDB Server 作为无限水平扩展的无状态计算节点,需要能提供稳定且高性能的负载均衡组件用对外统一的接口地址来提供服务,而 HAProxy 在负载均衡的生态中占有很大的市场,TiDB 用户可以将这一成熟稳定的开源工具应用在自己的线上业务中,承担负载均衡、高可用的功能。
HAProxy 由 Linux 内核的核心贡献者 Willy Tarreau 于 2000 年编写,他现在仍然负责该项目的维护,并在开源社区免费提供版本迭代。最新的稳定版本 2.0.0 于 2019 年 8 月 16 日发布,带来更多 优秀的特性 。
高可用性 :HAProxy 提供优雅关闭服务和无缝切换的高可用功能;
负载均衡 :L4(TCP)和 L7(HTTP)负载均衡模式,至少 9 类均衡算法,比如 roundrobin,leastconn,random 等;
健康检查 :对 HAProxy 配置的 HTTP 或者 TCP 模式状态进行检查;
会话保持 :在应用程序没有提供会话保持功能的情况下,HAProxy 可以提供该项功能;
SSL :支持 HTTPS 通信和解析;
监控与统计 :通过 web 页面可以实时监控服务状态以及具体的流量信息。
根据 HAProxy 官方文档 对 HAProxy 的服务器硬件配置有以下建议(也可以根据负载均衡环境进行实际推算,在此基础上提高服务器配置):
硬件资源 最低配置 CPU 2 核,3.5 GHz 内存 16 GB 存储容量 50 GB(SATA 盘) 网卡 万兆网卡根据官方介绍,我们对操作系统和依赖包有以下建议(如果是通过 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根据官方建议,目前 HAProxy 稳定版本为稳定版 2.0,特性介绍参考 这篇文章 。
HAProxy 配置 Database 负载均衡场景操作简单,以下 step by step 操作具有普遍性,不具有特殊性,建议根据实际场景,个性化配置相关的配置文件。
安装 HAProxy:推荐 yum 安装
# yum 安装 HAProxy yum -y install haproxy # 验证 HAProxy 安装是否成功 which haproxy配置 HAProxy
# yum 安装过程中会生成配置模版 vim /etc/haproxy/haproxy.cfg启动 HAProxy
方法一:直接启动
haproxy -f /etc/haproxy/haproxy.cfg方法二:systemd 启动 HAProxy,默认读取(推荐)
systemctl start haproxy.service停止 HAProxy
方法一:kill -9
ps -ef | grep haproxy kill -9 haproxy.pid方法二:systemd 停止 HAProxy(如果使用 systemd 启动)
systemctl stop haproxy.service通过以下命令查看 HAProxy 的命令列表:
$ haproxy --help Usage : haproxy [-f <cfgfile|cfgdir>]* [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ] [ -p <pidfile> ] [ -m <max megs> ] [ -C <dir> ] [-- <cfgfile>*] 参数 描述 -v 显示简略的版本信息。 -vv 显示详细的版本信息。 -d debug 模式开启。 -db 仅禁止后台模式 -dM [<byte>] 执行分配内存。 -V 启动过程显示配置和轮询信息。 -D 开启守护进程模式。 -C <dir> 在加载配置文件之前更改目录位置。 -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 <unix_socket> 在启动后,在 pidlist 中发送 FINISH 信号给 PID。收到此信号的进程将等待所有会话在退出之前完成,即优雅停止服务。此选项必须最后指定,后跟任意数量的 PID,SIGTTOU 和 SIGUSR1 都被发送。 -x <unix_socket>,[<bind options>...] 获取 socket 信息。 -S <unix_socket>,[<bind options>...] 分配新的 socket。本文介绍了在 TiDB 下使用 HAProxy 的最佳实践,全文对于 HAProxy 的基本使用方法进行较为详细的介绍,这里唯一遗憾的是没有将 HAProxy 的高可用架构和方案加以文字描述,大家在线上使用中可以通过 Linux 的 Keepalived 来实现主备配置,实现 HAProxy 的高可用;在按照该文档搭建 HAProxy 时候,一定要结合自己的具体业务需求和场景,适当调整参数,为业务的负载均衡和可用性提供最佳的保障方案。
最后也希望活跃在 TiDB 社区的小伙伴可以踊跃分享最佳实践经验,大家可以在 TiDB User Group 问答论坛交流讨论使用技巧( https://asktug.com/ )。
点击查看更多 TiDB 最佳实践系列文章
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。