linux面试题

1.1 考试题
网络基础部分回顾/期中架构回顾
1.1.1 手写题目
1.1.1.1 OSI七层网络模型?以及每层的作用、包含的协议?
第七层应用层:主要是一些终端的应用,比如说FTP,WEB(IE浏览),QQ之类的
协议:DHCP • DNS • FTP • Gopher • HTTP • IMAP4 • IRC • NNTP • XMPP • POP3 • SIP • SMTP • SNMP • SSH • TELNET • RPC • RTCP • RTSP • TLS • SDP • SOAP • GTP • STUN • NTP

第六层表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西 不用协议

第五层会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或或者接受会话请求 不用协议

第四层传输层:定义了一些传输数据的协议和端口号, 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段
协议:TCP • UDP • DCCP • SCTP • RTP • RSVP • PPTP •

第三层网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包
协议:IP (IPv4 • IPv6) • ARP • RARP • ICMP • ICMPv6 • IGMP • RIP • OSPF • BGP • IS-IS • IPsec •

第二层数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输 协议: 802.11 • 802.16 • Wi-Fi • WiMAX • ATM • DTM • 令牌环 • 以太网 • FDDI • 帧中继 • GPRS • EVDO • HSPA • HDLC • PPP • L2TP • ISDN •

第一层物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特 协议: RS-443 、RS-232C、RS-485 、理-2593

1.1.1.2 如何关闭防火墙?
/etc/init.d/iptables stop
chkconfig iptables off

1.1.1.3 如何关闭SELinux?永久和临时关闭。
永久关闭vim /etc/selinux/confg 修改SELINUX=enforce 成 SELINUX= disable
sed -i.bak 's/SELINUX=enforce/SELINUX=disable/g' /etc/selinux/config
临时关闭setenforce 0
检查selinux是否关闭
getenforce

1.1.1.4 什么是集群?集群的分类有哪几种?
集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源
集群目的:提高性能,降低成本,提高可扩展性,增强可靠性
集群分类:

  1. 高可用性集群
    高可用性集群的英文全称是High Availability,简称HA cluster。一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。当应用程序出现故障,或者系统硬件,网络出现故障是,应用可以自动,快速地从一个节点切换到另一个节点,从而保证应用持续、不间断地对外提供服务。
      高可用性集群是服务器系统的运行速度和响应速度尽可能快。它们经常利用在多台机器上运行的冗余节点和服务,用来相互跟踪。如果某个节点失败,它的替补将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,集群永远不会停机。
  2. 负载均衡集群
    负载均衡集群也是由两台或者两台以上的服务器组成,分为前端负载调度和后端服务两个部分。负载调度部分负载吧客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供营养程序服务的部分。与HA Cluster不同的是,负载均衡集群中,所有的后端节点都处于活动状态,他们都对外提供服务,分摊系统的工作负载。
      负载均衡集群为企业需求提供了更实用的系统。负载均衡集群可以把一个高负荷的应用分散到多个节点共同完成,适用于业务繁忙、大负荷访问的应用系统。但是它也有不足的地方;当一个节点出现故障时,前端调度系统并不知道此节点已经不能提供服务,仍然会把客户端请求调度到故障节点上来,这样访问就会失败。为了解决这个问题,负载调度系统一般都引入了节点监控系统。
      节点监控系统位于前端负载调度机上,负责监控下面的服务节点。当某个节点出现故障后,节点监控系统会自动将故障节点从集群中剔除;当此节点恢复正常后,节点监控系统又会自动将其加入集群中,而这一切,对用户来说是完全透明的。
  3. 高性能计算集群
    高性能计算集群,简称HPC集群。高性能计算集群采用将计算任务分配到集群的不同节点而提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用linux操作系统和其他一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC Cluster的并行能力。这类程序一般应用特定的运行库,比如专为科学计算设计的MPI库。
      HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其他节点计算结果的情况。
      HPC的应用领域非常广泛,典型应用有科学研究、基因测试对比、数据挖掘应用、石油和天然气勘探、图像呈现等。
      在实际的使用中,集群的这三种类型相互交融,如高可用性集群也可以在其节点之间均衡用户负载。同样,也可以从要编写应用程序的集群中找到一个并行集群,它可以在节点之间执行负载均衡。从这个意义上讲,这种集群类别的划分是一个相对的概念,不是绝对的。

1.1.2 口述
1.1.2.1 TCP 十一种状态集转换?

全部11种状态
2.1、客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。
2.2、服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
2.3、共有的:(1)CLOSED (2)ESTABLISHED 。

1.1.2.2 请说明DNS解析原理?
第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

1.1.3 画图题
1.1.3.1 画出期中架构图以及架构组成部分

1.1.3.2 三次握手四次挥手的文字说明或画图

三次握手的过程
step1:第一次握手
建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。
step2:第二次握手
服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。
step3:第三次握手
客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。
四次挥手过程(关闭客户端到服务器的连接)
step1:第一次挥手
首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。
step2:第二次挥手
服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。
step3:第三次挥手
关闭服务器到客户端的连接,发送一个FIN给客户端。
step4:第四次挥手
客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1.2 项目
暂时没有项目
1.3 考试题
1.3.1 手写题
1.3.1.1 rsync命令可以替换哪四种常用命令?
ls rm cp scp
1.3.1.2 rsync端口号多少? 873
1.3.1.3 rsync数据同步原理?
rsync是一款开源,快速,多功能的可实现增量的本地或远程的数据镜像同步备份的优秀工具。适用于多个平台。从软件名称可以看出来是远程同步的意思(remote sync)。可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步镜像,远程备份等功能。

