1.DNS系统架构与解析原理

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
DNS 的过程?

关于DNS的获取流程:
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。
具体过程如下:
①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如http://www.baidu.com/, 并将这个主机名传送给DNS应用的客户端
③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接

2.http协议通信原理

(1) 建立TCP连接
(2) Web浏览器向Web服务器发送请求命令
(3) Web浏览器发送请求头信息
(4) Web服务器应答
(5) Web服务器发送应答头信息
(6) Web服务器向浏览器发送数据
(7) Web服务器关闭TCP连接

3.TCP/IP三次握手与四次挥手
运维工程师必会原理知识-LMLPHP

三次握手:
第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。
第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。
第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。
到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。

四次挥手:
第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。
第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。
第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。
第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

4.MySQL主从同步原理

mysql主从复制 灵活
 - 一主一从
 - 主主复制
 - 一主多从---扩展系统读取的性能,因为读是在从库读取的
 - 多主一从--5.7开始支持
 - 联级复制

运维工程师必会原理知识-LMLPHP

用途及条件:

 mysql主从复制用途
实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务
 
 主从部署必要条件:
主库开启binlog日志(设置log-bin参数)
主从server-id不同
从库服务器能连通主库

主从原理
mysql主从复制原理

运维工程师必会原理知识-LMLPHP
从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
 
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

5.Nginx配合PHP工作的FastCGI工作原理

	5.1什么是 FastCGI?
	fastcgi的方式是,web服务器收到一个请求时,他不会重新fork一个进程
	(因为这个进程在web服务器启动时就开启了,而且不会退出),
	web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),
	这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出.

