负载均衡与高可用(一)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 负载均衡与高可用

本次负载均衡与高可用分别实验。

       负载均衡实验目标:本次实验分为两个部分;1.应用层负载均衡:客户端通过代理服务器访问web1和web2。2.网络层负载均衡:客户端通过代理服务器远程连接web1和mysql服务器。

拓扑图如下:

负载均衡

理论部分

1. 代理和负载均衡:

       代理负责把连接请求直接转发到后台某个web节点。

       负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点。

2. 负载均衡(Load Balance),简写LB

       面对高并发web请求,使用各种调度算法(rr,wrr,lc,wlc,ip_hash),分散转发到后台web群集节点,提高数据吞吐量,高容灾。

       (ip_hash是根据用户请求过来的ip,然后映射成hash值,然后分配到一个特定的服务器里面)。

3. 常见的LB

       软件:lvs  nginx   haproxy  

       硬件:F5

       云LB:阿里云SLB    腾讯云CLB   青云QLB   ucloud ULB

4. 实现方式

       四层负载:ip地址    tcp/udp  端口号

       七层负载:HTTP  https  ftp   SMTP

应用层负载均衡

拓扑图如下:

 

环境搭建

       三台服务器均需要安装nginx并启动,下面以一台为例。

1. [root@lb1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force
2. 
3. [root@lb1 ~]# systemctl start nginx
4. 
5. [root@lb1 ~]# systemctl enable nginx

代理服务器配置

1. 编辑配置文件

1. [root@lb1 ~]# cd /etc/nginx/conf.d/
2. 
3. [root@lb1 conf.d]# ls
4. 
5. default.conf
6. 
7. [root@lb1 conf.d]# rm -rf default.conf             //删除默认配置文件
8. 
9. [root@lb1 conf.d]# vim lb.conf                     //新建配置文件
10. 
11. upstream web {
12. 
13.         server 192.168.1.5:80;
14. 
15.         server 192.168.1.6:80;
16. 
17.         }
18. 
19. server {
20. 
21.         listen 80;
22. 
23.         server_name www.test.com;
24. 
25. 
26. 
27.         location / {
28. 
29.                 proxy_pass http://web;             //代理web模块中的主机
30. 
31.                 include nginx_params;              //包含nginx_params中的配置文件,该配置文件表示创建优化项,网站配置文件直接调用。也可以把文件中的内容写在当前行,但稍显紊乱。
32. 
33.                 }
34. 
35.         }

2. 创建优化项文件,网站配置文件直接调用(选用,但推荐使用)。

1. [root@lb1 conf.d]# vim /etc/nginx/nginx_params
2. 
3. proxy_set_header Host $http_host;
4. 
5. proxy_set_header X-Real-IP $remote_addr;
6. 
7. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8. 
9. 
10. 
11. proxy_connect_timeout 30;
12. 
13. proxy_send_timeout 60;
14. 
15. proxy_read_timeout 60;
16. 
17. 
18. 
19. proxy_buffering on;
20. 
21. proxy_buffer_size 32k;
22. 
23. proxy_buffers 4 128k;
24. 
25. [root@lb1 conf.d]# systemctl restart nginx

3. nginx_params参数介绍

proxy_set_header Host $http_host;                                                                         #重新定义或者添加发往后端服务器的请求头

proxy_set_header X-Real-IP $remote_addr;                                                         #启用客户端真实地址(否则日志中显示的是代理在访问网站)

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                       #记录代理地址

proxy_connect_timeout 30; (单位:秒,默认60秒)                                                #代理和后端服务器连接超时时间

proxy_send_timeout 60;                                                                                          #后端服务器传回代理的超时时间

proxy_read_timeout 60;                                                                                          #代理等待后端服务器的响应时间

proxy_buffering on;                                                                                                #启用缓存,后端返回内容先缓存,再给客户端,收到多少转多少

proxy_buffer_size 32k;                                                                                                 #代理缓存用户头信息的缓存区大小

proxy_buffers 4 128k;                                                                                                 #缓存区的设置

proxy_busy_buffers_size 256k;                                                                       #从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方

proxy_max_temp_file_size 256k;                                                                            #超大的响应头存储成文件。

4. 负载均衡后端状态

weight                                         权重,默认为1

down                                           当前节点服务器不参与负载均衡

backup                                        备份服务器

max_fails                                    允许请求失败的次数

fail_timeout                                 经过max_fails失败后,服务的暂停时间

max_conns                                 同一ip最大连接数

例如:

       下面配置选做,了解参数即可。修改配置文件,可加多个参数。

1. [root@lb1 ~]# vim /etc/nginx/conf.d/lb1.conf
2. 
3. 修改为:
4. 
5. upstream web_cluster {
6. 
7.         server 192.168.1.5:80 max_fails=2 fail_timeout=10s max_conns=1;  
8. 
9.         server 192.168.1.6:80 down; //一般用于停机维护
10. 
11. }

web服务器配置

1. web1配置

       web1配置和web2配置基本相同,配置web1后可以使用scp命令复制到web2,但实验过程中网页内容需要区分。成产环境中的网页内容一般都是一致的(例如使用nfs或gfs等)。

1. [root@web1 ~]# cd /etc/nginx/conf.d/
2. 
3. [root@web1 conf.d]# rm -rf default.conf 
4. 
5. [root@web1 conf.d]# vim web.conf
6. 
7. server {
8. 
9.         listen 80;
10. 
11.         server_name www.web.com;                 //本次不需要使用虚拟主机,域名随意填写即可
12. 
13.         location / {
14. 
15.                 root /www;
16. 
17.                 index index.html;
18. 
19.                 }
20. 
21.         }
22. 
23. [root@web1 conf.d]# nginx -t
24. 
25. [root@web1 conf.d]# mkdir /www                         //创建网站根目录
26. 
27. [root@web1 conf.d]# echo "192.168.1.5" > /www/index.html             //创建网页内容
28. 
29. [root@web1 conf.d]# systemctl restart nginx

2. web2配置

       web1已经配置,scp命令复制过来即可。

1. [root@web2 ~]# scp -rp root@192.168.1.5:/etc/nginx/* /etc/nginx/
2. 
3. [root@web2 ~]# cd /etc/nginx/conf.d/
4. 
5. [root@web2 conf.d]# ls //查看是否存在nginx默认首页
6. 
7. default.conf  web.conf
8. 
9. [root@web2 conf.d]# rm -rf default.conf //删除nginx默认首页
10. 
11. [root@web2 conf.d]# mkdir /www //创建网站根目录
12. 
13. [root@web2 conf.d]# echo "192.168.1.6" > /www/index.html //创建网页内容
14. 
15. [root@web2 conf.d]# systemctl restart nginx

验证

       客户端访问代理服务器http://192.168.1.4,经过多次刷新可以看到下图页面。如果通过网页访问辨别不出来可以使用命令tail -f /var/log/nginx/access.log辨别。

网络层负载均衡

拓扑图如下:

环境搭建

       根据上图代理服务器和web1安装nginx和一台mysql数据库,nginx安装以代理服务器为例。注意分清主机名称】

1. [root@lb1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force
2. 
3. [root@lb1 ~]# systemctl start nginx
4. 
5. [root@lb1 ~]# systemctl enable nginx
6. 
7. [root@mysql ~]# rpm -ivh /media/mysql5.6-rpm/* --nodeps --force
8. 
9. [root@mysql ~]# systemctl start mysqld
10. 
11. [root@mysql ~]# systemctl enable mysqld
12. 
13. [root@mysql ~]# mysqladmin -uroot password
14. 
15. New password: //输入新密码
16. 
17. Confirm new password: //再次输入新密码

代理服务器配置

1. [root@lb1 ~]# vim /etc/nginx/nginx.conf         //将下面字段插入http字段上方
2. 
3. stream {
4. 
5.         upstream sshweb1 {
6. 
7.                 server 192.168.1.5:22;
8. 
9.         }
10. 
11.         upstream mysql {
12. 
13.                 server 192.168.1.7:3306;
14. 
15.         }
16. 
17. 
18. 
19.         server {
20. 
21.                 listen 5555;                     //监听5555端口
22. 
23.                 proxy_pass sshweb1;              //如客户端访问5555端口将指定web1主机
24. 
25.                 proxy_connect_timeout 30;
26. 
27.                 proxy_timeout 60;
28. 
29.         }
30. 
31.         server {
32. 
33.                 listen 7777;                      //监听7777端口
34. 
35.                 proxy_pass mysql;                 //如客户端访问7777端口将指定mysql主机
36. 
37.                 proxy_connect_timeout 30;
38. 
39.                 proxy_timeout 60;
40. 
41.         }
42. 
43. }
44. 
45. [root@lb1 ~]# nginx -t
46. 
47. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
48. 
49. nginx: configuration file /etc/nginx/nginx.conf test is successful
50. 
51. [root@lb1 ~]# systemctl restart nginx


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
缓存 负载均衡 关系型数据库
Pgpool-II实现高可用+读写分离+负载均衡(一)---- 规划及安装
Pgpool-II是一款工作在PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件。提供了连接池、复制、负载均衡、限制过多连接、看门狗、查询缓存等功能。
|
负载均衡
Pgpool-II实现高可用+读写分离+负载均衡(七)---- recovery_1st_stage分析
recovery_1st_stage是Pgpool online recovery的第一阶段,位于PG_DATA目录下,主要功能就是使用pg_basebackup恢复(recovery)从节点。
|
4月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
132 1
|
4月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
234 0
|
4月前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
存储 缓存 运维
解密一致性哈希算法:实现高可用和负载均衡的秘诀
解密一致性哈希算法:实现高可用和负载均衡的秘诀
770 0
|
6月前
|
Kubernetes 负载均衡 监控
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
380 1