在同步备份时,默认情况下,rsync通过其独特的“quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要制定参数)。甚至是只同步一个文件里变化的内容部分,所以可以实现快速的同步数据的功能。

提示:传统的cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整拷贝,还具备增量拷贝的功能,因此从此性能及效率上更胜一筹。

1.3.1.4 rsync守护进程工作原理?
守护进程传输模式
采用此种方式进行数据同步复制,是采用客户端与服务端的数据同步方式

1.3.1.5 rsync三种工作方式语法格式?
本地数据传输模式
Local: rsync [OPTION...] SRC... [DEST]
远程shell数据传输模式
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
守护进程传输模式
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

1.3.1.6 rsync守护进程模式服务端部署流程?
1)确认软件是否安装,若未安装进行软件安装
2)进行软件服务配置文件编写
3)创建备份目录管理用户
4)创建备份目录,并进行授权
5)创建认证用户授权密码文件,并对密码文件进行授权
6)启动程序服务

1.3.1.7 rsync软件6种扩展应用是什么?

  1. 守护进程多模块功能配置
  2. 守护进程的排除功能实践 --exclude
  3. 守护进程来创建备份目录
  4. 守护进程的访问控制配置
  5. 守护进程无差异同步配置 --delete
  6. 守护进程的列表功能配置 --list

1.3.1.8 rsync无差异同步与排除功能命令编写?
rsync -av --delete --exclude .svn --exclude "compile" /cygdrive/c/www/test/trunk/ username@IP:/home/test/

1.3.1.9 rsync命令常用参数总结说明?
rsync --delete --exclude -rp -avz
1.3.1.10 rsync软件开机自启动方式,至少写出两种?
1.yum install xinetd -y
sed -i 's#yes#no#g' /etc/xinetd.d/rsync
重启系统
[root@web03 ~]# ss -lntup|grep 873
tcp LISTEN 0 64 :::873 :::* users:(("xinetd",1412,5))

  1. vim /etc/rsyncd.conf
    [root@backup init.d]# cat /etc/rsyncd.conf
    #rsync_config
    #created by HQ at 2017
    ##rsyncd.conf start##

uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
#read only = true
[nfs]
comment = "backup dir by oldboy"
path = /nfs

rsync --daemon

vim /etc/rc.local
rsync --daemon
1.3.1.11 rsync软件服务停止方式,至少写出3种?
1.killall rsync
2.pkill rsync
3.sed -i.bak 's/disalbe = no/disable = yes/g' /etc/xinetd.d/rsync
重启系统
4.kill rsync相应的进程号
1.3.1.12 简单描述rsync服务排错步骤?

  1. rsync服务端开启的iptables防火墙
    【客户端的错误】
    No route to host
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    rsync: failed to connect to 172.16.1.41: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
    【异常问题解决】
    关闭rsync服务端的防火墙服务(iptables)
    [root@backup mnt]# /etc/init.d/iptables stop
    iptables: Setting chains to policy ACCEPT: filter [ OK ]
    iptables: Flushing firewall rules: [ OK ]
    iptables: Unloading modules: [ OK ]
    [root@backup mnt]# /etc/init.d/iptables status
    iptables: Firewall is not running.

  2. rsync客户端执行rsync命令错误
    【客户端的错误】
    The remote path must start with a module name not a /
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
    ERROR: The remote path must start with a module name not a /
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    【异常问题解决】
    rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

  3. rsync服务认证用户失败*****
    【客户端的错误】
    auth failed on module oldboy
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    Password:
    @ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    【异常问题解决】

    1. 密码真的输入错误,用户名真的错误
    2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
    3. /etc/rsync.password文件权限不是600
    4. rsync_backup:123456密码配置文件后面注意不要有空格
    5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
  4. rsync服务位置模块错误
    【客户端的错误】
    Unknown module 'backup'
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    @ERROR: Unknown module 'backup'
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    【异常问题解决】

    1. /etc/rsyncd.conf配置文件模块名称书写错误
  5. rsync服务权限阻止问题
    【客户端的错误】
    Permission denied
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    Password:
    sending incremental file list
    hosts
    rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)
    sent 196 bytes received 27 bytes 63.71 bytes/sec
    total size is 349 speedup is 1.57
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
    【异常问题解决】

    1. 备份目录的属主和属组不正确,不是rsync
    2. 备份目录的权限不正确,不是755
  6. rsync服务备份目录异常
    【客户端的错误】
    chdir failed
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    Password:
    @ERROR: chdir failed
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    【异常问题解决】

    1. 备份存储目录没有建立
    2. 建立的备份存储目录和配置文件定义不一致
      说明:如果没有备份存储目录
  7. rsync服务无效用户信息
    【客户端的错误】
    invalid uid rsync
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    Password:
    @ERROR: invalid uid rsync
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    【异常问题解决】
    rsync服务对应rsync虚拟用户不存在了

  8. 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
    【客户端的错误】
    password file must not be other-accessible
    【错误演示过程】
    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    password file must not be other-accessible
    continuing without password file
    Password:
    sending incremental file list
    sent 26 bytes received 8 bytes 5.23 bytes/sec
    total size is 349 speedup is 10.26
    【异常问题解决】
    rsync客户端的秘钥文件也必须是600权限

  9. rsync客户端连接慢问题
    IP === 域名 反向DNS解析
    【错误日志信息】
    错误日志输出
    2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
    2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
    2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)
    2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
    2017/03/08 20:14:43 [3422] receiving file list
    2017/03/08 20:14:43 [3422] sent 76 bytes received 83 bytes total size 349
    正确日志输出
    2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
    2017/03/08 20:16:45 [3443] connect from nfs02 (172.16.1.31)
    2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
    2017/03/08 20:16:45 [3443] receiving file list
    2017/03/08 20:16:45 [3443] sent 76 bytes received 83 bytes total size 349
    【异常问题解决】
    查看日志进行分析,编写rsync服务端hosts解析文件

