一、从单机架构到集群架构的演变之路
项目背景:
最近我们公司内部的几位程序猿因为无聊,编写了一个博客网址, 并且每个人都有在上面写自己的帖子,因为写的确实不错,公司非 程序员也开始使用这个博客来记录自己的工作经历等信息.程序猿们看到自己的网站这么受欢迎,希望互联网上的网友们也来使用他们的网站,但是这群程序猿只会写代码,不会部署网站架构,所以联系我,希望提供一个成熟的网络架构,让广大网友们使用他们写的博客网站
项目流程:
- 基于LNMP架构的单机架构
- 单机模式向互联放开模式的过渡
- 数据库分离-独立的数据库服务器
- Web服务器从单台到集群的部署
- 代理服务器-实现负载均衡
- 代理服务器的热备
- Web服务器实现动静分离
- NFS独立的存储服务器
- 构建Ceph存储服务器集群
- 数据库集群架构
- 部署缓存服务器
- 成熟的架构
二、需求分析
1.基于LNMP架构的单机架构
Web服务器单台主机构建流程 -->安装Nginx服务 -->安装Mariadb服务 -->安装Php服务
服务器台数:1台
访问方式:通过ip访问
适用场景:用户量少时使用,简单、成本低
缺点:存在单点故障,仅用于公司内部访问
设计流程:
1)为Web服务器安装Mariadb或mysql(maridab更加轻便,而且开源),以此提供数据库服务器
2)为Web服务器安装php,php-fpm软件,取决于你使用什么语言编写自己的Web网站
3)为Web服务器安装nginx软件,提供php网络解释器,过滤网页请求
参考技术:Linux php php-fpm nginx mariadb mysql
参考文章:
[LNMP环境部署]https://blog.csdn.net/ck784101777/article/details/99300835
[Nginx安装与使用]https://blog.csdn.net/ck784101777/article/details/99462427
2.单机模式向互联开放模式的过渡
互联开放模式的架构
服务器台数:2台 Dns服务器
Web服务器 访问方式:通过域名访问
访问前提:有公有ip地址和域名
适用场景:用户量少时使用,简单、成本低 缺点:存在单点故障
设计流程:
1)在DNS服务器上安装bind,bind-chroot
2)配置域名解析,全限定域名(主机号+域名)转换为局域网的具体对应的主机ip
参考技术:DNS
参考文章:
[Linux下使用DNS]https://blog.csdn.net/ck784101777/article/details/97152814
3.数据库分离-独立的数据库服务器
独立数据库服务器是将网站静态文件、代码文件等资料与数据库分离的架构,当用户量增加时单机的处理能力有限,PHP或JAVA代码的执行需要消耗大量CPU资源,数据库的增删改查需要调用大量的内存资源,将两者分离可以减轻服务器的压力,Web服务器和数据库服务器的压力都可以得到有效改善,访问量有所增加。但是服务器依然存在单点故障问.
Web-数据库服务器分离架构
服务器台数:1台 数据库服务器
独立数据库的好处:减少Web服务器压力, 独立的数据库更利于数据管理
适用场景:用户量少,需要单独维护管理数据库
缺点:Web服务器和数据库服务器的压力都可以得到有效改善,访问量有所增加。但是服务器依然存在单点故障问题。
设计流程:
1)新增一台服务器,根据业务需求选择一款数据库
2)安装数据库软件mysql
参考技术:mariadb mysql redis oracle
参考文章:
[Linux安装卸载Mysql与基本操作]https://blog.csdn.net/ck784101777/article/details/100584825
[NoSql非关系型数据库,安装Redis,搭建LNMP+Redis]https://blog.csdn.net/ck784101777/article/details/101294306
4.Web服务器从单台到集群的部署
Web集群架构
服务器台数:3台以上 Web服务器*3+
适用场景:用户量增多,单台服务器 压力过高时
设计流程:
1)新增若干台Web服务器,要求每台服务器配置环境一致
2)新增一台代理服务器,用于调度Web服务器,选择一种代理技术Nginx/haproxy/LVS
3)为保证数据一致性,将数据库服务器独立出去
参考技术:Nginx haproxy LVS
参考文章:
[Keepalievd+Nginx/LVS/HAProxy]https://blog.csdn.net/ck784101777/article/details/100151041
[HAProxy]https://blog.csdn.net/ck784101777/article/details/100150846
5.代理服务器
要做Web集群必须用到代理服务器,主要的作用是做负载均衡
参考技术:Nginx LVS HAporxy
6.Keepalived实现热备份
一台代理服务器是不够的,为了保证网络的高可用性,我们至少需要准备两台Nginx服务器,我们用Keepalived软件实现
热备份是指在正常情况下,两余度同时工作,当某一余度出现故障时,系统可切除故障余度,启用单余度方式,降级工作.本系统采用热备份方式。 Keepalived将自动检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器正常后,自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器
设计流程:
1)新增一台服务器,在两台代理服务器上安装Keepalievd软件,实现一个高可用的功能
参考技术:Keepalievd
参考文章:
[Keepalievd安装与使用]https://blog.csdn.net/ck784101777/article/details/99991418
7.Web服务器实现动静分离
对于网站内容而言可以分离为动态页面和静态页面,静态页面就需要数据文件,动态页面则需要CPU解析代码,需要消耗大量的CPU资源,因此可以将静态和动态分离为两组服务器,动态页面有脚本代码组成,是一种基于网页的应用程序,因此这一组服务器也称为应用服务器
Web服务器动静分离架构
服务器台数:6台以上 Web静态服务器*3+ Web动态服务器*3+
适用场景:动态页面的处理 需要占用较多服务器资源时,开发量变大,前后端交流成本升高 硬件、维护、开发成本提高
设计流程:
1)区分静态服务器与动态服务器,做ip规划,主机硬件规划
2)在代理服务器上使用Nginx做动静分离,将静态请求和动态请求分发转给动/静态服务器
参考技术:Nginx php
参考文章:
[动静分离技术的原理]https://blog.csdn.net/ck784101777/article/details/99327125
8.构建NFS服务器-独立存储空间
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS服务器架构
服务器台数:1台以上 NFS存储服务器 *1
适用场景:Web集群必须使用 NFS存储服务器来做数据统一
参考技术:NFS
参考文章:
[Linux上实现NFS共享]https://blog.csdn.net/ck784101777/article/details/95621804
9.NFS服务器升级-Ceph分布式存储集群
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph集群架构
服务器台数:3台以上 Ceph存储服务器*3+
适用场景:为了解决NFS的单 点故障,配置Ceph实现高可用 ,硬件成本提供,成本核算时要考虑更多,运维复杂度会因为服务变 多而变得很复杂
参考技术:Ceph
参考文章:
10.数据库集群架构
随着信息技术的发展,企业越来越依赖于信息化管理,各业务应用的数据信息,主要存储在数据库中企业对这些数据访问的连续性要求越来越高,为了避免因为数据的中断导致各种损失,数据库的高可用已成了企业信息化建设的重中之中同时,对于政府、电信、金融、能源、军工等等涉及国计民生的行业或领域的关键业务对于关键数据存储都需要高可用必须保证数据系统7×24小时全天候运行,防止数据丢失、数据损坏
数据库集群架构
服务器台数:3台以上 数据库服务器*3+
适用场景:为了解决NFS的单 点故障,配置Ceph实现高可用 ,硬件成本提供,成本核算时要考虑更多,运维复杂度会因为服务变 多而变得很复杂
参考技术:PXC MHA
11.部署缓存服务器
缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器
参考技术:ehcache,varnish,memcache,redis
12.成熟的网站架构
成熟的网站架构需要每个部分的服务器拥有高可用性,即保证在单台损坏的情况下不影响用户的体验,不造成数据的丢失等
服务器台数:19台以上
Dns服务器*2+
代理服务器*2+
Web服务器*3+ 动态服务器*3+
Ceph存储服务器*3+
数据库服务器*3+
缓存服务器*3+
补充: