负载均衡与高可用(二)

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

mysql服务器配置

       mysql服务器需要被连接,可以先创建一个库并创建一个新用户。

1. [root@mysql ~]# mysql -uroot -p123456
2. 
3. //省略部分内容
4. 
5. mysql> create database bbs;
6. 
7. Query OK, 1 row affected (0.00 sec)
8. 
9. mysql> grant all on bbs.* to bbs@'%' identified by '123456';
10. 
11. Query OK, 0 rows affected (0.00 sec)
12. 
13. mysql> exit
14. 
15. Bye

验证

       测试机访问代理服务器,分别使用linux端,xshell端,win端测试

1. 测试连接web1

linux端测试如下:(linux端和xhell端)

xshell端测试如下:

2. 测试连接数据库

       win端连接数据库测试工具有很多,如SQLyog、navicat等,本次使用SQLyog通过代理服务器连接mysql数据库。win客户端打开SQLyog软件,出现下图所示内容,添加代理服务器IP,mysql用户名密码及端口号点击连接即可。

       登录后可以看到刚刚在myslq服务器中创建的库,现在就可以进行编辑查看表了。

高可用

       高可用实验目标:本次实验分为两个部分,①在两台lb服务器上搭建nginx和keeplived,实现负载均衡器的高可用。模拟网站服务器损坏,使用客户机访问网站依然正常访问。②解决高可用裂脑问题。

拓扑图如下:

理论部分

1. 高可用作用:增加容错性(HA:High availability)

2. 协议:  VRRP(虚拟路由冗余协议) 公有协议  224.0.0.18

                HSRP(热备份路由协议)   私有协议,Cisco公司 224.0.0.5 224.0.0.6

3. 高可用软件:

       keepalived:使用vrrp实现多台主机高可用群集

       高可用角色:master 主服务器 、backup 备服务器

4. 高可用裂脑

       高可用节点之间互相失去联系,自认为自己是主服务器,就会出现多主现象,即裂脑现象。

裂脑出现的原因:

       心跳线松动或网卡故障。

       服务器硬件故障,崩溃。

       节点服务器开启防火墙,却没有做vrrp例外。

       nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作。

环境搭建

       根据拓扑图安装服务,lb1和lb2都需要安装nginx及keepalived,下面以lb1为例,两台web服务以web1为例。

lb搭建

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

web搭建

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

负载均衡高可用

lb1主要服务器配置

1. 通过搭建实现两台负载均衡器的高可用,过多不在介绍,详情请查看代理服务器配置

1. [root@lb1 ~]# cd /etc/nginx/conf.d/
2. 
3. [root@lb1 conf.d]# rm -rf default.conf 
4. 
5. [root@lb1 conf.d]# vim lb.conf
6. 
7. upstream web {
8. 
9.         server 192.168.1.6:80;
10. 
11.         server 192.168.1.7:80;
12. 
13.         }
14. 
15. server {
16. 
17.         listen 80;
18. 
19.         server_name www.lb.com;
20. 
21.         location / {
22. 
23.         proxy_pass http://web;
24. 
25.         include nginx_params;
26. 
27.                 }
28. 
29.         }
30. 
31. [root@lb1 conf.d]# vim /etc/nginx/nginx_params
32. 
33. proxy_set_header Host $http_host;
34. 
35. proxy_set_header X-Real-IP $remote_addr;
36. 
37. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
38. 
39. 
40. 
41. proxy_connect_timeout 30;
42. 
43. proxy_send_timeout 60;
44. 
45. proxy_read_timeout 60;
46. 
47. 
48. 
49. proxy_buffering on;
50. 
51. proxy_buffer_size 32k;
52. 
53. proxy_buffers 4 128k;
54. 
55. [root@lb1 conf.d]# systemctl restart nginx

2. 修改keepalived配置文件