10 rsync服务没有正确启动
【错误日志信息】
Connection refused (111)
【错误演示过程】
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
【异常问题解决】
[root@oldboy-muban ~]# rsync --daemon
[root@oldboy-muban ~]# ss -lntup |grep rsync
tcp LISTEN 0 5 :::873 ::: users:(("rsync",1434,5))
tcp LISTEN 0 5
:873 : users:(("rsync",1434,4))
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 196 bytes received 27 bytes 49.56 bytes/sec
total size is 349 speedup is 1.57

1.4 项目
1.4.1 项目要求
搭建一个rsync备份服务器,并从客户端(NFS服务器) 进行数据备份测试,要求如下:
 服务器角色IP列表
主机名 主机内网IP 所需软件 安装服务 操作系统
backup 172.16.1.41 rsync rsync daemon CentOS 6.9-X86_64
nfs01 172.16.1.31 rsync 无 CentOS 6.9-X86_64
 具体要求
1) 所有服务器的备份目录必须都为/backup;
2) 要备份的系统配置文件包括但不限于:
a. 定时任务服务的配置文件 (/var/spool/cron/root)
b. 开机自启动的配置文件 (/etc/rc.local)
c. 日常脚本的目录 (/server/scripts)
d. 防火墙iptables 的配置文件 (/etc/sysconfig/iptables)
e. 自己思考下还有什么需要备份呢?
3) NSF服务器保留打包后的 7 天的备份数据即可(本地留存不能多于7天,因为太多满);
4) 备份服务器上要按照备份数据服务器的内网 IP 为目录保存备份,备份的文件按照字保存;
1.4.2 项目解答

1.5 考试题
1.5.1 手写题
1.5.1.1 NFS服务端工作详细原理?
1) NFS共享存储服务的原理:
①. nfs服务端创建共享存储目录
②. nfs客户端创建远程挂载点目录
③. nfs客户端进行远程挂载
④. 实现客户端数据信息统一一致
1.5.1.2 RPC服务作用说明?
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议
1.5.1.3 NFS服务端默认权限参数信息查看方法?
cat /etc/exports
 1)NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限。
 2)NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限。
 3)每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户
(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)
1.5.1.4 NFS服务端配置文件常用权限参数信息?
① rw : 该目录共享的权限是读写
ro : 该目录共享的权限是只读
但最终能不能读写还是与文件系统的权限和身份有关
② sync : 数据会同步写入到内存和硬盘中
async : 数据会暂存于内存而不写入硬盘
③ no_root_squash : 开放客户端使用root使用来操作文件系统,也就是说让root写入的文件仍然具有root权限
root_squash : 默认客户端的root用户被会压缩为nfsnobody,这样对服务器系统较有保障
④ all_squash : 不论登录NFS服务器的客户端用户身份是什么,默认都会被压缩为匿名用户(nobody或者nfsnobody)
⑤ anonuid : 这个值一般是结合all_squash一起使用的,它是指匿名用户中的UID的设置值,用这个anonuid可以自行设置UID的值,注意:这个UID必须要存在与/etc/passwd中。
anongid : 组的GID。
1.5.1.5 NFS客户端开机自动挂载方法?
[root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig nfs on

1.5.1.6 NFS服务的优缺点?
1.2优点
a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
b.简单容易上手
c.方便部署非常快速,维护十分简单
1.2缺点
a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
b.在高并发下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦
1.5.2 口述题
1.5.3 画图题
1.6 项目
1.6.1 项目要求
如图所示,搭建一台NFS服务器,对外提供服务,在客户端Web01、Web02挂载成功,并可以进行读写操作,要求如下:
  项目架构图

 服务器角色IP列表
角色 主机内网IP 所需软件 安装服务 操作系统
nfs01 172.16.1.31 nfs-utils,rpcbind nfs-utils, rpcbind CentOS 6.9-X86_64
web01 172.16.1.8 nfs-utils,rpcbind nfs-utils, rpcbind CentOS 6.9-X86_64
web02 172.16.1.9 nfs-utils,rpcbind nfs-utils, rpcbind CentOS 6.9-X86_64
 具体要求
NFS服务器端:
1) nfs01上安装、配置、启动成功NFS服务,并且在web01上能够shoumount -e 查看到共享目录;
2) 服务器的共享目录为/data,并授权;
3) 权限要求只能内网网段访问,且可读可写,实时同步到硬盘;
4) 为了方便管理员管理,需要指定NFS虚拟用户为nfsnobody;
5) 所有访问者的身份都压缩为最低身份;
NFS客户端(web01和web02):
1) 将共享目录/data挂在到本地的/var/html/www;
1.6.2 项目解答
1.6.2.1 NFS服务端部署步骤流程:
第一个里程:检查服务软件是否安装
rpm -qa|egrep "nfs-utils|rpcbind"

第二个里程:进行软件服务安装
yum install -y nfs-utils rpcbind

补充说明:nfs-utils 和 rpcbind两个软件大礼包
rpm -ql nfs-utils
/etc/rc.d/init.d/nfs <-- nfs服务启动脚本文件
/usr/sbin/showmount <-- 检查nfs服务共享目录信息

rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind <-- rpcbind服务启动脚本文件
/usr/sbin/rpcbind <-- 检查nfs服务向rpc服务注册信息

第三个里程:编写nfs服务配置文件
[root@nfs01 ~]# ll /etc/exports
-rw-r--r-- 1 root root 30 2018-02-25 13:30 /etc/exports <-- nfs服务配置文件,默认已经存在
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync)
说明:配置文件信息 指定共享目录 指定共享目录访问控制网段或主机信息(共享目录参数信息)

第四个里程:创建nfs服务共享目录,并且进行授权
mkdir /data
chown -R nfsnobody.nfsnobody /data

第五个里程:启动nfs和rpc服务
/etc/init.d/rpcbind start <- 首先启动rpcbind服务
/etc/init.d/nfs start <- 其次启动nfs服务

第六个里程:进行服务配置检查
先检查房源信息是否注册
#rpcbind -p 172.16.1.31
rpcinfo -p 172.16.1.31
检查是否存在可用的共享目录
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24

NFS客户端部署流程:
第一个里程:检查服务软件是否安装
rpm -qa|egrep "nfs-utils|rpcbind"

第二个里程:进行软件服务安装
yum install -y nfs-utils rpcbind

第三个里程:进行共享目录挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
172.16.1.31:/data 8.6G 1.9G 6.4G 23% /mnt

第四个里程:进行共享存储测试
[root@web01 mnt]# touch test.txt
[root@web01 mnt]# ls
test.txt

[root@nfs01 ~]# cd /data/
[root@nfs01 data]# ls
test.txt

1.7 考试题
1.7.1 请简述实时同步服务工作原理?
a 创建要存储数据的目录
b 利用实时同步的软件监控我们进行备份的数据目录
c 利用rsync服务进行数据推送传输备份
1.7.2 简述inotify软件部署过程?并给出一条监控/data目录的命令?
yum install -y inotify-tools
inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\
1.7.3 inotify软件参数说明,以及实时监控事件?
inotify软件应用命令:
inotifywait
-m|--monitor 始终保持事件监听状态
-r 进行递归监控
-q|--quiet 将无用的输出信息,不进行显示
--timefmt <fmt> 设定日期的格式
man strftime 获取更多时间参数信息
--format <fmt> 命令执行过程中,输出的信息格式

-e 指定监控的事件信息
man inotifywait 查看所有参数说明和所有可以监控的事件信息

总结主要用到的事件信息:
create创建、delete删除、moved_to移入、close_write修改
1.7.4 inotify软件服务优化文件说明?
[root@nfs01 ~]# cd /proc/sys/fs/inotify/
[root@nfs01 inotify]# ll
总用量 0
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_queued_events
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_user_instances
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_user_watches
max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384
1.7.5 inotify实时同步脚本编写?
#!/bin/bash
#################### 完全同步
inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\
while read line
do
rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
done
1.7.6 请写出sersync命令的参数?
sersync命令参数:
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍(测试)
参数-n: 指定开启守护线程的数量,默认为10个
参数-o: 指定配置文件,默认使用confxml.xml文件
1.7.7 简单描述sersync实时同步服务部署?
先进行软件下载,把软件包上传到系统中
unzip sersync_installdir_64bit.zip
cd sersync_installdir_64bit
mv sersync /usr/local/
编写sersync配置文件
[root@nfs01 sersync]# cd /usr/local/sersync/conf/
[root@nfs01 conf]# ll
总用量 4
-rw-r--r-- 1 root root 2214 2011-10-26 11:54 confxml.xml

6     <filter start="false">
7         <exclude expression="(.*)\.svn"></exclude>
8         <exclude expression="(.*)\.gz"></exclude>
9         <exclude expression="^info/*"></exclude>

10 <exclude expression="^static/*"></exclude>
11 </filter>
说明:实现同步数据过滤排除功能

12     <inotify>
13         <delete start="true"/>
14         <createFolder start="true"/>
15         <createFile start="false"/>
16         <closeWrite start="true"/>
17         <moveFrom start="true"/>
18         <moveTo start="true"/>
19         <attrib start="false"/>
20         <modify start="false"/>
21     </inotify>
说明:类似于inotify的-e参数功能,指定监控的事件信息

23     <sersync>
24         <localpath watch="/data">
25             <remote ip="172.16.1.41" name="backup"/>
26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28         </localpath>
29         <rsync>
30             <commonParams params="-az"/>
31             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
32             <userDefinedPort start="false" port="874"/><!-- port=874 -->
33             <timeout start="false" time="100"/><!-- timeout=100 -->
34             <ssh start="false"/>
35         </rsync>
 说明:以上内容是数据相关的配置信息,是必须进行修改调整配置

最后运行 ./sersync -dro /usr/local/sersync/conf/confxml.xml