`运维工程师必会原理知识-LMLPHP

	5.2Nginx+FastCGI运行原理

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),
这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,
通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;
接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;
最后,Nginx将返回的数据发送给客户端。这就是Nginx+FastCGI的整个运作过程.

运维工程师必会原理知识-LMLPHP

6. LVS四种工作模式原理

LVS 简介
LVS 是 Linux  Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:

负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【通常把这个IP 称为虚拟IP/VIP】
服务器池(server pool):一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS
共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务

(1)直接路由模式(LVS-DR)

运维工程师必会原理知识-LMLPHP

client 发送一个pv请求给VIP;
VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,然后把此请求的package 的MAC地址修改为realserver的MAC地址;

注意:

a.LVS 的VIP 和 realserver 必须在同一个网段,不然广播后所有的包都会丢掉: 提前确认LVS/硬件LB 是什么模式,是否需要在同一个网段
b.所有的realserver 都必须绑定VIP的IP地址,否则realserver 收到package后发现dst 不是自己的IP,所有包都会丢掉。


(2)NAT模式(LVS-NAT)

运维工程师必会原理知识-LMLPHP

-首先client 发送请求[package] 给VIP
-VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver
-realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP
-LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client

(3)Full NAT模式(LVS-FullNAT)
FULL NAT  在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip;
但VIP 返回给client时也替换了src ip;还是通过上面NAT 模式的工作原因的图进行分析 FULL NAT 的工作原理
	a.首先client 发送请求[package] 给VIP
	b.VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver;把sorce ip 改成 lvs 集群的LB IP
	c.realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP
	d.LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client

 注意事项:
FULL NAT 模式也不需要 LBIP 和realserver ip 在同一个网段;
full nat 跟nat 相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS--> 不确定
full nat  因为要更新sorce ip 所以性能正常比nat 模式下降 10%

(4)IP隧道模式(LVS-Tunnel)

运维工程师必会原理知识-LMLPHP

基本原理
a.首先client 发送请求[package] 给VIP
b.VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver;并把client发送的package 包装到一个新的IP包里面;新的IP包的dst是realserver的IP
c.realserver 收到这个package后判断dst ip 是自己,然后解析出来的package的dst是VIP;会检测我们的网卡上是否帮了VIP的ip地址;如果帮了就会处理这个包,如果没有直接丢掉。 我们一般在realserver上面 lo:0 绑定了VIP的ip地址,就可以处理

IP TUNNEL 模式的注意:
	TUNNEL 模式必须在所有的realserver 机器上面绑定VIP的IP地址
	TUNNEL 模式的vip ------>realserver 的包通信通过TUNNEL 模式,不管是内网和外网都能通信,所以不需要lvs vip跟realserver 在同一个网段内
	TUNNEL 模式 realserver会把packet 直接发给client 不会给lvs了
	TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用

四种模式性能比较
	 因为DR模式   TP TUNELL 模式都是在package in 时经过LVS ;
	 在package out是直接返回给client;所以二者的性能比NAT 模式高;
	 但IP TUNNEL 因为是TUNNEL 模式比较复杂,其性能不如DR模式;
	 FULL NAT 模式因为不仅要更换 DST IP 还更换 SOURCE IP  所以性能比NAT 下降10%
	 4种模式的性能如下:DR  --> IP TUNNEL  --->NAT ----->FULL NAT

7. memcached工作原理(内存管理机制)

memcached是一种缓存技术,存储在内存中(高性能分布式内存缓存服务器)。
目的:提速。(传统的都是把数据保存在关系型数据库管理系统即RDBMS,客户端请求时会从RDBMS中读取数据并在浏览器中显示,
这样当访问量过大时或集中时,导致RSBMS负担过重,数据库响应恶化,浏览器中显示延迟等严重问题,
使用memcached减少数据库查询和访问次数以提高访问速度,提高扩展性)

memcache工作原理:
memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
采用的是C/S模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。以key->value形式,key 的值通过 hash 进行转换,然后确定对那台sever存储/获取数据。

memcache作用:
高性能分布式缓存服务器(缓存数据库查询结果,减少数据库访问次数)

运维工程师必会原理知识-LMLPHP

memcached适合做的东西:
	1、访问频繁的字典数据
	2、大量的hot数据(热门数据缓存)
	3、页面缓存(web站常用)
	4、搜索的查询条件和结果(热门搜索的内容缓存起来)
	5、临时处理数据(不需要入库,排重)

8. keepalived高可用服务工作原理

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,	后来又加入了可以实现高可用的VRRP功能。
因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。
VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

运维工程师必会原理知识-LMLPHPKeepalived的工作原理:

Keepalived高可用对之间是通过VRRP通信的,因此,我们从 VRRP开始了解起:

	1) VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。

	2) VRRP是通过一种竟选协议机制来将路由任务交给某台VRRP路由器的。

	3) VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。

	4) 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。
	   备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。

	5) VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。

介绍完 VRRP,接下来我再介绍一下 Keepalived服务的工作原理:

	Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备
	因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
	
  在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主
  当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

9. CDN工作原理

CDN的百度百科的解释为:
      CDN的全称是Content Delivery Network,即内容分发网络。
      其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。
      CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
      其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

通常网络访问中会有"三公里"路程

第一公里为:源站到ISP接入点
第二公里为:源站ISP接入点到访问用户的ISP接入点
第三公里(最后一公里)为:用户ISP接入点到用户客户端

第一公里的耗时取决于源站自身响应能力和出口带宽
第二公里的耗时取决于从源站的接入点到最终用户的接入点之间的传输路径,主要为网络运营商之间的互连瓶颈问题,不同地区骨干网之间的数据交换、传输,会导致传输途中的路由阻塞和延迟
第三公里的耗时取决于最终用户接入Internet的方式,会越来越快,以后不会是瓶颈

而CDN网络层主要用来加速第二公里,怎么加速呢?原理并不难,下面简单介绍下:
首先看下访问网站的一个普通流程

运维工程师必会原理知识-LMLPHP

再看下有CDN层的访问流程

运维工程师必会原理知识-LMLPHP

CDN的好处不止是加速,还可以有效地降低源站负载,降低高额的带宽成本(不必按峰值带宽直接向ISP购买带宽),防止DDOS等攻击。

10. linux启动过程

先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为
POST-->BIOS-->MBR(GRUB)-->Kernel-->Init-->Runlevel

运维工程师必会原理知识-LMLPHP

BIOS(Basic Input/Output System)
		基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,
		这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。

MBR(Master Boot Record)
		主引导记录,MBR存储于磁盘的头部,大小为512bytes
		其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。
	
GRUB(Grand Unified Bootloader)
		多系统启动程序,其执行过程可分为三个步骤:
   Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5
  Stage1_5:该步骤就是为了识别文件系统
  Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。

Kernel
	Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,
    initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。
    因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,
    故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。
    
	Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序

Init
    init,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行
  第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):

  1、激活udev和selinux;
  2、根据/etc/sysctl.conf文件,来设定内核参数;
  3、设定系统时钟;
  4、装载硬盘映射;
  5、启用交换分区;
  6、设置主机名;
  7、根文件系统检测,并以读写方式重新挂载根文件系统;
  8、激活RAID和LVM设备;
  9、启用磁盘配额;
  10、根据/etc/fstab,检查并挂载其他文件系统;
  11、清理过期的锁和PID文件
   执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

Runlevel
	  runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种
	  
	  0:关机模式
	  1:单一用户模式(直接以管理员身份进入)
	  2:多用户模式(无网络)
	  3:多用户模式(命令行)
	  4:保留
	  5:多用户模式(图形界面)
	  6:重启
	
  在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本
		Run level 0 – /etc/rc.d/rc0.d/
		Run level 1 – /etc/rc.d/rc1.d/
		Run level 2 – /etc/rc.d/rc2.d/
		Run level 3 – /etc/rc.d/rc3.d/
		Run level 4 – /etc/rc.d/rc4.d/
		Run level 5 – /etc/rc.d/rc5.d/
		Run level 6 – /etc/rc.d/rc6.d/
  这些目录下的脚本只有K*和S*开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

11. linux系统文件删除原理

Lniux下控制文件真正被删除的计数器

Linux是link的数量来控制文件删除的。只有当一个文件不存在任何link的时候,这个文件才会被删除。
一般来讲,每个文件都有两个link计数器:i_count和i_link

i_count的意义是当前文件使用者(或被调用)的数量
	当一个文件被某一个进程引用时,对应的这个值就会增加
i_nlink的意义是介质连接的数量(硬链接的数量)
	当创建文件的硬链接的时候,这个值就会增加
可以理解为i_count是内存引用计数器,i_nlink是硬盘的引用计数器

rm命令原理

	对于删除命令rm而言,实际上就是减少磁盘引用计数i_nlink。
	Q:如果一个文件正在被某个进程调用,而用户却执行rm把文件删除了,那么会出现什么结果?
	      当用户执行rm删除文件后,再执行ls或其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容,这又是为什么呢?

	A:rm操作只是将文件的i_nlink减少了,如果没有其它的链接i_nlink就为0了。
       但是由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以执行rm操作,系统并没有真正的删除这个文件,只有当i_nlink和i_count都为0的时候,这个文件才会被真正的删除。
	   也就是说,必须要解除该进程对该文件的调用,才能真正的删除。

	Q:当文件没有被调用,执行了rm操作之后,还能找回被删除的文件吗?

    A:rm操作只是将文件的i_nlink减少了,或者说置为0,实际上就是将inode的链接删除了,
       此时,并没有删除文件的实体(block数据块),此时,如果及时停止机器工作,数据是可以找回的,
       如果继续写入数据,那么新数据可能会被分配到被删除的数据的block数据块,文件就被真正的回收了。

12. 磁盘阵列 RAID 技术原理详解

RAID,为Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列。
在1987年由美国柏克莱大学提出RAID(Redundant Arrayof Inexpensive Disks)理论,作为高性能的存储系统,巳经得到了越来越广泛的应用。
RAID阵列技术允许将一系列磁盘分组,以实现为数据保护而必需的数据冗余,以及为提高读写性能而形成的数据条带分布。
RAID最初用于高端服务器市场,不过随着计算机技术的快速发展,RAID技术已经渗透到计算机遍布的各个领域

运维工程师必会原理知识-LMLPHP
RAID 0的特点、原理与应用

也称为条带模式(striped),即把连续的数据分散到多个磁盘上存取。
当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。
因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行 RAID 0 的主要原因。
但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。

运维工程师必会原理知识-LMLPHP

要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。
因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。
如果刚好所需要的数据在不同的驱动器上效率最好。
它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。
如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID0比较合适。
同时,RAID可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么原来读取同样文件的时间被缩短为1/2。
在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。


RAID 1 的特点、原理与应用

RAID 1 又称为镜像(Mirroring),一个具有全冗余的模式。
RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。
这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。

运维工程师必会原理知识-LMLPHP

对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作。
因为是镜象结构在一组盘出现问题时,可以使用镜象,提高系统的容错能力。
它比较容易设计和实现。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。
因为RAID1的校验十分完备,因此对系统的处理能力有很大的影响,通常的RAID功能由软件实现,而这样的实现方法在服务器负载比较重的时候会大大影响服务器效率。
当您的系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持"热替换",即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。
当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。



RAID 5特点、原理与应用

运维工程师必会原理知识-LMLPHP

raid 5使用至少三块硬盘来实现阵列,它既能实现raid 0的加速功能也能够实现raid 1的备份数据功能,在阵列当中有三块硬盘的时候,它将会把所需要存储的数据按照用户定义的分割大小分割成文件碎片存储到两块硬盘当中,	
此时,阵列当中的第三块硬盘不接收文件碎片,它接收到的是用来校验存储在另外两块硬盘当中数据的一部分数据,这部分校验数据是通过一定的算法产生的,可以通过这部分数据来恢复存储在另外两个硬盘上的数据。	
另外,这三块硬盘的任务并不是一成不变的,也就是说在这次存储当中可能是1号硬盘和2好硬盘用来存储分割后的文件碎片,那么在下次存储的时候可能就是2号硬盘和3号硬盘来完成这个任务了。	
可以说,在每次存储操作当中,每块硬盘的任务是随机分配的,不过,肯定是两块硬盘用来存储分割后的文件碎片另一块硬盘用来存储校验信息。
这个校验信息一般是通过raid控制器运算得出的,通常这些信息是需要一个raid控制器上有一个单独的芯片来运算并决定将此信息发送到哪块硬盘存储。
raid 5同时会实现raid 0的高速存储读取并且也会实现raid 1的数据恢复功能,也就是说在上面所说的情况下,raid 5能够利用三块硬盘同时实现raid 0的速度加倍功能也会实现raid 1的数据备份功能
并且当raid 5当中的一块硬盘损坏之后,加入一块新的硬盘同样可以实现数据的还原。

RAID 0+1(RAID 10)的特点、原理与应用

RAID 0 over RAID 1
假设我们有四台磁盘驱动器,每两台磁盘驱动器先做成RAID 1,再把两个RAID 1做成RAID 0,这就是RAID 0 over RAID 1:
(RAID 1) A = Drive A1 + Drive A2 (Mirrored)
(RAID 1) B = Drive B1 + Drive B2 (Mirrored)
RAID 0 = (RAID 1) A + (RAID 1) B (Striped)

RAID 1 over RAID 0
假设我们有四台磁盘驱动器,每两台磁盘驱动器先做成RAID 0,再把两个RAID 0做成RAID 1,这就是RAID 1 over RAID 0:
(RAID 0) A = Drive A1 + Drive A2 (Striped)
(RAID 0) B = Drive B1 + Drive B2 (Striped)
RAID 1 = (RAID 1) A + (RAID 1) B (Mirrored)

在这种架构之下,如果 (RAID 0) A有一台磁盘驱动器故障,(RAID 0) A就算毁了,当然RAID 1仍然可以正常工作;
如果这时 (RAID 0) B也有一台磁盘驱动器故障,(RAID 0) B也就算毁了,此时RAID 1的两磁盘驱动器都算故障,整个RAID 1资料就毁了。
因此,RAID 0 OVER RAID 1应该比RAID 1 OVER RAID 0具备比较高的可靠度。所以我们建议,当采用RAID 0+1/RAID 10架构时,要先作RAID 1,再把数个RAID 1做成RAID 0。

13. 一致性哈希算法的作用及原理

在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡的作用。

但是普通的余数hash(hash(比如用户id)%服务器机器数)算法伸缩性很差,当新增或者下线服务器机器时候,用户id与服务器的映射关系会大量失效。一致性hash则利用hash环对其进行了改进。
一致性哈希算法常用于负载均衡中要求资源被均匀的分布到所有节点上,并且对资源的请求能快速路由到对应的节点上。

具体的举两个场景的例子:
    1、MemCache集群,要求存储各种数据均匀的存到集群中的各个节点上,访问这些数据时能快速的路由到集群中对应存放该数据的节点上;并且要求增删节点对整个集群的影响很小,不至于有大的动荡造成整体负载的不稳定;
    2、RPC过程中服务提供者做N个节点的集群部署,为了能在服务上维护一些业务状态,希望同一种请求每次都落到同一台服务上。
    比如有{N0, N1, N2}三个节点,陆续有多个资源要分配到这三个节点上,如何尽可能均匀的分配到这些节点上?
    一致性哈希算法的思路为:先构造出一个长度为232整数环,根据N0-3的节点名称的hash值(分布为[0,232-1])放到这个环上。现在要存放资源,根据资源的Key的Hash值(也是分布为[0,232-1])值Haaa,在环上顺时针的找到离Haaa最近(第一个大于或等于Haaa)的一个节点,就建立了资源和节点的映射关系。

运维工程师必会原理知识-LMLPHP

这一部分不怎么理解,请参考http://www.zsythink.net/archives/1182/

14. 硬盘相关原理

磁盘读写数据的原理

系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,是同一柱面的下一磁头,……,一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。
(文件的记录在同一盘组上存放是,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上,对应同一柱面,则应该按盘面的次序顺序存放。)
从上到下,然后从外到内。数据的读/写按柱面进行,而不按盘面进行,系统也以相同的顺序读出数据。读
出数据时通过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。
磁盘控制器则 直接使磁头部件步进到相应的柱面,选通相应的磁头,等待要求的扇区移动到磁头下。
在扇区到来时,磁盘控制器读出每个扇区的头标,把这些头标中的地址信息与期待检出的磁头和柱面号做比较(即寻道),然后,寻找要求的扇区号。
待磁盘控制器找到该扇区头标时,根据其任务是写扇区还是读扇区,来决定是转换写电路, 还是读出数据和尾部记录。
找到扇区后,磁盘控制器必须在继续寻找下一个扇区之前对该扇区的信息进行后处理。
如果是读数据,控制器计算此数据的ECC码,然 后,把ECC码与已记录的ECC码相比较。
如果是写数据,控制器计算出此数据的ECC码,与数据一起存储。在控制器对此扇区中的数据进行必要处理期间,磁盘继续旋转。


固态硬盘和普通硬盘的区别

SSD(固态硬盘)和HDD(机械硬盘)之间的巨大差距来源于它们的结构,SSD为全电子结构,采用集成电路存储技术,使用存储芯片加上寻址控制器来组成的硬盘,类似于U盘技术,没有任何机械运动部件。
传统的机械硬盘HDD采用高速旋转的磁盘来存储数据,通过磁头来读写,这一机械运动过程中带有延迟、并且无法同时迸发多向读写数据。


磁盘分区的原理

分区是操作系统的逻辑概念,硬盘本身并不存在分区。
	A:Windows
	挂载:操作系统目录 与 硬盘分区建立联系的过程。
	挂载点:被挂载的操作系统目录 就是挂载点 
	(例如:C/D/E/F/G/H/I/J/K)等目录
	挂载类型:自动/手动。 
	Windows系统的挂载类型都是手动的。
	根目录:Windows 有多个根目录(例如:C/D/E/F/G/H/I/J/K)
	文件占据磁盘磁盘空间(文件占据目录空间) 
	各自挂载点目录下文件占据对应挂载点本身的磁盘空间。
	
	B:Linux
	挂载:操作系统目录 与 硬盘分区建立联系的过程。
	挂载点:被挂载的操作系统目录 就是挂载点 
	(例如:) 
	/ 
	/boot 
	/app/shop
	挂载类型:自动/手动。 
	Linux:存在自动和手动两种方式 
	自动:系统安装创建的挂载点,后期使用会自动于硬盘分区建立联系。 
	手动:系统运行起来临时添加的U盘、移动硬盘不会被系统应用起来。需要手动创建一个文件目录,并使其于该硬件进行联系挂载。
	根目录:只有一个:”/”
	文件占据磁盘磁盘空间(文件占据目录空间) 
	会占据所在“树枝”的挂载点的目录空间。
	与新硬件形成挂载。 
	a、把挂载点目录内部的旧文件释放出去(可以删除也可以剪切到别的挂载点下) 
	b、再进行挂载操作。 
	c、如果不释放文件,那这个文件就会一直占据硬盘空间,并且我们不在能看得见,不过相信还是有办法来清理他们的只是现在我还不知道罢了。


软链接和硬链接的区别

	硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
	在Linux中,多个文件名指向同一索引节点是存在的。比如:A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,
	两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
	
	另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
	比如:A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。
	但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。


   通过实验加深理解
    [oracle@Linux]$ touch f1          #创建一个测试文件f1
    [oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
    [oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
    [oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
    total 0
    9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
    9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
    9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

    从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

block与inode知识小结
	
	什么是inode?
    理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。
    每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。
    这种由多个扇区组成的块是文件存取的最小单位,块的大小,最常见的是4KB,即连续八个sector组成一个block,文件数据都储存在块中,那么很明显,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创年日期、文件的大小等等。这种储存元信息的区域叫做inode,中文译名为”索引节点”。inode (index node) 表中包含文件系统的所有文件列表。
	
	inode包含文件的信息(元数据)
    1.Inode编号
    2.用来识别文件类型,以及用于stat C函数的模式信息
    3.文件权限
    4.文件的拥有者的UID
    5.文件所属组的GID
    6.链接数(指向这个文件名路径名称个数)
    7.文件的大小
    8.文件的间戳(ctime指inode上一次变动的时间,mtime是指文件内容上一次变动的时间,atime指文件上一次打开的时间)
    9.指向磁盘文件的数据块指针
    10.有关文件的其它数据

	磁盘存取文件是按block为单位存取的;
	block:实际记录文件的内容,若文件太大时会占用多个 block ;
	一个文件可能占用多个block,但是每读取一个block就会消耗一次磁盘I/O;
	如果要提升磁盘IO性能,那么block应该大一点,从而能读取更多内容;
	block太大,存放小文件就会造成空间浪费;block太小,又会消耗磁盘IO;
	要根据业务需求确定block大小,一般默认设置为4K;

15. linux默认文件系统介绍

			根文件系统的基本目录结构
			
		Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录”/”下的顶层目录都有一些比较固定命名和用途。
		下面列出了一个Linux根文件系统中的比较常见的目录结构:
			/bin 存放二进制可执行命令的目录
			/dev 存放设备文件的目录
			/etc 存放系统管理和配置文件的目录
			/home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示
			/lib 存放动态链接共享库的目录
			/sbin存放系统管理员使用的管理程序的目录
			/tmp 公用的临时文件存储点
			/root 系统管理员的主目录
			/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
			/proc 虚拟文件系统,可直接访问这个目录来获取系统信息。
			/var 某些大文件的溢出区
			/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
		对于经常使用Linux系统的读者来说,这些目录大部分应该很熟悉了。
		不过有几个目录对初学者来说容易混淆,如/bin,/sbin,/usr/bin和/usr/sbin。
		这里简单介绍一下它们的区别:/bin目录一般存放对于用户和系统来说都是必须的二进制文件,而/sbin目录要存放的是只针对系统管理的二进制文件,该目录的文件将不会被普通用户使用。
		相反,那些不是必要的用户二进制文件存放在/usr/bin下面,那些不是非常必要的系统管理工具放在/usr/sbin下。
		此外,对于一些本地的库也非常类似,对于那些要求启动系统和运行的必须命令要存放在/lib目录下,而对于其他不是必须的库存放在/usr/lib目录就可以。

16. linux权限管理体系

linux文件权限管理
	ls -l查看文件权限

运维工程师必会原理知识-LMLPHP

第一个字段表示了对象的类型:

d   rwxrwxr-x
-   rw-rw-r--

- 代表文件
d 代表目录
l 代表链接
c 代表字符型设备
b 代表块设备
n 代表网络设备

最后9个字段,是由3组权限组成。
rwx  r-x  r-x

第一组:对象的属主
第二组:对象的属组
第三组:系统其他用户
每组定义了3种访问权限:

rwx  r-x  r-x

r 代表对象是可读的
w 代表对象是可写的
x 代表对象是可执行的
- 代表无权限

三种访问权限又由3个八进制的数字代替:

r读权限对应八进制4。
w写权限对应八进制2。
x执行权限对应八进制1。


修改权限
chmod命令用来改变文件和目录的安全性设置。

案例:

chmod a+rwx test.txt或chmod 777 test.txt将test.txt文件权限修改成所有用户可读可写可执行权限。
chmod u+x test.txt 给所属用户添加可执行权限。
chmod g+x test.txt 给所属组添加可执行权限。
chmod o-w test.txt 给所属其他删除可写权限。
chmod o=rw- test.txt 将其他权限设置为可读可写的

解释:
u 代表用户。
g 代表组。
o 代表其他。
a 代表上述所有。
+ 在现有权限基础上增加权限。
- 在现有权限基础上移除权限。
= 将权限设置成后面的值。

改变所属关系:
chown命令用来改变文件的属主,也可以改变属组。
chgrp命令用来改变文件的默认属组。
sudo chown one test.txt 将文件的属主改成one用户。
sudo chown .one test.txt 将文件的属组改成one组。
sudo chown hzq.hzq test.txt 将文件的属组和属主都改成qzw用户和qzw组。
sudo chown -R one test/ 将文件的属主及其子目录和文件的属主改成qzw用户 -R递归改变子目录和文件的所属关系。
sudo chgrp one test/ 文件文件夹的属组改成one组。

linux用户权限管理
Linux作为一种多用户多任务操作系统,在日常的使用中不可避免地要划分出一个角色的概念来管理和使用计算机,这个角色与每一个计算机使用者关联,在Linux中称这种角色为用户
。而在每一个用户使用计算机的过程中,又必然存在对有限计算机资源使用的限制性,那么操作系统就必须提供一种途径来保证每个用户独立、合理的使用计算机。

一、用户和用户组管理
	(一)用户及用户组相关基本概念
	用户:泛指计算机的使用者。用计算机可识别的用户ID(UID,user id)标识。
	用户组:用户容器,用来将多个用户合并为一个单一的逻辑组件。用计算机可识别的用户组ID(GID,group id)标识。
	UID和GID:都是16位二进制数,其范围为0-65535,共计2^16=65536个。
	
	用户类别:
	(1)管理员用户:被称为root,UID为0。
	(2)系统用户:为系统运行提供服务的非登陆式用户,UID从1-999这个范围进行分配。
	(3)登陆用户:真正使用计算机的普通用户,UID从500-60000进行分配。

	组类别:Linux系统中用户组可按三种方式划分:
	
	1、与类似用户的分类方式
	(1)管理员组:管理员所在组,GID为0。
	(2)系统用户组:系统用户所在组,GID为1-999。
	(3)登陆用户组:登陆用户所在组,GID为1000-60000。

	2、从用户角度出发分类
	(1)用户的基本组:每个用户的主要组。
	(2)用户的附加组:每个用户加入的其他组。

	3、从用户组的角度出发分类
	(1)私有组:组名和用户名相同,且只包含一个用户。
	(2)公共组:组名包含多个用户。

	认证信息:用户名和密码,通过比对事先存储的信息与登陆时用户提供的信息是否一致来认证用户。

那么遵从Linux中“一切皆文件”的哲学理念,认证信息也保存在文件来中。我们来认识三个文件分别是/etc/passwd、/etc/group和/etc/shadow,
这三个文件分别保存了用户的信息、组的信息和密码的信息,当用户登陆时就是通过比对这三个文件中的信息来实现认证,接下来,我们对这三个文件的内容格式作出解释。

(1)/etc/passwd 文件字段说明

name:password:UID:GID:GECOS:directory:shell
	① name:用户名
	② password:可以是加密的密码,也可以是占位符x:
	③ UID:用户ID
	④ GID:用户所属的基本组ID
	⑤ GECOS:可选,用户的注释信息
	⑥ directory:用户的家目录
	⑦ shell:用户的默认shell(登陆时)
	
(2)/etc/shadow 文件字段说明

	① name:用户名。
	② $加密算法$salt$加密密码:salt称为杂质,加密时添加。
	③ 最近一次修改密码的时间:表示从1970年1月1日(unix元年)开始的天数;0表示用户下次登录时应该更改密码;空字段表示这个功能被禁止。
	④ 最短使用期限:从更改密码开始,下次可更改密码经过的天数。
	⑤ 最长使用期限:从更改密码开始,可合法使用此密码的天数。
	⑥ 警告期限:在最长使用期限过期之前,警告密码应更改的天数。
	⑦ 非活动期限:在最长使用期限后,此密码还可被使用的一段时间。
	⑧ 账户过期期限:从1970年开始,账户可被使用的天数。
	⑨ 保留字段

(3)/etc/group 文件字段说明

	group_name:password:GID:user_list
	① group_name:用户组名
	② passwd:组密码
	③ GID:用户组ID
	④ user_list:以该组为其附加组的用户的用户列表;

(二)用户和用户组管理相关命令

命令概述:useradd,userdel,usermod,passwd,groupadd,groupdel,groupmod,gpasswd,chage,id,su,chown,chgrp
	1、groupadd  添加组
	使用格式 :groupadd [options] group
	-g,--gid GID  指定GID;如不指定则默认是上一个已存在组的GID加1
	-r, --system  创建系统组
	# group add mygroup
	# groupadd -r mygroup

2、groupmod  修改组属性
	使用格式 : groupmod [options] GROUP
	-g GID: 修改GID
	-n new_name:修改组名
	#  groupmod -g 1002 mygroup
	#  groupmod -n mynewgroup mygroup

3、groupdel  删除组

使用格式:    groupdel [options] group
	#  groupdel mynewgroup

4、useradd  创建用户

使用格式:    useradd [options] LOGIN
	-u,--uid UID:指定UID;
	-g,--gid GROUP:指定基本组ID,此组需要事先存在
	-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号隔开
	-c,--comment COMMENT:指定注释信息
	-d,--homeHOME_DIR:  以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名来实现:指定的家目录路径事先存在,则不会为用户复制环境配置文件;
	-s,--shell SHELL:指定用户的默认shell,而可用的所有shell列表存储在/etc/shells文件当中;
	-r,--system:创建系统用户;
	-M  不创建用户主目录
	-f    密码过期后的使用天数,0表示禁用,-1表示永不禁用
	-D  显示创建用户的默认设定
	注意:创建用户时的诸多默认设定在/etc/login.defs文件中
	#  useradd myuser

5、usermod  更改用户属性

使用格式:    usermod [options] LOGIN
	-u,--uid UID :修改用户ID
	-g,--gid GROUP  修改用户所属的基本组,
	-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖
	-a,--append:与-G一起使用,用于为用户追加新的附加组;
	-c,--comment COMMENT:修改注释信息
	-d,--home HOME_DIR: 修改用户的家目录,用户原有的文件不会被转移至新位置;
	-m,--move-home:只能与-d一起使用,用于将用户的主目录移动到新位置
	-l,--login LOGIN:修改用户登录名
	-s,--shell SHELL:修改用户的默认shell
	-L,--lock:锁定用户密码
	-U,--unclock:解锁用户的密码;
	#  将用户myuser的家目录更改为/tmp/home/user,并且原来的用户配置不变,且更改用户的默认shell为tcsh
	#  usermod -s /bin/tcsh -d /tmp/home/user -m myuser

6、userdel  删除用户

使用格式:    userdel[option] login
	-r  删除用户时,一并删除其家目录
	注意:当删除一个用户时,其基本组也会被删除。
	#  删除用户myuser
	#  userdel myuser

7、passwd  密码管理

使用格式:    passwd [-k] [-l][-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S][--stdin] [username]
	(1)passwd:修改用户自己的密码
	(2)passwd USERNAME:修改指定用户的密码,但仅root用户有此权限,且不需要知道原密码;
	-l,-u:锁定和解锁用户
	-d:清除用户密码串
	-e DATE:设定过期期限;
	-i DAYS:非活动期限;
	-n DAYS: 密码的最短使用期限
	-x DAYS: 密码的最长使用期限
	-w DAYS:警告期限
	--stdin:从标准输入读入密码。
	通常在脚本中如此使用:echo "PASSWORD" | passwd--stdin USENAME
	#  更改用户user的密码
	#  passwd myuser

8、gpasswd: 更改用户组密码

使用格式:    gpasswd [option]  group
	-a USERNAME: 向组中添加用户
	-d USERNAME: 从组中移除用户
	#  更改用户组密码
	#  gpasswd mygroup
	#  将用户myuser添加进mygroup组中,即让mygroup成为myuser的附加组。
	#  gpasswd myuser

9、chage 更改密码过期信息

使用格式:    chage [options] LOGIN
	-d:更改上次修改密码的期限
	-E:更改账户过期期限
	-I:更改密码的非活动期限
	-W:更改警告期限
	-m:更改密码最短使用期限
	-M:更改密码最长使用期限

10、id  显示用户的真实和有效 id 信息

使用格式:    id[OPTION]... [USER]
	id:显示自己的ID信息
	-u:仅显示有效UID
	-g:仅显示有效基本组ID
	-G:显示用户所属的所有组的ID
	-n:不显示ID而显示名称(配合以上显示ID的选项一起用)

11、su  切换用户

登陆时切换:会重新读取目标用户的配置文件来重新初始化
	su - USERNAME
	su -l USERNAME
非登陆式切换:不会读取目标用户的配置文件来进行初始化
	su USERNAME -c 'COMMAND':仅以指定用户的身份运行此处指定的命令
注意:管理员可无密码切换至其他任何用户;非管理员必须要给出目标用户的登陆密码

12、chown 更改文件属主或者属组或者属主和属组
	使用格式:      chown [OPTION]... [OWNER][:|.[GROUP]] FILE...
	可以使用OWNER:GROUP或者OWNER.GROUP
	chown [OPTION]... --reference=RFILE FILE...
	选项:
	-R,--recursive:递归修改
	注意:用户仅能修改属主为自己的那些权限
	#  将文件file1的属组和属主更改为mygroup和myuser
	#  chown myuser:mygroup file1

13、chgrp 仅更改属组

使用格式:      chgrp [OPTION]... GROUP FILE...
	chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可修改文件的属组 

二、 mysql企业面试题
17. 什么是mysql多实例?

简单的说,就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口提供各自的服务。
	MySQL多实例的作用与问题
1.有效利用服务器资源
	当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。
2.节约服务器资源
	当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了。
	MySQL多实例有它的好处,但也有其弊端,比如:会存在资源互相枪占的问题。
3.资源互相枪占问题
	当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

18. 如何配置mysql多实例?

mysql操作:https://blog.csdn.net/m0_37886429/article/details/79268391

19. mysql root忘记密码

	1 ###MySQL密码忘记####
	2 mysqld_safe --skip-grant-tables --user=mysql &
	3 #mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables >/dev/null 2>&1 &
	4 mysql
	5 #用户@主机    唯一标识
	6 mysql> update mysql.user set password=PASSWORD('old') where user='root' and host='localhost';
	7 mysql> flush privileges;
	8 /etc/init.d/mysqld stop
	9 /etc/init.d/mysqld start

20.linux密码忘记解决方法

	1.	开机进入单用户模式修改密码
	2.使用具有管理员权限的其他用户修改root密码

21.FTP的主动模式和被动模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。

	从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。

22.服务常用端口

HTTP:80:www服务。
DHCP:服务器端的端口号是67、客户机端的端口号是68
POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。
SMTP:端口号是25
Telnet:端口号是23
FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。
TFTP:端口号69,使用的是UDP的连接。
DNS:53,名称服务
NetBIOS:137,138,139,其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入
QQ:使用8000(服务端)和4000端口(客户端)

本文参考文献
LVS 工作模式以及工作原理:https://blog.csdn.net/caoshuming_500/article/details/8291940
Nginx+FastCGI运行原理:http://book.51cto.com/art/201202/314840.htm
TCP/IP协议三次握手和四次挥手:https://blog.csdn.net/li0978/article/details/52598121
memcached工作原理:https://blog.csdn.net/guugle2010/article/details/40115675
CDN工作原理:https://blog.csdn.net/chdhust/article/details/51623194
Linux启动过程:https://www.cnblogs.com/changxr/p/8023341.html
Linux下文件删除的原理:https://blog.csdn.net/u013071953/article/details/70141228
磁盘阵列 RAID 技术原理详解:https://blog.csdn.net/lincoln_2012/article/details/51925590
操作系统分区原理:https://blog.csdn.net/u014587769/article/details/70225054
linux权限管理:https://blog.csdn.net/mmd0308/article/details/77862085
linux文件管理:https://www.linuxidc.com/Linux/2015-12/126635.htm
mysql操作:https://blog.csdn.net/m0_37886429/article/details/79268391

10-22 09:00