1. [root@lb1 ~]# vim /etc/keepalived/keepalived.conf
2. 
3. global_defs {
4. 
5. //省略部分内容
6. 
7. router_id lb1         //该配置为主机名称,
8. 
9. vrrp_strict         //删除此行内容,路由器中vrrp的一些协议,linux中没有所以需要删掉
10. 
11. //省略部分内容
12. 
13. }
14. 
15. vrrp_instance VI_1 {
16. 
17.     state MASTER         //编辑为主要服务器
18. 
19.     interface ens33         //修改网卡为ens33
20. 
21.     virtual_router_id 51
22. 
23.     priority 100         //选举优先级,100为最高
24. 
25.     advert_int 1
26. 
27.     authentication {         //验证模块不需要修改,主备需相同
28. 
29.         auth_type PASS
30. 
31.         auth_pass 1111
32. 
33.     }
34. 
35.     virtual_ipaddress {
36. 
37.         192.168.1.200         //添加漂移地址
38. 
39.     }
40. 
41. }
42. 
43. [root@lb1 ~]# systemctl restart keepalived

lb2备份服务器配置

       lb1服务器已经配置了网页通过scp命令复制过来即可。

1. [root@lb2 ~]# scp -rp root@192.168.1.4:/etc/nginx/* /etc/nginx
2. 
3. [root@lb2 ~]# cd /etc/nginx/conf.d/
4. 
5. [root@lb2 conf.d]# ls
6. 
7. default.conf  lb.conf
8. 
9. [root@lb2 conf.d]# rm -rf default.conf         //删除默认网页
10. 
11. [root@lb2 conf.d]# systemctl restart nginx

web配置

       web1和web2配置相同下面以web1为例,相关配置参考web服务器配置

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.6" > /www/index.html         //创建网页内容,web2网页内容设置为192.168.1.7
28. 
29. [root@web1 conf.d]# systemctl restart nginx

验证

       客户端访问http://192.168.1.200,刷新两次可以看到web1和web2的网站内容。

       测试关掉lb1主机访问漂移地址,查看lb2的主机是否获取漂移地址。

       通过上图可以看到漂移地址已经到lb2主机上,访问http://192.168.1.200是否能正常访问。

       开启lb1主机,查看漂移地址是否又回到本机中。

 

       经过上面的测试已经配置成功负载均衡的高可用功能,下面将进行解决nginx故障问题详情请看理论部分

nginx故障问题

       关闭lb1服务器的nginx服务并访问漂移地址,发现漂移地址依旧在lb1上故而服务访问不了网站。下面就解决lb1服务器nginx故障造成无法访问的问题。

[root@lb1 ~]# systemctl stop nginx

1. [root@lb1 ~]# systemctl start nginx
2. 
3. [root@lb1 ~]# vim /sh/check_nginx_proxy.sh
4. 
5. #!/bin/bash
6. 
7. killall -0 nginx
8. 
9. if [ $? -ne 0 ];then
10. 
11.         systemctl stop keepalived
12. 
13. fi
14. 
15. [root@lb1 ~]# chmod +x /sh/check_nginx_proxy.sh
16. 
17. [root@lb1 ~]# vim /etc/keepalived/keepalived.conf 
18. 
19. ! Configuration File for keepalived
20. 
21. 
22. 
23. global_defs {
24. 
25. //省略部分内容
26. 
27.    router_id lb1
28. 
29. //省略部分内容
30. 
31. }
32. 
33. vrrp_script check_nginx_proxy {         //添加模块内容
34. 
35.         script "/sh/check_nginx_proxy.sh"
36. 
37.         interval 2
38. 
39.         weight 5
40. 
41. }
42. 
43.     state MASTER
44. 
45.     interface ens33
46. 
47.     virtual_router_id 51
48. 
49.     priority 100
50. 
51.     advert_int 1
52. 
53.     authentication {
54. 
55.         auth_type PASS
56. 
57.         auth_pass 1111
58. 
59.     }   
60. 
61.     virtual_ipaddress {
62. 
63.         192.168.1.200
64. 
65.     }   
66. 
67.     track_script {         //在实例内启用脚本模块
68. 
69.         check_nginx_proxy
70. 
71.     }   
72. 
73. }  
74. 
75. [root@lb1 ~]# systemctl restart keepalived

       模拟损坏nginx,测试结果。

[root@lb1 ~]# systemctl stop nginx

       分别再lb1和lb2上查看漂移地址,可以看到lb1上nginx损毁后,漂移地址已经到lb2上。

 

相关实践学习
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