-timefmt<fmt>可用参数
命令参数 参数说明
%d (重要参数)
每月的第几天,显示信息为十进制数(范围是01-31)
%m (重要参数)
显示月份,显示信息为十进制数(范围是01-12)
%M
显示分钟,显示信息为十进制数(范围是00-59)
%y (重要参数)
年份信息,显示信息为十进制数,并且没有世纪信息
%Y
年份信息,显示信息为十进制数,并且包含世纪信息
%H
小时信息,显示信息为十进制数,使用24小时制(范围是00-23)
说明:以上信息可以通过man strftime 信息获取
--format<fmt>可用参数
命令参数
参数说明
%w (重要参数)
事件出现时,监控文件或目录的名称信息
%f (重要参数)
事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空。
%e (重要参数)
显示发生的事件信息,不同的事件信息用逗号进行分隔
%Xe
显示发生的事件信息,不同的事件信息用X进行分隔,可以修改X为指定分隔符
%T (重要参数)

这个格式是通过strftime函数进行匹配时间格式信息的
1.8 项目:企业级实时同步服务实践
1.8.1 项目要求
如果所示,基于之前的backup服务器,现在需要在新建一台NFS服务器,通过sersync服务来实现NFS服务器上/data/目录的数据和backup服务器上的/nfsbackup目录实时同步:
  项目架构图

 服务器角色IP列表
角色 主机内网IP 所需软件 安装服务 操作系统
nfs01 172.16.1.31 sersync sersync CentOS 6.9-X86_64
backup 172.16.1.41 nfs-utils,rpcbind nfs-utils, rpcbind CentOS 6.9-X86_64
 具体要求
1) 首先在backup服务器安装 rsync服务、配置、启动成功(模块的目录名为/nfsbackup);
2) 在nfs01上安装sersync服务,并配置/data目录实现/data目录的数据实时同步到backup服务器上的/nfsbacku目录下;
1.8.2 项目解答

1.9 考试题
1.9.1 手写题目
1.9.1.1 ssh远程连接排错原理?

  1. 检查链路是否通畅---ping(icmp)/tracert/traceroute
  2. 检查链路是否阻断---将防火墙功能关闭
  3. 检查服务是否开启---ss/netstat -lntup(服务端检查) /telnet/nmap/nc(客户端检查)

1.9.1.2 请写出ssh配置文件重要参数(我们讲过的即可)?
GSSAPIAuthentication

ssh连接速度慢优化
#ssh连接速度慢优化
sed -i.bak 's@#UseDNS yes@UseDNS no@g;s@^GSSAPIAuthentication yes@GSSAPIAuthentication no@g' /etc/ssh/sshd_config
/etc/init.d/sshd reload

1.9.1.3 在管理机(m01)上配置ssh+key基于密钥登录172.16.1.41服务器
1.9.1.4 请简单说明ansible批量管理服务部署?
软件下载安装
ansible管理主机软件安装:
yum install -y ansible
ansible受控主机软件安装:(可选)
yum install -y libselinux-python
ansible软件受控主机添加配置
cat /etc/ansible/hosts
[oldboy]
172.16.1.5
172.16.1.6
172.16.1.7
172.16.1.8
172.16.1.9
172.16.1.31
172.16.1.41
172.16.1.51
172.16.1.61

执行免交互批量分发公钥脚本:给客户端分发公钥
#!/bin/bash
rm /root/.ssh/id_dsa
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""

for ip in 31 41 7
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
done

1.9.1.5 请写出ansible常用模块?
ping command shell script copy file yum service playbook
1.9.1.6 ansbile同时分发多台服务器的过程很慢(它是逐台分发的),你想过怎么解决吗?
用过ansible的(copy file yum ping command shell)等模块;ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行.那如果你有大量的机器需要控制,或者你希望减少进程数,那你可以采取异步执行.ansible的模块可以把task放进后台,然后轮询它.这使得在一定进程数下能让大量需要的机器同时运作起来.
1.9.2 口述题

1.9.3 画图题

1.10 项目一:一键在nfs01上部署NFS服务,挂载测试成功
1.10.1 项目需求
我们这一章节学习了ansible,包括基础模块、playbook剧本,在此课程基础上,现在管理机m01需要写好剧本,实现一键部署NFS服务,并且挂在成功;
 项目服务器角色IP列表
角色 主机内网IP 外网IP 所需软件 安装服务 操作系统
m01 172.16.1.61 10.0.0.61 ansible ansible CentOS 6.9-X86_64
nfs01 172.16.1.31 10.0.0.31 nfs-utils,rpcbind, libselinux-python nfs-utils, rpcbind,
libselinux-python CentOS 6.9-X86_64
web01 172.16.1.8 10.0.0.8 nfs-utils,rpcbind, libselinux-python nfs-utils,rpcbind, libselinux-python CentOS 6.9-X86_64
 具体要求
1) m01作为管理端,安装ansible服务,因为ansible基于SSH执行命令,所以要配置m01免密钥登陆nfs01和web01服务器;
2) 通过写剧本playbook来实现一键在nfs01按NFS服务、在web01挂在NFS共享存储;
3) 服务端共享目录为/data,客户端(web01)挂载目录为/www;
1.10.2 项目解答
1.11 考试题
1.11.1 手写题
1.11.1.1 什么是HTTP协议?
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器1.11.1.2 Web服务端是什么?

1.11.1.3 HTTP的请求方法有哪些?
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
1.11.1.4 GET方法与POST方法的区别?
get是从服务器上获取数据,post是向服务器传送数据。
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

