中小型网站服务器架构设计

2019-07-11 12:05:24石岩岭
关键词:日志服务器情况

梁 剑,石岩岭

(1.太原工业学院计算机工程系,山西太原030008;2.山西大同大学网络信息中心,山西大同037009)

随着互联网的普及,越来越多的个人、机构、企业接入互联网。对于一些机构和企业来说,建设网站可以展示自身,开展相关业务,这几乎是当前这个时代必不可少的部分。

对于这些网站来说,首先,应该要有较高的可靠性,在成本允许的范围内减少一年中的故障时间。除了选择可靠性高的服务器、磁盘阵列外,提高可靠性最有效的方法是使用双机或多机热备份。

其次,要有较高的安全性,安全性包括保密性、完整性、和可用性。保密性就是要确保重要信息不被非授权地窃取,这主要依赖于软件系统的设计与实现;完整性要确保信息不被伪造、篡改、删除以及意外丢失,这除了软件系统的设计外,在服务器上可以通过双机备份,异地数据备份实现;服务器上的可用性主要体现在能抵抗各种类型的拒绝服务攻击(Denial of Service)。

第三,服务器架构应具备可伸缩性,对于企业或机构来说,初期可能业务量少,用户访问量少,需要的服务器性能也低,随着时间的推移,更多的用户访问,需要更强的服务器能力。这时需要增加服务器来分担用户访问负荷,这一过程中架构不应有大的调整,特别是软件部分不应有大调整,因为软件的重新开发需要消耗大量的人力。

1 服务器的架构设计

1.1 整体架构设计

架构如图1所示,服务器类型分为反向代理服务器、Web 服务器、数据库服务器。对于初期小型网站来说,可以根据情况将这三种类型的服务器部署到一台物理服务器上,以节约成本。当需要扩展时,将其分布到多台物理服务器上。

图1 网站架构图

1.2 操作系统的选择

目前在网站建设中最常见的操作系统是Linux和Windows Server系统,Linux的优点体现在它是开源免费的软件,不需要额外支付软件许可费用。同时多数服务器软件如Redis、Nginx、MyCat 等在Linux 平台上有更好的表现。Windows 的优势主要体现在其操作日常人们的操作习惯类似,没有特殊情况应选择Linux操作系统。

1.3 代理服务器软件的选择

多数支持HTTP协议的Web服务器都能支持反向 代 理(Reverse proxy),如 Nginx、Apache、Squid、Lighttpd 等,其中Nginx 拥有更好的性能、内存占用少,特别是Nginx 社区比较活跃,软件功能模块也多,特别是在高并发情况下比Apache 有更好的性能[1-2],所以推荐使用Nginx。

1.4 Web服务器的选择

Web 服务器的选择更加依赖于软件架构的设计,目前常见的后端开发技术有PHP、Java 等,如果使用PHP开发可以选择php-fpm或者Apache,如果使用Java技术,多使用Tomcat。

1.5 数据库服务器的选择

对于中小型网站来说,多使用免费的MySQL作为数据库,当然也可以根据实际情况使用Oracle、PostgreSQL等。

2 服务器相关技术设计

2.1 Nginx反向代理设计

配置如下所示,在根的位置(/)将所有的请求转发到反向代理abc(upstream abc)上,可根据实际情况调整,比如将静态的HTML 和JPEG 调整到特定的服务器上。要注意根据软件的情况将HTTP报头传到后端,主要配置如下所示:

反向代理可以HTTP请求分配后多个后端服务器上,达到负荷分担的效果。同时,如果某个服务器发生故障,会被剔除出去,实现多机热备份的功能[3]。Nginx有多种负荷均衡方式,默认情况下采用轮询的方式,另外还可以使用ip_hash 和权重等方式。特别要注意的是除了采用ip_hash 方式,其他的方式会导致同一用户的请求分配到不同的服务器上,这时应考虑使用Session共享技术,保证数据的正确性[4]。

2.2 文件同步设计

