网站又挂了,一招搞定~

点击"终码一生",关注,置顶公众号

每日技术干货,第一时间送达!

前段时间网站出现了一些比较大的问题,发卡网站使用的是硅云的香港服务器,出现了网络节点故障及机房电源问题,一停就是三四天。教程站也被攻击了几次,包括DDos攻击,可能是因为网站哪里写的让大神不满意了,竟对一个小站痛下杀手,造成网站瘫痪了一上午,因为垃圾流量过大,也是一度触发了阿里云的公网流量阀值,iP服务器被阿里云直接屏蔽访问了,给正常访问的用户带来极差的体验。

尤其是硅云的服务器,因为是小云商,各种小问题不断,一会网络故障,一会又电源故障,不知道的还以为我用自己电脑搭的网站呢。说起来是上云了,但是稳定性极差,不胜其烦,因为上面部署的是几个主要的网站,后面也是一直也在考虑迁移。

|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| | |
| | |

相信不少站长也有过类似的经历,那么碰到这些问题有没有好的解决办法呢?答案是肯定的。我也一直在找稳定,安全,性价比高的替代方案。网站运维时间减少了,才有更多的精力去做其他事情。

总结,遇到的问题:

  • 担心单点故障

  • 访问量较大

  • 减少运维时间

首先考虑用大的云商服务器,之前使用过多家云服务,最后决定还是将主要网站迁回阿里云,没有对比就没有伤害,相对阿里云还是要稳定许多,其次我对阿里云后台操作相对熟悉,同时他提供的有一站式解决方案,并且性价比较高,操作也很便捷。

1、高可用、高并发流量架构

在我们搭建自己的高可用架构之前,需要介绍下本次使用到的几款阿里云产品:

弹性公网IP(EIP)

弹性公网IP其优势非常大,用户购买固定的弹性公网IP,可以绑定到自己的负载均衡服务SLB或ESC服务器上,这样后面无论资源如何变化,我们只需更换EIP的绑定对象,不需要通过域名重新解析(因为每次域名解析至少30分钟,甚至更久才会生效,会造成大面积的用户访问中断,如果考虑老用户的浏览器缓存问题,则影响会更大),从而保证了对外服务的稳定性。

负载均衡SLB

阿里云自研软件负载均衡SLB,相对于硬件负载均衡来说,入门难度较低,人人可以操作使用,不需要专业的知识,更不需要精通硬件和运维知识。只需简单的添加和配置策略,就可以动态将用户访问请求分发的不同的后端运行服务器上,可以有效解决单独故障和单个服务器性能不足或性能瓶颈的问题。同时SLB提供了轮训,轮训加权,最少连接数,以及一致性哈希等不同的调度算法,可以更加自由转发和控制流量。

云服务ECS

阿里云云服务器ECS,是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS级别云计算服务,实现了计算资源的即开即用和弹性伸缩,对于我们普通用户,流量较小的网站,一般2C4G的配置就足够使用,随着流量变大,我们也可以自由升降配置。

云数据库RDS

阿里云提供的一套稳定可靠、可弹性伸缩的关系型云数据库RDS,支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,具备容灾、备份、恢复、迁移等方面的全套解决方案。

2、资源购买

购买弹性公网IP

进入到阿里云控制台,直接搜索「弹性公网IP」,直达管理界面。首次进入,需要创建弹性公网IP,我们根据需求选择以下。

选择配置

选择好点「下一步」,确认配置无误,提交即可,EIP为按量计费,后付费模式,注意个人账单。

购买负载均衡SLB

同样的,我们控制台搜索「负载均衡SLB」,快速直达管理界面。可以看到,SLB提供多种负载均衡类型,包括传统型负载均衡CLB(提供四层和七层负载均衡)、网络型负载均衡NLB(四层)、应用型负载均衡ALB(七层)。我们根据自己的业务情况选择,这里选择CLB类型负载均衡

点击左侧CLB类型 - 实例管理,首次使用,需要「创建传统型负载均衡」

选择配置信息,因为手里目前两台ECS均为「华北2区」,这里SLB我们也选择为「华北2区」

计费方式,选择「按规格计费」,实例类型选择「私网」,专有网络默认不变

确认没有问题我们提交购买即可。

购买云服务ECS

我账号下已经有2台ECS,这里不需要在购买了。ECS购买大家可以趁着有活动的时候购买,近期官方有一个"99计划",2C2G云服务器,99元/年,可以连续续费3年,一共是4年。性价比还是比较高的,新老用户均可用购买,有需求的可以去购买。想要搭建高可用,至少需要2台以上ECS。

也可以试试官方新推出的免费试用:https://free.aliyun.com/?spm=a1z389.11499242.0.0.7b1c2413RCDDMk\&scm=20140722.M_10513603._.V_1\&product=1351

ECS的配置,大家根据自己需要选择。比较简单,选择好提交购买即可。

3、开始配置和搭建

1、EIP绑定负载均衡实例

返回到我们弹性公网IP管理界面,我们需要将弹性公网IP,绑定到负载均衡上,如下:

选择刚才创建的负载均衡SLB实例:

选择好,点击确认。

2、SLB配置监听和后端服务器

返回到SLB管理页,找到我们刚购买的SLB实例,点击开始配置,如下:

  • **协议&监听:**选择TCP协议(四层分发,如果选择HTTP为七层分发),并在监听端口处输入80(Web服务默认端口),点击下一步:
  • **添加后端服务器:**选择默认服务器组,并点击继续添加,全选两台ECS后,点击下一步:
  • **添加端口和权重:**点击确认添加,端口添加为【80】,权重根据自己服务器配置选择,我2台服务器一台式2C4G,一个2C2G,将权重一个设置为100,一个为50,点击下一步
  • 默认不变,点击下一步
  • 点击提交,完成配置

到这里已经完成高可用配置,下面是去服务器下部署我们的网站,并通过弹性公网IP进行访问。

3、部署网站

因为我的2台服务器目前均已部署有网站,并通过宝塔管理,所以我这里不在部署,但需要把弹性公网IP添加到宝塔的域名管理中,方便访问,如下:

4、测试

我们希望通过弹性公网IP,进行访问,通过负载均衡SLB动态的访问不同云主机服,因为一台服务器的权重比较高,我们访问时两个网站应该是交替切换访问,同时权重高的相对频率会更多一些。

考虑到我们浏览器直接访问,会有缓存的问题,可能不会频繁切换网站,我们通过终端口令curl进行请求,并提取网站的标题,便于区分。

curl -s "47.93.62.70" | grep -o "<title>.*</title>" | sed -e 's/<[^>]*>//g'

下面是本次测试结果:

5、结论

通过上面的访问,我们可以看到每次访问都会请求不同的网站,已经实现我们的目的,流量也得到了分流,达到了我们的期望。

6、其他说明

**会话一致性问题:**有同学可能已经发现,如果每次请求都频繁的切换主机服务器,会话如何保持一致呢?这个在负载均衡可以设置,我们可以启用会话保持功能,可以设置一段时间,例如30分钟,在30分钟内,始终由这台服务器为用户提供服务,在30分钟后,此用户再来访问时,才会重新选择服务器,保证了用户体验的一致性。

单点故障问题 **:**负载均衡时刻对后端服务器做健康检查,一旦机器出现故障,会直接剔除,将流量转移到正常运行的服务器上,等到服务恢复正常,会再次添加,可以有效避免因单点故障造成的服务中断问题。

4、最后

最终确定该方案是我们需要的方案后,剩下就是迁移我们主网站,我们只需要将主网站迁移到每台服务器上,数据库我们可以放到资源更大的那台服务器,两台服务器同时链接,当然,为了避免再次出现单点故障问题,我们也可以将数据库单独管理,放到云数据库RDS上,这样也是最稳妥的,但有一定的成本。最后,将我们的域名DNS解析指向弹性公网IP,一套简单的高可用架构就完成了。

做一个总结:

该架构设计中我们通过弹性公网IP,实现了域名与服务器资源的接耦,不需要在关注后端服务器的变更,每一次都需要重新做域名的DNS解析,这样保证了用户访问的稳定性,同时也有利于网站SEO优化。

而负载均衡为我们提供了统一的访问入口,并在后端绑定多台服务器,也易于扩展,根据不同的调度算法,我们实现了流量动态分发,确保了后端均衡的承载流量。

好了,就分享到这里,希望该套架构设计对你有所帮助。有什么问题大家可以留言交流。

没玩过云服务器的,可以点击「原文阅读」,免费试用阿里云云服务ECS。

参考:https://edu.aliyun.com/course/3113500/lesson/341054074

相关推荐
聂 可 以1 小时前
Windows环境安装MongoDB
数据库·mongodb
web前端神器1 小时前
mongodb多表查询,五个表查询
数据库·mongodb
门牙咬脆骨1 小时前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
门牙咬脆骨1 小时前
【Redis】GEO数据结构
数据库·redis·缓存
wusong9991 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb
代码小鑫1 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
changuncle2 小时前
MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)
数据库·mongodb
久醉不在酒2 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
WindFutrue2 小时前
使用Mybatis向Mysql中的插入Point类型的数据全方位解析
数据库·mysql·mybatis
我不瘦但很逗2 小时前
Windows下使用DBeaver连接云数据库(MySQL)
数据库·windows