网络共享 - centos7安装samba

安装samba服务 text 1 yum install samba -y 配置samba服务 text 1 2 cp /etc/samba/smb.cnf{,.`date +%F`} #<== 修改前备份 vim /etc/samba/smb.cnf smb配置文件 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #=================== Global Settings[全局选项] ============================== [global] workgroup = WORKGROUP #<==设定Samba Server所要加入的工作组或域 server string = Samba Server Version %v #<==设定注释,宏%v表示显示Samba的版本号 netbios name = zhi #<==设置Samba Server的NetBIOS名称 map to guest = bad user #<==开启匿名访问 # ----------------- Logging Options [日志选项]----------------------------- #设置日志文件存储位置及名称,宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件 log file = /var/log/samba/log....

长期总结 - Linux日志查询命令

工具命令集合 长期总结 - Linux日志查询命令 长期总结 - Linux网络命令合集 长期总结 - Linux性能分析命令 awk常用案例 bash shell常用示例 探索kubectl - 巧用jsonpath提取有用数据 探索kubectl - kubectl诊断命令集合 理解ldap - OpenLDAP客户端命令行使用 sed 语法 bash 1 sed '/过滤的内容/处理的命令' 文件 参数 注释说明 n 取消sed默认的输出 i 替换文件内容 r 如果有特殊字符不用转义(正则) g 全局替换 d 删除 p print打印 # 为分隔符可以用其他符号替换(最好用$ @ /)替换内容中如果有分隔符,需要将分隔符替换为别的分隔符,如果不换可将内容转义 s 为search g为globla全局替换,不加的话只替换一列 打印 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ sed -n '2p' 3....

SSH服务详解

什么是 SSH ? SSH全称(SecureSHell)是一种网络协议,顾名思义就是非常安全的shell,主要用于计算机间加密传输。早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。 SSH服务是由OpenSSH服务端软件OpenSSH和客户端(常见的由SSH,SecureCRT,Xshell,putty)组成,默认使用22端口提供服务,有两个不兼容的ssh协议版本,分别为1.x和2.x。 SSH协议目前有SSH1和SSH2两个主流版本,SSH2协议兼容SSH1,强烈建议使用SSH2版本。目前实现SSH1和SSH2协议的主要软件有OpenSSH 和SSH Communications Security Corporation 公司的SSH Communications 软件。前者是OpenBSD组织开发的一款免费的SSH软件,后者是商业软件,因此在linux、FreeBSD、OpenBSD 、NetBSD等免费类UNIX系统种,通常都使用OpenSSH作为SSH协议的实现软件。 sh 1 2 3 $ rpm -qa openssh openssl openssl-1.0.1e-30.el6.x86_64 openssh-5.3p1-104.el6.x86_64 SSH1.x 每台ssh服务器主机都可以使用rsa加密方式来产生一个1024bit的RSAKey,这个RSA的加密方式就是用来产生公钥与私钥的算法之一,SSH1.x的整个联机加密步骤如下: 当SSH服务启动时,会产生一个768-bit的临时公钥(sshd_config配置文件中ServerKeyBits 768)存放在server中 sh 1 2 3 # centos5为768 centos6为1024 $ grep ServerKey /etc/ssh/sshd_config #ServerKeyBits 1024 当客户端联机请求传送过来时,服务器就会将这个768-bit的公钥传给客户端,此时客户端会将此公钥与先前存储的公钥进行对比,看是否一致。判断标准是服务器端联机用户目录下~/.ssh/know_hosts文件的内容(linux客户端) sh 1 2 3 $ ssh -p22 lamp@192.168.65.62 $ ll .ssh/known_hosts -rw-r--r--. 1 root root 395 Jun 16 13:15 .ssh/known_hosts windows SecureCRT图示 在客户端接收到这个768-bit的Server Key后,客户端本地也会产生一个256bit的私钥(private key或host key),并且以加密的方式(具体的加密算法由客户端在服务器提供的所有可用算法中选择,默认为3DES算法),将Server key与host...

使用SSH协议来传输文件

SSH客户端附带的远程拷贝scp命令 scp是加密 的远程拷贝,可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回到本地执行命令的服务器,但是,每次都是全量拷贝(rsync增量拷贝),因此效率不高。 scp的基本语法使用 secure copy (remote file copy ) 参数选项 注释说明 -p 拷贝前后保持文件或目录属性 -P (大写) 接端口,默认22端口时可省略 -r 拷贝目录 -l 限制速度 推:scp -Pport 源 目标(user@host_ip):/path sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ touch {a..f}.txt $ ls a.txt b.txt c.txt d.txt e.txt f.txt $ scp -P22 a.txt root@192.168.65.62:/ root@192.168.65.62's password: a.txt 100% 0 0.0KB/s 00:00 $ ls / app a.txt 拉:scp -Pport 源(user@host_ip):/path 目标...