1.11.1.5 什么是URL?
统一资源定位符 http://www.cnblogs.com/ | gaoyuechen/p/8366326.html
URL | URI
1.11.1.6 什么是URI?
统一资源标识符
1.11.1.7 请列举生产常见HTTP状态码及其含义?
1XX :信息状态码
100 Continue 继续,一般在发送 post 请求时,已发送了 http header 之后服务端 将返回此信息,表示确认,之后发送具体参数信息
2XX :成功状态码
200 OK 正常返回信息 201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
3XX :重定向
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。 303 See Other 临时性重定向,且总是使用 GET 请求新的 URI 。
304 Not Modified 自从上次请求后,请求的网页未修改过。
4XX :客户端错误
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的 内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
5XX: 服务器错误
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

1.11.1.8 请描述什么是pv,什么是uv?
PV(访问量)即Page View,中文翻译为页面浏览,即页面浏览量或点击量,不管客户端是不是相同,
也不管IP是不是相同,用户只要访问网站页面就会被计算PV

UV(独立访客)即Unique Visitor,同一个客户端(PC或移动端)访问网站被计为一个访客。
一天(00:00-24:00)内相同的客户端访问同一个网站只计一次UV
1.11.1.9 怎么理解并发连接?
并发连接数-SBC(Simultaneous Browser Connections)
并发连接数指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器链接的总TCP数量,就是并发连接数。
1.11.1.10 请说出常见的web静态服务软件和动态服务软件?
apache, IIS,nginx,tomcat,lighttpd,resin, GFE Google的web服务器,
Zeus ,Jetty,SUN ONE Web Server,BEA Weblogic,Node.js,IBM Websphere
常用来提供静态Web服务的软件有如下三种:
Apache:
这是中小型Web服务的主流,Web服务器中的老大哥。
Nginx:
大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。
Nginx的分支Tengine(http://tengine.taobao.org/)目前也在飞速发展
Lighttpd:
这是一个不温不火的优秀Web软件,社区不活跃,静态解析效率很高。
在Nginx流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身影。

常用来提供动态服务的软件
PHP(FastCGI):
大中小型网站都会使用,动态网页语言PHP程序的解析容器。
它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程模式,而是mod_php5.so(module)。
也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。
Tomcat:
中小企业动态Web服务主流,互联网Java容器主流(如jsp、do)。
Resin:
大型动态Web服务主流,互联网Java容器主流(如jsp、do)
1.11.2 口述题
1.11.2.1 请口述用户访问网站基本流程?
①. 利用DNS服务,将输入的域名解析为相应的IP地址
a 本地主机输入域名后,会查询本地缓存信息和本地hosts
b 本地主机会向远程LDNS服务器,发送递归查询请求
LDNS是网卡配置的DNS服务(223.5.5.5 114.114.114.114)
c LDNS服务器会向根域名服务器发出请求,将请求响应给LDNS服务器
d LDNS服务器会向顶级域名服务器发出请求,将请求响应给LDNS服务器
e LDNS服务器会向二级域名服务器发出请求,将请求响应给LDNS服务器
f LDNS服务器收到二级域名服务器响应过来的信息(解析记录),进行本地缓存
将解析记录发送给本地主机
g 本地主机收到LDNS服务器的响应信息,也会将解析记录进行缓存,利用IP地址访问网站服务器
②. 利用已知的IP地址,进行网络三次握手连接建立
③. 本地主机客户端向网站服务端,发出请求 http请求数据包(http请求报文)
④. 网站服务端向本地主机客户端,回复响应 http响应数据包(http响应报文)
⑤. 完成网络四次挥手断开过程
1.11.2.2 请口述DNS系统解析基本流程?

1.11.3 画图题
1.12 项目

1.13 考试题
1.13.1 手写题
1.13.1.1 请说说nginx服务重要特性说明?
· 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
· 资源消耗少:在3万并发连接下,开启10个Nginx线程消耗的内存不到200MB
· 支持异步网络I/O事件模型epoll(Linux 2.6+) apache(select)

1.13.1.2 请说出nginx服务企业应用?(3种应用情景)
1)作为Web服务软件(处理用户访问静态请求)
2)反向代理或负载均衡服务
3)前端业务数据缓存服务
1.13.1.3 简单描述nginx服务与apache服务模型对比?
apache与nginx软件对比说明???
apache使用select模型
nginx使用epoll模型
举例说明:宿舍管理员
select模型版管理员 会一个一个房间查询人员
epoll模型版管理员 会进行检索后,直接找到需要找的人
举例说明:幼儿园阿姨
select模型版阿姨 会一个一个小朋友进行询问,确认哪个小朋友需要上厕所
epoll模型版阿姨 会告知想上厕所小朋友自觉站到响应位置
1.13.1.4 nginx服务虚拟主机配置方式分别是?
①. 基于域名的虚拟主机配置方法(最常用)
②. 基于端口的虚拟主机配置方法
说明:当你访问的网站域名在虚拟主机配置中不存在时,默认会将第一个虚拟主机的配置页面响应给用户
③. 基于IP地址的虚拟主机配置方法
说明:nginx服务中只要涉及IP地址的修改,都需要重启nginx服务,而不能采用平滑重启
1.13.1.5 简述nginx配置文件location匹配优先级?
1)等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项,停止搜索。
2)^~类型表达式,不属于正则表达式。一旦匹配成功,则不再查找其他匹配项,停止搜索。
3)正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
4)常规字符串匹配类型。按前缀匹配。
5)/ 通用匹配,如果没有匹配到,就匹配通用的

