借助 TCP 负载均衡和 Galera 集群扩展 MySQL


我们在 NGINX Plus R5 中引入了 TCP 负载均衡,并不断在后续版本中添加新功能以及 UDP 负载均衡支持。本文探讨了 TCP 负载均衡的关键要求以及 NGINX Plus 如何满足这些要求。

为了探讨 NGINX 的功能,我们将使用一个简单的测试环境,来代表具有可扩展数据库后端的应用的关键组件。有关构建该测试环境的完整说明,请参阅附录

在该环境中,NGINX 充当数据库服务器的反向代理,监听 MySQL 默认端口 3306。这为客户端提供了一个简单的接口,同时后端 MySQL 节点可以向外扩展(甚至脱机),且不会对客户端产生任何影响。我们将 MySQL 命令行工具用作客户端,代表测试环境中的前端应用。

本文描述的许多功能都适用于 NGINX 开源版和 NGINX Plus。为简单起见,我们全文只提 NGINX,并明确指出 NGINX 开源版不具备的功能。

我们将探讨以下用例:

TCP 负载均衡

在为任何应用配置负载均衡之前,我们最好先了解应用是如何连接到数据库的。我们的大多数测试都使用 mysql(1) 命令行工具连接 Galera 集群、运行查询,然后关闭连接。然而,许多应用框架都使用连接池来最大限度地减少延迟并高效利用数据库服务器资源。

TCP 负载均衡在 stream 配置上下文中进行配置,因此我们在 nginx.conf 主文件中添加了一个 stream 块来创建基本的 MySQL 负载均衡配置。

stream {     include stream.conf; }

这可以将我们的 TCP 负载均衡配置与主配置文件分隔开来。然后我们在与 nginx.conf 相同的目录下创建 stream.conf。请注意,默认情况下,conf.d 目录是留给 http 配置上下文的,因此无法向该目录添加 stream 配置文件。

upstream galera_cluster {
      server 127.0.0.1:33061; # node1    server 127.0.0.1:33062; # node2    server 127.0.0.1:33063; # node3    zone tcp_mem 64k;}
server {
      listen 3306; # MySQL default    proxy_pass galera_cluster;}

首先,我们定义一个名为 galera_cluster 的上游组,其中包含 Galera 集群中的三个 MySQL 节点。在我们的测试环境中,它们都支持在本地主机上通过唯一的端口号进行访问。zone 指令定义了所有 NGINX worker 进程共享的内存容量,以维持负载均衡状态。Server{} 块配置了 NGINX 处理客户端的方式。NGINX 监听 MySQL 默认端口 3306,并将所有流量转发到在上游块中定义的 Galera 集群。<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值