expect使用案例

什么是Expect Expent是基于tcl的相对简单的一个免费的脚本编程工具语言,用来实现自动和交互任务程序进行通信,无需人的手工干预。比如SSH、FTP等,这些程序正常情况都需要手工与它们进行交互,而使用Expect就可以模拟人手工交互的过程,实现自动的和远程的程序交互,从而达到自动化运维的目的。 Expect程序工作流程 Expect的工作流程可以理解为,spawn启动进程 ==> expect期待关键字 ==> send向进程发送字符 ==> 退出结束。 安装Expect软件 首先,配置好yum安装源,并且确保机器可以上网,然后执行yum install expect -y即可安装Expect软件。 安装完后查看结果: sh 1 2 $ rpm -qa|grep expect expect-5.44.1.15-5.el6_4.x86_64 先看一个Expect小实例 首先准备3台虚拟机: sh 1 2 3 4 192.168.252.60 client 192.168.252.62 client 192.168.252.63 client 192.168.252.64 server 再执行下面例子前,我们先手工执行如下命令 sh 1 ssh -p52113 root@192.168.252.64 ifconfig 执行结果: sh 1 2 $ ssh -p52113 root@192.168.252.64 ifconfig root@192.168.252.64's password: Expect 例子脚本内容: sh 1 2 3 4 5 6 7 #!/usr/bin/expect spawn ssh -p52113 root@192....

编译安装PHP

下载PHP 台湾镜像站:http://ftp.ntu.edu.tw/php/distributions/ 搜狐镜像站:http://mirrors.sohu.com/php/ 阿里镜像:http://mirrors.aliyun.com/ 官网:http://php.net/downloads.php 检查PHP所需的lib库 bash 1 2 3 4 5 6 7 8 9 10 11 rpm -qa \ zlib-devel \ libxml2-devel \ libjpeg-devel \ libjpeg-turbo-devel \ libiconv-devel \ freetype-devel \ libpng-devel \ gd-devel \ libcurl-devel \ libxslt-devel 提示:libjpeg-turbo-devel是早期libjpeg-devel的新名字,libcurl-devel是早期curl的新名字。 每个lib一般都会存在对应的以“-devel”命名的包,安装lib对应的-devel包后,对应的lib包就会自动安装好,例如安装gd-devel时就会安装gd。 这些lib库不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行时会出现问题,例如验证码无法显示等。 执行下面命令安装相关的lib软件包: bash 1 2 3 4 5 6 7 8 9 10 11 12 13 yum install -y \ zlib-devel \ libxml2-devel \ libjpeg-devel \ libjpeg-turbo-devel \ freetype-devel \ libpng-devel \ gd-devel \ curl-devel \ libxslt-devel \ bzip2-devel \ gmp-devel \ readline-devel 提示:从安装上看,仅有libiconv-devel这个包没有安装,因为默认的yum源没有此包。可以一个一个地yum安装或通过源文件手工编译安装(这样效率慢)...

配置PHP插件