1.13.1.6 请写出nginx服务部署流程(安装目录:/application/nginx ,软件包存放目录:/server/tools/ nginx-1.10.3.tar.gz)
cd /server/tools
tar xf nginx-1.10.3.tar.gz
yum install -y pcre-devel openssl-devel
useradd -M -s /sbin/nologin www
cd nginx-1.10.3
./configure --prefix=/application/nginx-1.10.3 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/ nginx-1.10.3 /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx

1.13.2 口述题
1.13.3 画图题
1.14 项目-基于Nginx软件搭建一个Web服务器
1.14.1 项目需求
这一章节我们学习了Nginx服务的相关知识,为了巩固知识点,我们需要基于Nginx软件搭建一个Web服务器,具体要求如下:
 项目要求
1) 安装、配置Nginx服务,并启动成功;
2) 配置基于域名的两个虚拟主机,具体如下表:
域名 配置文件位置 站点目录 index.html文件内容
www.etiantian.org conf/extra/www.conf html/www/index.html www.etiantian.org
bbs.etiantian.org conf/extra/bbs.conf html/bbs/index.html bbs.etiantian.org
1)
 项目服务器角色IP列表
角色 主机内网IP 外围IP 所需软件 安装服务 操作系统
web01 172.16.1.8 10.0.0.8 nginx-1.10.3, openssl,openssl-devel,pcre,pcre-devel nginx CentOS 6.9-X86_64

1.14.2 项目解答

1.15 考试题
1.15.1 手写题
1.15.1.1 请说明Nginx如何和PHP进行协同工作的?
进行软件直接的结合
nginx与php结合:编写nginx配置文件
location ~ ..(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}

   php与mysql结合:编写php程序代码
   <?php
       //$link_id=mysql_connect('主机名','用户','密码');
       //mysql -u用户 -p密码 -h 主机
       $link_id=mysql_connect('localhost','root','oldboy123') or mysql_error();
       if($link_id){
                    echo "mysql successful by oldboy !\n";
                   }else{
                    echo mysql_error();
                   }
   ?>

1.15.2 口述题
1.15.3 画图题
1.16 项目-基于LNMP环境搭建Wordpress博客

1.16.1 项目需求
基于LNMP环境,用Wordpress搭建一个博客网站,能够访问网站,并且能够发博文。
 LNMP架构内容
1) 安装linux系统(CentOS 6.9);
2) 部署nginx网站服务;
3) 部署mysql数据库服务;
4) 部署php动态解析服务;
5) 部署NFS共享存储服务;
 项目服务器角色IP列表
 目服务器角色IP列表
角色 主机外网IP 外网IP 所需软件 安装服务 操作系统
web01 172.16.1.8 10.0.0.8 nginx-1.10.3,openssl ,openssl-devel pcre,pcre-devel nginx CentOS 6.9-X86_64
m01 172.16.1.51 10.0.0.51 mysql-5.6.34 mysql CentOS 6.9-X86_64
nfs01 172.16.1.31 10.0.0.31 nfs-utils,rpcbind nfs-utils,rpcbind CentOS 6.9-X86_64
 具体要求
1) 确保各个服务安装、配置、启动成功;
2) 数据库服务器单独在一台机器;
1.16.2 项目解答

1.17 考试题
1.17.1 手写题
1.17.1.3 Nginx是如何实现反向代理负载均衡功能的?再说说反向代理负载均衡的流程?
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

反向代理服务器通常有两种模型,它可以作为内容服务器的替身,也可以作为内容服务器集群的负载均衡器。
1,作内容服务器的替身
如果您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在客户机看来就像是内容服务器。
当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。内容服务器再通过该通道将结果回传给代理服务器。代理服务器将检索到的信息发送给客户机,好像代理服务器就是实际的内容服务器(参见图 2)。如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。
这样,代理服务器就在安全数据库和可能的恶意之间提供了又一道屏障。与有权访问整个数据库的情况相对比,就算是侥幸成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。

可以配置防火墙路由器,使其只允许特定端口上的特定服务器(在本例中为其所分配端口上的代理服务器)有权通过防火墙进行访问,而不允许其他任何机器进出。
2,作为内容服务器的负载均衡器
可以在一个组织内使用多个代理服务器来平衡各 Web 服务器间的网络负载。在此模型中,可以利用代理服务器的高速缓存特性,创建一个用于负载平衡的服务器池。此时,代理服务器可以位于防火墙的任意一侧。如果 Web 服务器每天都会接收大量的请求,则可以使用代理服务器分担 Web 服务器的负载并提高网络访问效率。
对于客户机发往真正服务器的请求,代理服务器起着中间调停者的作用。代理服务器会将所请求的文档存入高速缓存。如果有不止一个代理服务器,DNS 可以采用“循环复用法”选择其 IP 地址,随机地为请求选择路由。客户机每次都使用同一个 URL,但请求所采取的路由每次都可能经过不同的代理服务器。
可以使用多个代理服务器来处理对一个高用量内容服务器的请求,这样做的好处是内容服务器可以处理更高的负载,并且比其独自工作时更有效率。在初始启动期间,代理服务器首次从内容服务器检索文档,此后,对内容服务器的请求数会大大下降。

