关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

负载均衡与高可用(一)

发布时间:2023-06-30 19:00:55

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

        负载均衡实验目标:本次实验分为两个部分;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

   



/template/Home/leiyu/PC/Static