centos前端 centos搭建web服务器

大家好,如果您还对centos前端不太了解,没有关系,今天就由本站为大家分享centos前端的知识,包括centos搭建web服务器的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

CentOS下ext4、vfat文件系统创建、修改

(接上文: CentOS磁盘和分区简介)

1,磁盘分区之后并不能直接使用,需要在分区上创建文件系统并挂载;

2,查看系统能够支持的文件系统类型: cat/etc/filesystems

3,挂载

设备或文件系统,挂载的目标位置,称为挂载点(mount point)

挂载使用mount命令,设备、挂载点两者都需要指明

卸载使用umount命令,设备、挂载点两者只需要指明其一

Note:挂载完成后,挂载点下原有的文件就会被隐藏,无法访问,直到卸载。因此,通常使用空目录作为挂载点。

CentOS的文件系统创建工具 mkfs. fstype

其中,mkfs是Linux下各种文件系统创建工具( mkfs. fstype)的前端入口,这些工具都以 mkfs.开头,后面是该工具管理的文件系统类型(fstype)。

实际上,ext系列文件系统真正常用的工具是 mke2fs,其语法及常用选项如下:

用法举例: mke2fs-t ext4-L'test'-b 4096-i 4096-m 8/dev/sdb1

因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统,检测和修复建议离线(卸载磁盘或分区)进行;

举例: e2fsck-y/dev/sdb1

举例: fsck-t ext4-a/dev/sdb1#自动修复/dev/sdb1

3.1显示ext系列文件系统的属性信息: dumpe2fs

dumpe2fs [-options] device

-h:只显示设备上的超级块信息,否则还会显示块组信息

3.2显示或修改ext系列文件系统的Label信息: e2label

查看Label:e2label device

设定Label:e2label device LABEL

举例:

3.3查看(也能修改)ext系列文件系统数据信息: tune2fs

举例: tune2fs-l/dev/sdb1

注意:块大小创建后不可修改;

tune2fs命令及其常用选项:

如果我们希望一个存储设备(比如优盘)不需要重新创建文件系统,就能同时在Windows或Linux系统下使用,那么这时在优盘上创建vfat类型的文件系统就能满足需求。

fat和vfat:

fat和vfat基本一致,区别在于vfat支持长文件名,而fat不支持。

此外,Linux将fat/vfat/fat32文件系统都统一用vfat表示,

vfat文件系统是CentOS原生支持的,但是fat文件系统的管理工具mkfs.vfat,mkfs.fat却未必开始就安装,比如我最小安装的CentOS 7就没有。

因此,首先要解决两个问题,

1.1,安装哪个包可以提供需要的管理工具?

通过yum可知,当前版本提供mkfs.vfat工具的是dosfstools-3.0.20-10.el7.x86_64这个包。

1.2,安装dosfstools-3.0.20-10.el7.x86_64包

yum install dosfstools-y

mkfs.vfat命令的用法

mkfs.vfat [-options] device

其中一个比较重要的选项是-F FAT-size,在命令的man手册中是这样介绍的:

Specifies the type of file allocation tables used(12, 16 or 32 bit). If nothing is specified, mkfs.fat will automatically select between 12, 16 and 32 bit, whatever fits better for the filesystem size.

简单渣翻:该选项用于指定文件分配表的类型(12,16或32 bit,即fat12,fat16或fat32)。如果没有指定,mkfs.fat将根据文件系统的大小,在12、16或32 bit中自动选择更合适的。

也就是说,如果这里指定-F选项如-F 32,创建的文件系统就是fat32,如果不指定, mkfs.vfat工具将自动选择文件类型,创建的不一定是fat32的文件系统。所以为了保险起见还是指定该选项比较好。

求助关于centos6.6搭建nginx反向代理服务器

〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);

〉另外一个功能就是作为反向代理服务器实现负载均衡

以下我们就来举例说明如何使用 nginx实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

1)环境:

a.我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。

在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。

这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-));

b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;

nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。

也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

c.如下介绍两种方法实现server cluster的负载均衡。

我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;

后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print“server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print“server2“;)。

2)针对不同请求的负载均衡:

a.在最简单地构建反向代理的时候(nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:

复制代码代码如下:

location~\.php${

proxy_pass 158.37.70.143:80;

}

〉这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;

〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location~\.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的 ),nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。

如上是最为简单的使用nginx做为反向代理服务器的例子;

b.我们现在对如上例子进行扩展,使其支持如上的两台服务器。

我们设置nginx.conf的server模块部分,将对应部分修改为:

复制代码代码如下:

location ^~/phpMyAdmin/{

proxy_pass 127.0.0.1:80;

}

location~\.php${

proxy_pass 158.37.70.143:80;

}

上面第一个部分location ^~/phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;

如果客户端访问URL是的话,则会被pass到158.37.70.143:80的apache进行处理。

因此综上,我们实现了针对不同请求的负载均衡。

〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;

〉如果用户访问test.php页面的话,158.37.70.143:80的Apache进行响应;

〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80的Apache进行响应;

3)访问同一页面的负载均衡:

即用户访问这个同一页面的时候,我们实现两台服务器的负载均衡(实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。

a.现在我们的情况是在windows下nginx是localhost侦听8080端口;

两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。

b.因此重新配置nginx.conf为:

〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:

复制代码代码如下:

upstream myCluster{

server 127.0.0.1:80;

server 158.37.70.143:80;

}

表示这个server cluster包含2台服务器

〉然后在server模块中定义,负载均衡:

复制代码代码如下:

location~\.php${

proxy_pass 这里的名字和上面的cluster的名字相同

proxy_redirect off;

proxy_set_header Host$host;

proxy_set_header X-Real-IP$remote_addr;

proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

}

这样的话,如果访问页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。

上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:

复制代码代码如下:

upstream myCluster{

server 127.0.0.1:80 weight=5;

server 158.37.70.143:80;

}

这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。

综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。

nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。

通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。

两种均衡:

1)可以在nginx中定义访问不同的内容,代理到不同的后台server;如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;

2)可以在nginx中定义访问同一页面,均衡(当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。如上的例子访问test.php页面,会均衡地代理到server1或者server2上。

实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。

如何让CentOS服务器磁盘io性能翻倍

如何让CentOS服务器磁盘io性能翻倍

这一期我们来看一下有哪些办法可以减少linux下的文件碎片。主要是针对磁盘长期满负荷运转的使用场景(例如http代理服务器);另外有一个小技巧,针对互联网图片服务器,可以将io性能提升数倍。如果为服务器订制一个专用文件系统,可以完全解决文件碎片的问题,将磁盘io的性能发挥至极限。对于我们的代理服务器,相当于把io性能提升到3-5倍。

在现有文件系统下进行优化linux内核和各个文件系统采用了几个优化方案来提升磁盘访问速度。但这些优化方案需要在我们的服务器设计中进行配合才能得到充分发挥。

文件系统缓存linux内核会将大部分空闲内存交给虚拟文件系统,来作为文件缓存,叫做page cache。在内存不足时,这部分内存会采用lru算法进行淘汰。通过free命令查看内存,显示为cached的部分就是文件缓存了。

如果能找到当前使用场景下,文件被访问的统计特征,针对性的写一个淘汰算法,可以大幅提升文件缓存的命中率。对于http正向代理来说,一个好的淘汰算法可以用1GB内存达到lru算法100GB内存的缓存效果。如果不打算写一个新的淘汰算法,一般不需要在应用层再搭一个文件cache程序来做缓存。

最小分配

最小分配的副作用是会浪费一些磁盘空间(分配了但是又没有使用)

如果当前使用场景下小文件很多,把预分配改大就会浪费很多磁盘空间,所以这个数值要根据当前使用场景来设定。似乎要直接改源代码才能生效,不太记得了,09年的时候改的,有兴趣的同学自己google吧。

io访问调度

如何针对性优化:io访问调度能大幅提升io性能,前提是应用层同时发起了足够的io访问供linux去调度。怎样才能从应用层同时向内核发起多个io访问呢?方案一是用aio_read异步发起多个文件读写请求。

小提示:将文件句柄设置为非阻塞时,进程还是会睡眠等待磁盘io,非阻塞对于文件读写是不生效的。在正常情况下,读文件只会引入十几毫秒睡眠,所以不太明显;而在磁盘io极大时,读文件会引起十秒以上的进程睡眠。详见内核源代码do_generic_file_read会调用lock_page_killable进入睡眠,但是不会判断句柄的非阻塞标志。

预读取linux内核可以预测我们“将来的读请求”并提前将数据读取出来。通过预读取可以减少读io的次数,并且减小读请求的延时。

当文件扩大,需要分配磁盘空间时,可以不立即进行分配,而是暂存在内存中,将多次分配磁盘空间的请求聚合在一起后,再进行一次性分配。

延迟分配的副作用有几个:1如果应用程序每次写数据后都通过fsync等接口进行强制刷新,延迟分配将不起作用2延迟分配有可能间歇性引入一个较大的磁盘IO延时(因为要一次性向磁盘写入较多数据)

如何针对性优化:

“让每个目录下的文件连续存储”是一个极有价值的功能。假设一个网页上有10张图片,这10张图片虽然存在10个文件中,但其实是几乎同时被用户访问的。如果能让这10张图片存储在连续的磁盘空间中,就能把io性能提升10倍(一次寻道就可以读10个文件了)传统的做法是通过拼接图片来将这10张图片合并到一张大图中,再由前端将大图切成10张小图。有了e4defrag后,可以将需连续访问的文件放在同一个文件夹下,再定期使用e4defrag进行磁盘整理。

实现自己的文件系统我们曾经写过一款专用文件系统,针对代理服务器,将磁盘io性能提升到3-5倍。在大部分服务器上,不需要支持“修改文件”这个功能。一旦文件创建好,就不能再做修改操作,只支持读取和删除。在这个前提下,我们可以消灭所有文件碎片,把磁盘io效率提升到理论极限。

大于16MB的文件,服务器创建文件时告诉文件系统分配16MB磁盘空间。后续每次扩大文件大小时,要么是16MB,要么就是文件终结。不允许在文件未终结的情况下分配非16MB的空间。读写文件时,每次读写16MB或者直到文件末尾。

在我们的文件系统中,小文件完全无碎片,一次寻道就能搞定一个文件,达到了理论上最佳的性能。大文件每次磁头定位读写16MB,性能没有达到100%,但已经相当好了。有一个公式可以衡量磁盘io的效率:磁盘利用率=传输时间/(平均寻道时间+传输时间)对我们当时采用的磁盘来说(1T 7200转sata),16MB连续读写已经可以达到98%以上的磁盘利用率。

阅读剩余
THE END