PHP缓存加速器介绍 操作码介绍及缓存原理 当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code,简称opcode)文件,该文件是执行PHP代码后的一种二进制表示形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃。而操作码缓存(Opcode Cache)的原理就是将编译后的操作码保存下来,并放到共享内存里,以便在下一次调用该PHP页面时重用它,避免了相同代码的重复编译,节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存开销。 PHP缓存加速软件介绍 为了提高PHP引擎的高并发访问及执行速度,产生了一系列PHP缓存加速软件。这些软件设计的目的就是缓存前文提到的PHP引擎解析过的操作码文件,以便在指定时间内有相同的PHP程序请求访问时,不再需要重复解析编译,而是直接调用缓存中的PHP操作码文件,这样就提高了动态Web服务的处理速度,从而提升了用户访问企业网站的整体体验。 LAMP环境PHP缓存加速器的原理 下面简单介绍Apache环境的PHP缓存加速器原理。 在LAMP环境中,Apache服务是使用libphp5.so响应处理PHP程序请求的,整个流程大概如下: Apache接收客户的PHP程序请求,并根据规则过滤之。 Apache将PHP程序请求传递给PHP处理模块libphp5.so。 PHP引擎定位磁盘上的PHP文件,并将其加载到内存中解析。 PHP处理模块libphp5.so将PHP源代码编译成为opcode。 PHP处理模块libphp5.so执行opcode,然后把opcode缓存起来。 Apache接收客户端新的PHP程序请求,PHP引擎直接读取缓存执行opcode文件,并将结果返回。在这一次任务中,就无第4步的编译解 析了,从而提升了PHP编译解析效率。 PHP缓存加速器解决的是上述第5步的问题,默认情况下PHP会将opcode内容执行后丢弃,这里却通过PHP缓存加速软件,将opcode内容缓存了下来,目的是当有重复请求时,不需要再重复编译解析PHP程序代码,因为在高并发高访问量的网站上,大量的重复编译会消耗很多的系统资源和时间,而这也就会成为瓶颈,既影响了处理速度,又加重了服务器的负载,为了解决此问题,PHP缓存加速器就这样诞生了。 图4-1是LAMP环境下PHP请求及操作码缓存过程的原理示意图 LNMP环境PHP缓存加速器的原理详解 在LNMP环境中,PHP引擎不再使用libphp5.so模块了,而是启动了独立的FCGI即php-fpm进程,由它监听来自Nginx的PHP程序请求,并交给PHP引擎解析处理,整个执行流程大概如下: PHP缓存加速器软件种类及选择建议 PHP缓存加速器软件常见的种类有XCache、eAccelerator、APC(Alternative PHP Cache),ZendOpcache等,那么,在企业环境我们要如何选择PHP缓存加速器软件呢? 事实上,任选其一即可,没必要都安装上,都安装也可能会发生冲突。总的建议就是根据企业的业务需求及选择前的压力测试结果,或者根据个人的经验偏好选择。不过,老男孩建议首选XCache,其次是eAccelerator,如果想尝新,可以选择ZendOpcache。 首选XCache的原因如下: 经过测试,XCache效率更高、速度更快。 XCache软件开发社区更活跃,最新版2014年底发布。 支持更高版本的PHP,例如PHP 5.5、PHP 5.6。 次选eAccelerator的原因如下: 安装及配置参数更简单,加速效果也不错。 文档资料较多,但官方对软件的更新很慢,社区不活跃。 仅适合PHP版本5.4以下的程序。 选择ZendOpcache的原因如下: 是PHP官方研发的新一代缓存加速软件,以后的发展潜力可能会很好,PHP 5.5以前的版本可以通过ZendOpcache软件以插件扩展的方式安装,从PHP 5.5版本开始已经整合到PHP软件里了,编译时只需指定一个参数即可,例如:–enable-opcache。 ZendOpcache可能是未来的缓存加速首选,现在的稳定性还有待检验,小规模环境下PHP 5以前的版本可以通过插件式安装使用,PHP 5以上的版本可以直接指定参数编译使用。若可以忍受ZendOpcache的各种未知问题的话,也可以尝试使用。 安装PHP缓存加速器扩展 安装PHP eAccelerator缓存加速模块 eAccelerator缓存加速插件说明 eAccelerator是一个免费的、开放源代码的PHP加速、优化及缓存的扩展插件软件,它可以缓存PHP程序编译后的中间代码文件(opcode)、session数据等,降低PHP程序在编译解析时对服务器的性能开销。eAccelerator还可以加快PHP程序的执行速度,降低服务器负载压力,使PHP程序代码执行效率提高1~10倍。 eAccelerator会把编译好的PHP程序存放在共享内存里,然后每次从内存里调用执行,可以设定把一些不适合放在内存里缓存的编译结果存储到磁盘上,默认情况下,磁盘和内存缓存都会被eAccelerator使用。 eAccelerator的最新版为0.9.6.1,支持的PHP最新版本为PHP 5.3及以前5系列的版本。 早期的0.9.5版本支持PHP 4和PHP 5.2以前的版本。 eAccelerator下载地址为:https://github.com/eaccelerator/eaccelerator/downloads。 eAccelerator插件安装过程 具体的安装命令集如下: bash 1 2 /app/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/app/php/bin/php-config 安装PHP XCache缓存加速模块 XCache缓存加速插件说明 XCache是一个开源的、又快又稳定的PHP opcode缓存器/优化器,其项目leader曾经是Lighttpd(和Nginx类似的高速Web服务软件)的开发成员之一。XCache把PHP程序编译后的数据(opcode)缓存到共享内存里,避免相同的程序重复编译。用户请求相同的PHP程序时,可以直接使用缓存中已编译好的数据,从而提高PHP的访问速度,通常可以提升2~5倍,并大幅降低服务器负载开销。 很多公司使用XCache,它已经能在大流量/高负载的生产环境中稳定运行,与同类型的opcode缓存器相比在各个方面都更胜一筹,例如:社区活跃、快速开发、能够快速跟进PHP的版本更新等。 当前稳定版本为3....