1.17.1.4 Nginx负载均衡调度算法有几种?请分别介绍。
①. 定义轮询调度算法-rr-默认调度算法
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
②. 定义权重调度算法-wrr
upstream oldboy {
server 10.0.0.7:80 weight=3;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=1;
}
③. 定义静态调度算法-ip_hash
upstream oldboy {
ip_hash;
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80 backup;
}
④. 定义最小的连接数-least_conn
upstream oldboy {
least_conn;
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}

1.17.1.5 Nginx负载均衡调度状态有几种?请分别介绍。
A)轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
B)ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
C)url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
D)fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块
1.17.1.6 集群web服务如何获悉真实用户访问地址信息?以及根据用户请求hosts信息显示不同网站页面配置方法?
显示真正的客户端的IP信息
X-Forwarded-For
简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。
标准格式如下:X-Forwarded-For: client1, proxy1, proxy2, ...
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
下面的配置实例
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
#proxy_set_header host $host;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
说明:实现用户访问反向代理服务,让web服务器日志记录真实用户的IP地址信息
根据用户请求hosts信息显示不同网站页面配置方法
在location 里添加 proxy_set_header host $host

1.17.2 口述题
1.17.3 画图题
1.18 项目-根据URL中的目录地址实现代理转发
1.18.1 项目需求
 案例背景
通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能、安全、用户体验等重要问题。
下图为企业常见的动静分离集群架构图,此架构图适合网站前端只使用同一个域名提供服务的场景,例如,用户访问的域名是www.etiantian.org ,然后,当用户请求www.etiantian.org/upload/xx 地址的时候,代理会分配请求到上传服务器池处理数据;当用户请求www.etiantian.org/static/xx 地址的时候,代理会分配请求到静态服务器池请求数据;当用户请求www.etiantian.org/xx 地址的时候,即不包含上述指定的目录地址路径时,代理会分配请求到默认的动态服务器池请求数据(注意:上面的xx表示任意路径)。

 项目服务器角色IP列表
角色 主机外网IP 外网IP 所需软件 安装服务 操作系统
lb01 172.16.1.5 10.0.0.5 nginx-1.10.3,openssl ,openssl-devel pcre,pcre-devel nginx CentOS 6.9-X86_64
lb02 172.16.1.6 10.0.0.6 同上 同上 同上
web01 172.16.1.8 10.0.0.8 同上 同上 同上
web02 172.16.1.7 10.0.0.7 同上 同上 同上
web03 172.16.1.9 10.0.0.9 同上 同上 同上
1.18.2 项目解答

1.19 考试题
1.19.1 手写题
1.19.1.1 keepalived软件能干什么?
Keepalived软件起初是专为LVS负载均衡软件设计的,
用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能

Keepalived软件主要是通过VRRP协议实现高可用功能的。
VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,
VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,
整个网络可以不间断地运行
1.19.1.2 keepalived软件工作原理?
1)VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,
VRRP的出现是为了解决静态路由的单点故障。
2)VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。
3)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,
就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,
但一般Keepalived系统运维工作中都是一对。
1.19.1.3 keepalived脑裂可能出现原因?

  1. 心跳线出现问题
    网卡配置有问题
    交换设备有问题
    线缆连接有问题
  2. 有防火墙软件阻止问题
  3. virtual_router_id配置数值不正确
    总之:只要备服务器收不到组播包,就会成为主,而主资源没有释放,就会出现脑裂
    1.19.1.4 如何进行监听本地不存在的IP地址?
    echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
    sysctl -p
    1.19.1.5 如何让keepalived作高可用服务监听nginx服务是否存在?
    1)编写脚本
    #!/bin/bash
    web_info=$(ps -ef|grep [n]ginx|wc -l)
    if [ $web_info -lt 2 ]
    then
    /etc/init.d/keepalived stop
    fi
    1.19.2 口述题
    1.19.3 画图题
    1.20 项目-Nginx负载均衡配合Keepalived服务案例实战
    1.20.1 项目需求
    结合上一章介绍的Nginx负载均衡的环境(项目:根据URL中的目录地址实现代理转发),根据下图调整好主负载均衡器lb01、备用负载均衡器lb02服务器上Nginx负载均衡环境,两台服务器的安装基础环境一模一样。我们这里只需要做的就是对LB负载均衡服务做高可用,通过Keepalived软件服务来实现。
     项目架构图

下图是我们项目需要实现的架构图:


 项目服务器角色IP列表
角色 主机外网IP 外网IP 所需软件 安装服务 操作系统
lb01 172.16.1.5 10.0.0.5 nginx-1.10.3,openssl ,openssl-devel pcre,pcre-devel nginx CentOS 6.9-X86_64
lb02 172.16.1.6 10.0.0.6 同上 同上 同上
web01 172.16.1.8 10.0.0.8 同上 同上 同上
web02 172.16.1.7 10.0.0.7 同上 同上 同上
web03 172.16.1.9 10.0.0.9 同上 同上 同上
1.20.2 项目解答
这里我们只给出配置安装keepalived服务的操作步骤和keepalived的配置文件内容,Web服务器和Nginx负载均衡的安装配置按照上一章节的做就行了,也可以使用上一章节的实验环境。iptables

1.21 考试题

1.22 项目

1.23 系统优化

转载于:https://blog.51cto.com/816885/2355062

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值