当有多台web 服务器时,需要保证文件内容的同步。Unison 是一个多平台上的文件同步工具,能够自动完成两台服务器目录文件的同步,它支持SSH、RSH 和Socket 等多种网络协议的同步。Unison 安装后会在用户目录下生成一个名为.unison 的隐藏目录,在其中存放配置文件、日志文件等。

default.prf是其配置文件,关键配置如下:

root=/home/data/www/ #本地目录

root=ssh://user@10.1.1.3//home/data/www/ #远程目录

fastcheck=true #是否快速检查

如果是快速检查,unison 会根据文件生成的时间来确定版本的先后,是否需要同步。否则会对比两个文件的异同,多数情况下使用快速检查即可。

配置好后利用,利用cron 计划任务定期调用unison 即可,要注意非快速检察花费时间非常长,不适合频繁调用。

2.3 数据库主从复制设计

对于一般的中小型网站推荐使用免费的MySQL 数据库,主从复制就是一台MySQL 数据库服务器担任主服务器(Master),多台服务器担任从服务器(Slave),可以向主服务器中读或者写数据,但只能对从服务器执行读操作。从服务器根据主服务器发来的日志信息,和主服务器保持同步[2]。但这种同步是非实时的,比如向主服务器写入一条数据,立刻读从服务器,不会得到更新后的数据,这是开发软件的人员要注意的地方。

因为从服务器是依赖主服务器的日志才能更新数据库,因此要打开日志

log-bin=mysql-bin//二进制日志名

binlog_format=mixed//日志格式为混合

server-id=1 //设置server-id

接着创建一个用于复制的账号,同时分配权限。

GRANT replication slave ON *.* TO 'slave'@'%'IDENTIFIED BY'password';

查看主服务器的日志状态,并记录日志位置,然后在从服务器上将日志调整到与主服务器相同的位置即可。

2.4 读写分离的设计

数据库实现主从复制后,这对软件开发者不是透明的,因为写数据是一个服务器,读数据又是另一个服务器,那么可以使用数据库中间件技术屏蔽这些差别。MyCat 就是其中的佼佼者,它能够实现分库分表,读写分离,故障服务器剔除等。软件开发者将不再需要考虑读写分离的软件实现。MyCat 配置的主文件是server.xml

在其中添加一个读服务器一个写服务器,主要配置如下:

如果要进行分表操作,可以在schema.xml配置。

2.5 session共享设计

使用Nginx 反向代理,可能会出现同一用户的请求分发到不同的服务器上,这样必须保证用户数据的一致性。储存在数据库的数据是多台服务器共享的,不会出现不一致的情况,而用户的session数据是在服务器上存储,不能多机共享,因此反这种情况必须实现session 共享。现在常见的是使用缓存数据库如Redis、Memcache。相对来说Redis功能比较丰富,除了支持Key/Value类型的数据外,还支持list、set、hash等数据类型,另外redis还能把数据持久化到硬盘中。Memcache 的只能将K/V 类型的数据存在内存中,程序异常结束将失去所有数据。

这里我们以Memcache+PHP 为例,实现安装好Memcache,以及PHP 中的 Memcache 模块,在 PHP的配置文件PHP.ini中完成如下配置

session.save_handler=memcache

session.save_path="tcp://10.1.1.12:11211"

3 结语

传统的网站中,为了提高性能使用更多CPU、更大内存、更强的磁盘阵列的小型机,这无疑会使网站初期就要投入大量成本。使用多台普通服务器搭建网站能够实现高可靠性、高性能以及易拓展性,这种方案更加适合于中小型网站的建设。

猜你喜欢
日志服务器情况
一名老党员的工作日志
华人时刊(2021年13期)2021-11-27 09:19:02
扶贫日志
心声歌刊(2020年4期)2020-09-07 06:37:14
通信控制服务器(CCS)维护终端的设计与实现
“主谓一致”的十种情况
游学日志
得形忘意的服务器标准
知识产权(2016年8期)2016-12-01 07:01:13
计算机网络安全服务器入侵与防御
新情况新举措
工会信息(2016年4期)2016-04-16 02:39:21
新情况新举措
工会信息(2016年1期)2016-04-16 02:38:49
特殊情况
小说月刊(2015年6期)2015-04-23 08:48:48