配置apache httpd支持php

默认生成 bash 1 2 3 4 5 6 7 $ grep libphp5 /app/apache/conf/httpd.conf LoadModule php5_module modules/libphp5.so $ ll /app/apache/modules/ 总用量 29620 -rw-r--r--. 1 root root 9115 4月 8 03:02 httpd.exp -rwxr-xr-x. 1 root root 30316906 4月 21 01:46 libphp5.so 修改httpd配置文件311行 text 1 2 AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps 更改daemon,更改用户是为了安全考虑 常用的httpd支持php的编译参数 text 1 2 3 4 ./configure --enable-xcache=shared --with-php-config=/app/php/bin/php-config ./configure --enable-eaccelerator=shared --with-php-config=/app/php/bin/php-config ./configure --with-php-config=/app/php/bin/php-config --with-pdo-mysql=/app/mysql ./configure --with-php-config=/app/php/bin/php-config --with-imagick=/app/imagemag/ sysconfdir 指定php配置文件路径

Linux日志管理 - syslog

rsyslog介绍 syslog守护进程,内部有两个进程,syslogd主要负责用户空间的用户进程记录日志;klog负责内核所发生的各种时间记录日志。两者合并后形成syslog。 rsyslog是syslog下一代升级产品,依然有syslogd klogd提供服务。 rsyslog可以开通远程机制监听在某个套接字上,其他任何主机所产生的日志信息由本机的rsyslog收集起来,收集完后不负责记录,而是建立一个tcp或udp连接发送给专门的日志服务器,由专门的日志服务器负责记录。默认情况下是明文的。 rsyslog特性 多线程。 支持UDP,TCP协议,基于ssl tls加密完成远程日志传输。支持RELP协议 实现将日志存储到MySQL PGSQL等关系型数据库中。 强大的过滤器,可实现过滤日志信息中任何部分,支持自定义输出格式。 日志格式 事件产生的事件 主机 进程pid 事件 bash 1 2 3 Jun 6 23:36:58 Lamp-02 NET[1838]: /etc/sysconfig/network-scripts/ifup-post: updated /etc/resolv.conf Jun 6 23:46:15 Lamp-02 yum[1963]: Updated: mysql-libs-5.1.73-8.el6_8.x86_64 Jun 6 23:46:16 Lamp-02 yum[1963]: Installed: mysql-5.1.73-8.el6_8.x86_64 有些日志记录二进制日志 /var/log/wtmp /var/log/btmp last:/var/log/wtmp 当前系统中成功登陆的日志 lastb:/var/log/btmp 当前系统中失败的登陆尝试 lastlog:显示当前系统每一个用户最近一次登陆时间 日志等级 日志级别:事件的关键性程度 lev |说明 lev 说明 none 不记录 debug 调试信息 info 正常信息,仅是一些基本信息说明 notice 比info还需要注意的一些信息内容 warning,warn 警告信息,可能有些问题,但是还不至于影响到某个服务运作的信息 err,error 一些重大的错误信息 crit 临界状态,比error还要严重的错误信息,橙色警报 alert 红色警报,已经很有问题的等级,比crit还要严重 emerg,panic 疼痛等级,意指系统已经要宕机的状态!很严重的错误信息 设施类型 facility:把某一类具有相同特性的由各个应用程序所产生的日志数据流归类到用一个数据收集管道中,这个收集管道称之为facility。...

Linux服务管理 - systemd

