88人参与 • 2024-08-06 • 网络协议
目录
4.3 加权轮询(weighted round robin)
利用nginx进行四层负载均衡:mysql数据库的高效管理
在高流量的应用场景中,单个数据库服务器往往无法承受巨大的并发请求压力。为了提高性能和可靠性,企业级应用通常采用负载均衡技术来分散请求,确保数据服务的稳定性和快速响应。nginx,作为一款高性能的http和反向代理服务器,自1.9.0版本起,也提供了tcp/udp四层负载均衡功能,能够有效地为后端服务如数据库提供负载均衡。
四层负载均衡简介
四层负载均衡(也称为l4负载均衡)是指在网络模型的第四层(传输层)上进行负载均衡。它主要基于ip地址和端口号来分发流量,适用于tcp和udp协议。四层负载均衡对于数据库服务器尤其有用,因为它能够直接处理和转发数据流,而无需关心应用层的协议细节。
配置nginx进行四层负载均衡
客户端 :192.168.239.133
代理服务器:192.168.239.138
两台mysql服务器 : 192.168.239.131 192.168.239.174
客户端和两台mysql服务器均需要部署,以下演示一台
mysql官网 : https://www.mysql.com
复制下载链接
# 下载yum仓库
[root@client ~]# wget https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
# 使用yum安装mysql需要的包
[root@client ~]# yum install mysql-community-client mysql-community-server mysql-community-client-plugins mysql-community-common mysql-community-libs mysql-community-icu-data-files
# 启动mysql
[root@client ~]# systemctl start mysqld
# 查看端口是否监听
[root@client ~]# netstat -tunlpt | grep mysql
tcp6 0 0 :::33060 :::* listen 34029/mysqld
tcp6 0 0 :::3306 :::* listen 34029/mysqld
# mysql会生成初始密码在/var/log/mysqld.log 里
[root@client ~]# grep password /var/log/mysqld.log
2024-07-13t02:33:42.553668z 6 [note] [my-010454] [server] a temporary password is generated for root@localhost: i)-#g;kk?7r&
# 输入密码登录
[root@client ~]# mysql -uroot -p
enter password:
登录后mysql操作
# 修改mysql的root密码
mysql> alter user 'root'@'localhost' identified by 'openlab123!';
query ok, 0 rows affected (0.00 sec)
mysql> use mysql;
reading table information for completion of table and column names
you can turn off this feature to get a quicker startup with -a
database changed
# 将只允许本地登录改为通配符也就是允许所有人登录
mysql> update user set host='%' where user='root';
query ok, 1 row affected (0.01 sec)
rows matched: 1 changed: 1 warnings: 0
# 刷新权限
mysql> flush privileges;
query ok, 0 rows affected (0.01 sec)
mysql> exit
在此实验中只需要部署与配置代理服务器的的nginx
为节省时间 此处就不使用源码安装了,直接使用yum安装
[root@forward ~]# yum install nginx
注意这个stream模块是实现四层负载均衡的模块
在官方文档上也可以找到使用的其使用说明
module ngx_stream_upstream_module (nginx.org)
所有机子均关闭
[root@forward ~]# mkdir /etc/nginx/tcp
[root@forward ~]# vim /etc/nginx/nginx.conf
添加以下行将tcp以下.conf结尾的文件读取,在tcp文件夹里面写stream块的配置
[root@forward ~]# vim /etc/nginx/tcp/test.conf
stream {
upstream mysql {
# 默认为轮循算法,假如不加weight的情况下,加上weight就变成加权轮循了
server 192.168.239.131:3306 weight=5;
server 192.168.239.174:3306 weight=10;
}
server {
listen 3306;
proxy_pass mysql;
}
}
# 语法检查
[root@forward ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 重启nginx
[root@forward ~]# systemctl restart nginx
# 检查端口是否监听
[root@forward ~]# netstat -tunlpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 2818/nginx: master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* listen 2818/nginx: master
tcp6 0 0 :::80 :::* listen 2818/nginx: master
[root@client ~]# mysql -uroot -popenlab123! -h192.168.239.138 -e 'select @@hostname'
在四层(tcp/udp)负载均衡中,nginx 的 stream
模块可以用来配置不同的负载均衡算法。下面我将给出使用不同算法配置的示例,这些配置适用于 tcp 层面的负载均衡,比如数据库服务器、邮件服务器等。
这是最基本的算法,请求会被轮流分发到各个服务器。
stream {
upstream mysql {
server 192.168.239.131:3306;
server 192.168.239.174:3306;
}
server {
listen 3306;
proxy_pass mysql;
}
}
此算法会将新的连接发送到当前连接数最少的服务器。
stream {
upstream mysql {
least_conn;
server 192.168.239.131:3306;
server 192.168.239.174:3306;
}
server {
listen 3306;
proxy_pass mysql;
}
}
允许你根据服务器的性能分配不同的权重,权重高的服务器将接收更多连接。
stream {
upstream mysql {
server 192.168.239.131:3306 weight=5;
server 192.168.239.174:3306 weight=10;
}
server {
listen 3306;
proxy_pass mysql;
}
}
该算法确保来自同一 ip 地址的连接总是被发送到同一台服务器,这对于需要会话持久性的服务很有用。
stream {
upstream mysql {
ip_hash;
server 192.168.239.131:3306;
server 192.168.239.174:3306;
}
server {
listen 3306;
proxy_pass mysql;
}
}
注意事项
stream
模块中,proxy_pass
语法略有不同,它后面直接跟的是上游服务器组的名字,而不是完整的 url。stream
模块是可用的,并且正确地配置了所有服务器和端口。以上配置示例展示了如何使用 nginx 的 stream
模块进行四层负载均衡的不同算法配置。选择合适的算法需要考虑到服务的性质、服务器的性能差异以及会话管理的需求。
nginx-mod-stream
nginx-mod-stream
是 nginx 的一个模块,专门用于处理 tcp 和 udp 流,即第4层(传输层)的负载均衡。这个模块允许 nginx 作为高性能的 tcp/udp 代理和负载均衡器,可以用来为各种服务进行负载均衡,包括但不限于数据库服务(如 mysql、postgresql)、邮件服务(smtp、imap、pop3)、dns 服务、voip 服务等。
主要特点
nginx-mod-stream
可以代理 tcp 和 udp 请求,这使得 nginx 成为一个通用的网络负载均衡器。stream
模块也支持丰富的配置选项,可以精细控制代理行为。nginx-mod-stream
可以处理大量的并发连接,非常适合高负载环境。配置示例
以下是一个使用 nginx-mod-stream
进行 tcp 负载均衡的简单配置示例:
stream {
upstream mysql {
server 192.168.239.131:3306;
server 192.168.239.174:3306;
}
server {
listen 3306;
proxy_pass mysql;
}
}
在这个示例中,nginx 监听 3306 端口,并将接收到的连接代理到 backend
上游组中的服务器。上游组中定义了两台服务器,它们将根据轮询算法接收连接。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论