关于Linux服务管理 Linux系统从启动到提供服务的过程是这样,先是机器加电,然后通过MBR或者UEFI加载GRUB,再启动内核,内核启动服务,然后开始对外服务。 SysV init UpStart systemd主要是解决服务引导管理的问题。 CentOS 5:SysV init CentOS 6:Upstart CentOS 7:Systemd http://www.linuxidc.com/Linux/2015-04/115937.htm 1.1 SysV init的优缺点 SysV init是最早的解决方案,依靠划分不同的运行级别,启动不同的服务集,服务依靠脚本控制,并且是顺序执行的。 SysV init方案的优点: 1.原理简单,易于理解; 2.依靠shell脚本控制,编写服务脚本门槛比较低。 缺点是: 1.服务顺序启动,启动过程比较慢。 2.不能做到根据需要来启动服务,比如通常希望插入U盘的时候,再启动USB控制的服务,这样可以更好的节省系统资源。 1.2 UpStart的改进 为了解决系统服务的即插即用,UpStart应运而生,在CentOS6系统中,SysV init和UpStart是并存的,UpStart主要解决了服务的即插即用。服务顺序启动慢的问题,UpStart的解决办法是把相关的服务分组,组内的服务是顺序启动,组之间是并行启动。 1.3 systemd的诞生 SysV init服务启动慢,在以前并不是一个问题,尤其是Linux系统以前主要是在服务器系统上,常年也难得重启一次。有的服务器光硬件检测都需要5分钟以上,相对来说系统启动已经很快了。 但是随着移动互联网的到来,SysV init服务启动慢的问题显得越来越突出,许多移动设备都是基于Linux内核,比如安卓。移动设备启动比较频繁,每次启动都要等待服务顺序启动,显然难以接受,systemd就是为了解决这个问题诞生的。 systemd的设计思路是: 尽可能的快速启动服务。 尽可能的减少系统资源占用。 1.4 为什么systemd能做到启动很快 systemd使用并行的方法启动服务,不像SysV init是顺序执行的,所以大大节省了系统启动时间。 使用并行启动,最大的难点是要解决服务之间的依赖性,systemd的解决办法是使用类似缓冲池的办法。比如对TCP有依赖的服务,在启动的时候会检查依赖服务的TCP端口,systemd会把对TCP端口的请求先缓存起来,当依赖的服务器启动之后,在将请求传递给服务,使两个服务通讯。同样的进程间通讯的D-BUS也是这样的原理,目录挂载则是先让服务以为目录被挂载了,到真正访问目录的时候,才去真正操作。 systemd的特性 systemd解决了那些问题? 按需启动服务,减少系统资源消耗; 尽可能并行启动进程,减少系统启动等待时间; 提供一个一致的配置环境,不光是服务配置; 提供服务状态快照,可以恢复特定点的服务状态。 CentOS 7的systemd特性 3.1 套接字服务保持激活功能 在系统启动的时候,systemd为所有支持套接字激活功能的服务创建监听端口,当服务启动后,就将套接字传给这些服务。这种方式不仅可以允许服务在启动的时候平行启动,也可以保证在服务重启期间,试图连接服务的请求,不会丢失。对服务端口的请求被保留,并且存放到队列中。 3.2 进程间通讯保持激活功能 当有客户端应用第一次通过D-Bus方式请求进程间通讯时,systemd会立即启动对应的服务。systemd依据D-Bus的配置文件使用进程间通讯保持激活功能。 3.3 设备保持激活功能 当特定的硬件插入时,systemd启动对应的硬件服务支持。systemd依据硬件服务单元配置文件保持硬件随时被激活。 3.4 文件路径保持激活功能 当特定的文件或者路径状态发生改变的时候,systemd会激活对应的服务。systemd依据路径服务单元配置文件保证服务被激活。 3.5 系统状态快照 systemd可以临时保存当前所有的单元配置文件,或者从前一个快照中恢复单元配置文件。为了保存当前系统服务状态,systemd可以动态的生成单元文件快照。 3.6 挂载和自动挂载点管理 systemd监控和管理挂载和自动挂载点,并根据挂载点的单元配置文件进行挂载。...

网络文件系统 - NFS

NFS介绍 什么是NFS NFS是 Network File System 网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如Web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。 一般情况下,Windows网络共享服务或samba服务用于办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享,如果是大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS。 NFS的历史介绍 第一个网络文件系统被称为File Access Listener,由Digital Equipment Corporation(DEC)在1976年开发。 NFS是第一个构建于IP协议之上的现代网络文件系统。在20世纪80年代,它首先作为实验的文件系统,由Sun Microsystems在内部完成开发。NFS协议归属于Request for Comments(RFC)标准,并且随后演化为NFSv2。作为一个标准,由于NFS与其他客户端和服务器的互操作能力很好而发展快速。 之后,标准继续演化,成为NFSv3,在RFC1813中有定义。这一新的协议比以前的版本具有更好的可扩展性,支持大文件(超过2GB),异步写入,并且将TCP作为传输协议,为文件系统在更广泛的网络中使用铺平了道路。在2000年,RFC 3010(由RFC 3530修订)将NFS带入企业级应用。此时,Sun引入了具有较高安全性、带有状态协议的NFSv4(NFS之前的版本都是无状态的)。今天,NFS版本的4.1(由RFC 5661定义)增加了对跨越分布式服务器并行访问的支持(称为PNFS extension)。 NFS系统已经历了近30年的发展。它代表了一个非常稳定的(及可移植)网络文件系统,具备可扩展、高性能等特性,并达到了企业级应用质量标准。由于网络速度的增加和延迟的降低,NFS系统一直是通过网络提供文件系统服务的有竞争力的选择,特别是在中小型互联网企业中,应用十分广泛。 NFS在企业中的应用场景 在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,例如:BBS产品的图片、附件、头像(注意网站BBS程序不要放在NFS共享里),然后前端所有的节点访问这些静态资源时都可读取NFS存储上的资源。NFS是当前互联网系统架构中最常用的数据存储服务之一,前面说过,中小型网站公司应用频率更高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统,比如Moosefs(mfs)、GlusterFS、FastDFS等。 企业生产集群为什么需要共享存储角色 例如:A用户传图片到Web1服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了Web2,因为Web2上没有这张图片,这就导致它无法看到A用户上传的图片,如果此时有一个共享存储,A用户上传图片的请求无论是分发到Web1还是Web2上,最终都会存储到共享存储上,而在B用户访问图片时,无论请求分发到Web1还是Web2上,最终也都会去共享存储上找,这样就可以访问到需要的资源了。这个共享存储的位置可以通过开源软件和商业硬件实现,互联网中小型集群架构会用普通PC服务器配置NFS网络文件系统实现。 当集群中没有NFS共享存储时,用户访问图片的情况如图所示。 如果集群中有NFS共享存储,用户访问图片的情况如图所示。 中小型互联网企业一般不会买硬件存储,因为太贵,大公司如果业务发展很快的话,可能会临时买硬件存储顶一下网站的压力,当网站并发继续加大时,硬件存储的扩展相对就会很费劲,且价格成几何级数增加。例如:淘宝网就曾替换掉了很多硬件设备,比如,用LVS+Haproxy替换了netscaler负载均衡设备,用FastDFS、TFS配合PC服务器替换了netapp、emc等商业存储设备,去IOE正在成为互联网公司的主流。 NFS系统原理介绍 NFS系统挂载结构图解与介绍 在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),不同客户端的挂载点可以不相同。 客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的/v/video或/video目录查看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载/v/video或/video的目录,就可以将数据轻松地存取到NFS服务器端上的/video目录中了。 什么是RPC 因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,其中CentOS 5.x的随机端口都小于1024,而CentOS 6.x的随机端口都是较大的。 因为端口不固定,这样一来就会造成NFS客户端与NFS服务器端的通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。 要解决上面的困扰,就需要通过远程过程调用RPC(Remote Proce-dure Call)服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务器端和NFS客户端之间的一个中介,流程如图10-7所示。 拿房屋中介打个比喻吧:假设我们要找房子,这里的我们就相当于NFS客户端,中介介绍房子,就相当于RPC服务,房子所有者房东就相当于NFS服务,租房的人找房子,就要找中介,中介要预先存有房子主人的信息,才能将房源信息告诉租房的人。 那么RPC服务如何知道每个NFS的端口呢? 当NFS服务器端启动服务时会随机取用若干端口,并主动向RPC服务注册取用的相关端口及功能信息,如此一来,RPC服务就知道NFS每个端口对应的NFS功能了,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端,这样一来,NFS客户端就可以与NFS服务器端进行数据传输了。 在启动NFS Server之前,首先要启动RPC服务(CentOS 5.8下为portmap服务,CentOS 6.6下为rpcbind服务,下同),否则NFS Server就无法向RPC服务注册了。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。要特别注意的是,一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs-rv即可使修改的/etc/exports生效。 NFS的工作流程原理 当访问程序通过NFS客户端向NFS服务器端存取文件时,其请求数据流程大致如下: 1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。 2)NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)。 3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。 4)NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务,NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。 注意: NFS的RPC服务,在CentOS 5.X下名称为portmap,在CentOS 6.X下名称为rpcbind。 安装NFS服务 搭建NFS环境准备 克隆虚拟机 克隆的虚拟机存在的网络问题 原因分析:...