Skip to content

Latest commit

 

History

History
2642 lines (1302 loc) · 89.3 KB

README.md

File metadata and controls

2642 lines (1302 loc) · 89.3 KB

简介

本人运维 • 所有笔记亲测有效 •  只需 macOS + vps (CentOS_7) 

个人网站: www.0214.live

项目结构:

 ◼︎0-1993 ------- 安全技术: Wireshark、Nmap、Nessus、MSF、暗网、暴破 ... 
 ◼︎1-Net -------- 网络技术: 各种服务器搭建笔记: SSR、FRP、VPN、邮箱、DNS...
 ◼︎2-Linux ------ 基础知识: SSH、防火墙、包管理器、正则式、三剑客、文件系统 ...
 ◼︎3-Script ----- 脚本笔记: Bash、Python、 AppleScript
 ◼︎4-Web -------- 前端技术: Nginx、Bootstrap ...
 ◼︎5-Django ----- Django 基础
 ◼︎6-Database --- MySQL 主从/主主、ProxySQL读写分离、LVS高可用... 
 ◼︎7-Virtual ---- 虚拟化技术: Docker、VMware、ESXi、Openstack ....
 ◼︎9-DevOps ----- 运维工具: Zabbix监控、Puppet部署、ELK日志分析 ....

使用方法:

🔵 VSC 使用等宽字体

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 IT • 网络 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 防火墙 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

防火墙 面试

iptables vs firewall iptables 也不是不能用。。。
看你需求了。无法就是没有 动态生效都特性。。。 用不着就用 iptables。 it 么 一个东西没坏 为什么要去修呢。。。

💗 四个表

Nat 表 Mangle 表 Filter 表 Raw 表

💗 目标值

ACCEPT : 接受包 DROP : 丢弃包

QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方) RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则

💗 作用 保护核心服务。 网络记录。。。

ping: 内部向外ping 外部向内ping

比如 mysql 允许某个IP 访问。。。

💗 设置默认时允许还是禁止。

💗 静止的话 允许特定的端口访问 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT

💗 接受某IP所有某个包。。。

iptables -A INPUT -s 192.168.0.7 -j ACCEPT

💗 几个表 几个链

💗 增加减少端口 tcp/udp 有点区别而已。。。。

💗 还能屏蔽 IP。 iptables -I INPUT -s 123.45.6.7 -j DROP

💗 保存防火墙: service iptables save 💗 重启防火墙: service iptables restart

iptables firewall

在CentOS7.0中默认使用firewall代替了iptables service。虽然继续保留了iptables命令,但已经仅是名称相同而已。 firewall是centos7的一大特性,最大的好处有两个:

支持动态更新 不用重启服务;

最常用命令

防火墙作用:

允许内网某些服务。 如 samba 。。。 pop3 。。。 禁止 DDOS 禁止 ping

端口转发。 比如 ssh 可以转发的! 可以不用登陆堡垒机 直接到内网。。。

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 网络排错 ✔︎🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

            参考  http://xpleaf.blog.51cto.com/9315560/1689438

🔵 基础知识

🔸 TCP/IP 

    OSI七层不需要非常了解. 
    但是 DNS、TCP、UDP、IP、ICMP、ARP 这些最基础的你要知道!
    至少要知道 这几个协议是干嘛用的! 

        DNS :  把域名解析成IP
        TCP:   安全可靠但是慢的
        UDP:   不可靠但是快
        IP:    地址....
        ICMP:  Ping 用到
        ARP:   对应 MAC地址 和 IP地址


🔸 网络设备对应OSI层次 

    二层交换 ➜ 数据链路层 ➜ 交换机通过 Mac地址来实现数据转发
    三层路由 ➜ 网络层     ➜ 路由器用过 IP 来实现数据转发.



🔸 路由/网关 区别 (可选)

    民用的路由器中 同时包含了 路由 和 网关两个功能. 但是企业中一般是分开的! 
    企业的思科路由器是有两三个台式电脑主机那么大的! 
    企业的网关么 和民用的路由器差不多大小.

    网关就是一个关口. 通往另一个网络.
    电脑设置网络为什么要填网关, 就是为了区分内外网络.
    你家的路由器只负责你家里面设备的相互通信. 也就是内网的通信.
    那么外网咋办呢.  所有不是内网的通信 都扔给网关.... 网关就是这个用的...
    网关的速度就是外网的速度.  光纤也就1000M. 也就一根光纤.  压力不大. 所以设备也不大

    但是企业里面几百上千台电脑.  内网网速虽然也是1000M, 但是电脑多啊! 
    上班大家都是一起用的电脑.  如果频繁的传文件, 频繁的数据备份什么的. 其实压力非常大! 
    由于内网的数据都是 路由器处理的. 所以专业的路由器体积自然就非常大了 



🔸 企业基本网络架构
    
    不管多么复杂的网络. 整体架构都是差不多的. 

    用户 ➜ 普通交换机 ➜ 核心交换机  ➜  路由器 ➜  防火墙
        - 普通电脑接到普通交换机上.
        - 服务器等重要电脑接到核心交换机上 甚至 路由器上.

🔵 常用命令

ipconfig   ➜ 本机IP 掩码 网关 
ping       ➜ 测试连通性 
nslookup   ➜ 测试是否能解析某个网址. 用来判断 DNS 是否可用!
traceroute ➜ 路由追踪 , 可用MTR, 用来判断那个节点出错了.
arp -a     ➜ 查看 arp 表是否正常.  有没有被 ARP 攻击! 

🔵 数据走向

网络排错, 你首先必须要知道网络数据是怎么走的. 
先到那个交换机, 再到那个核心交换机, 再到路由器那个口.... 
这也是 为什么必须先了解 企业架构了.. 就是让你了解这些东西的...

🔵 基本思路

1. 物理线路
2. 本机网络设置: IP 掩码 网关 DNS 
3. 测试路由/网关 畅通情况.
4. Ping测试 内网IP + 外网IP
5. 测试DNS  Ping 网址就行

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 TCP UDP ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 TCP/UDP 区别 ✔︎

TCP 在传数据前必须先建立连接. 也就是三次握手,四次挥手
TCP 连接建立后, 有数据重传、流量控制等等功能, 所以是非常可靠的.
TCP 协议能正确处理丢包问题, 保证对方接收到完整的数据.

UDP 在传输数据的时候是不管对方的, 只负责把数据发出去,不管对方是否收到.所以是不可靠的.

TCP 注重数据安全性, UDP注重传输速度! 各有优点

像DNS查询这种 要的就是速度,所以就是UDP

各种视频网站好像用的是HTTP协议,而不是UDP, 不太确定的就不要说出来!

当网络差的时候, TCP 会非常明显的能感觉到, UDP 的话影响小很多!

🔸 TCP 应用场景 ✔︎

SSH、HTTP、HTTPS....

iMessage 是端到端的加密. 绝对是TCP.

🔸 UDP 应用场景 ✔︎

• DNS  (53端口)
• NTP  时间同步,
• DHCP 路由器经常会广播自己的IP地址的,这里用的也是UDP
• SNMP 简单网络管理协议, 也是用的 UDP.

翻墙! 就是UDP的一个经典场景.
被墙是因为TCP被重置! 导致连接断开!一旦发送一个reset,起码会导致几分钟内不正常.
这时候用UDP, 由于UDP本身就是无连接的,没法被重置的!
那个 IPsec的VPN 好像用的就是 UDP,

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 OSI 七层 ✔︎🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 OSI 七层

应表会传网数物。也就是只记忆每层的第一个文字。

7. 应用层  data                    ➜ 规定数据传输协议         ➜ HTTP、FTP、SNMP、DNS、Telnet
6. 表示层  data ah                 ➜ 数据压缩/加密/格式化     ➜ JPEG、MPEG、ASCII
5. 会话层  data ah ph              ➜ 建立一个连接             ➜ NetBIOS
4. 传输层  data ah ph sh           ➜ 端口与端口的通信         ➜ TCP、UDP
3. 网络层  data ah ph sh th        ➜ 确定对方电脑的位置       ➜ IP  
2. 链路层  data ah ph sh th nh     ➜                          ➜ ARP、RARP
1. 物理层  data ah ph sh th nh dt  ➜ 把数据转为01这种电流脉冲 ➜ RJ-45


比如电脑 A 给 电脑B 发文件.  这个文件就是 data 

电脑A 首先会从 第七层到第一层  一层一层的加头.   
然后发送给电脑B
电脑B 收到消息 一层层的拆头, 先拆第一层的,... 拆到最后就能获取到 文件了.

就像快递. 发快递的会进行七次包装.  然后交给快递公司 最后收快递的拆7次包装就看到真实物品了.

🔸 TCP/IP 四层

4 应用层
3 传输层
2 网络互连层
1 主机到网络层

🔸 两者区别

TCP/IP 没分的那么细而已. 其实差不多的....

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 TCP 三次握手 ✗ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 个人感觉真没必要学! 你先说说有啥用.....

🔵 三次握手、四次挥手

★★★★★ https://github.com/jawil/blog/issues/14

🔸 手动描述1 
    「你瞅啥?」
    「瞅你咋地?」
    「来咱俩唠唠。」
    然后就唠上了。


🔸 生动描述2
    how  are you ?
                            fine.And you?
    Fine.

    俩人见面,客套完确认对方正常以后,就开始工作了。

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 DNS • CDN ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔵 DNS ✔︎

🔸 简介

    互联网其实是通过 IP 来通信的. IP不好记,所以就有了域名.
    自然也需要有服务器把 域名转换成 IP地址. 这就是DNS服务.

    DNS 是一个分层结构(树型结构).
    有一个最强大的 根域名服务器. 其他都是 子域名服务器.

    不是每个子域名服务器都知道 整个互联网的所有域名信息的.
    只有在子域名服务器不知道的情况下 会把这个dns请求 发给上一级的dns服务器.
    如果上级DNS服务器还是没有, 那就继续找更高级的,  直到根域名服务器.

    DNS 是一个缓存服务器.  会把各种域名缓存到自己服务器上.
    查过一次,以后一段时间内就不用再问别的域名服务器了.直接用缓存.
    正因为有缓存, 所以你新增/修改 域名解析才需要一定的时间来生效.
    应为很多DNS服务器缓存了你之前的旧的信息. 在DNS等缓这段时间内. 是直接用缓存的.
    你需要等缓存失效. 这时候DNS 服务器才会重新查询. 才能知道你修改后的域名信息.



    说起DNS 就不得不提电脑本地的 hosts 文件

🔸 Hosts 文件

    127.0.0.1	     localhost
    192.168.169.111  VM-C7
    23.105.192.96    mail.0214.help
    127.0.0.1        www.v2ex.com
    ......
    
    hosts 文件由很多行 IP 地址 + 域名 组成的
    
🔸 hosts 文件作用

    电脑要解析任何域名. 首先肯定会去查找hosts 文件.看看有没有符合的.
    有符合的 就按照 hosts 文件为准.
    没符合的 那就去查 DNS 服务器. 

    很多破解软件都会要修改 hosts 文件.
    软件其实后台会和某个网址进行通信, 来验证软件是否正版!
    在hosts 里把这个网址的IP 改成别的无效IP.  
    软件正版验证功能自然就不能联系上真正的验证服务器了.
    再进行其他的破解. 你就可以长期使用盗版了...


🔸 DNS 层次

    根域    ➜ .                        ➜ 一个点表示一个层级 
    顶级域  ➜ .com / .us / .cn         ➜ 国家/地区 使用的  
    次级域  ➜ qq.com                   ➜ 个人/公司 使用的 ➜ 一般买的就是这个域名
    子域    ➜ www.qq.com / xx.qq.com   ➜ 二级域名. xx 这个前缀你可以任意取! 只要你不嫌累
    主机名  ➜ h1.www.qq.com            ➜ 一般服务器会取个主机名. 方便区分其他服务器.


🔸 NDS 查询流程

    1. 浏览器输入网址 按下回车
    2. 电脑首先查看本地 缓存 以及 hosts 文件
    3. 如果没有缓存 hosts 文件里也没有符合项 那就通过网络 向 DNS 服务器查询.
    4. DNS 服务器有很多级别. 反正就是从低级到高级一级一级查,
    低级能查到就查到了. 低级的查不到就问高级的. 直到查到IP为止.
    5. 查到后 本地电脑会进行缓存, 下次访问就不用再查了. 能加快网速.



🔸 正向解析 反向解析

    千万不要以为反向解析很难... 其实非常简单的一个概念.

    DNS 正向解析 就是把 域名 ➜  IP
    DNS 反向解析 就是把 IP   ➜  域名


🔸 反向解析作用

    只要你在域名购买的地方设置了 cname 那么别人就能通过 DNS 查询你这个域名的IP.

    那么如果有人向查这个IP 的域名呢.这个默认是不支持的! 需要你设置过才行! 

🔵 CDN ✔︎

🔸 CDN 简介

    把文件缓存到全球的CDN节点,
    国外的人可以到最近的CDN 节点进行下载. 
    而不用跨国跑到中国的服务器下载, 实现网络加速.

    CDN 绝对不仅仅是缓存静态文件那么点用处.甚至可以实现负载均衡. 


🔸 CDN 种类

    网页加速、流媒体服务、文件传输加速、应用协议加速

    ⦿ 网页加速:
        缓存网站静态数据.  js / css / 图片 / 静态网页 
        用户从主站获取动态内容. 从CDN 获取静态内容. 从而加快网速

    ⦿ 流媒体服务    
        视频网站.  将视频推送到离用户最近的节点. 加快响应速度,减少主服务器压力.

    ⦿ 文件传输加速    
        CDN 下载速度非常快.

    ⦿ 应用协议加速
        比如SSL.  https 虽然安全了.但是由于要加密.响应速度会慢.
        好像可以用CDN 对SSL 进行加速



🔸 域名解析!

    首先你要知道域名解析是需要专门的域名解析服务器的! 也就是DNS服务器.

    DNS 服务器 你可以自己搭建!    当然一般都是用其他现成的免费的DNS服务器.

    DNS 服务器无数个, 
    你买了域名后, 是需要设置域名服务器的!!!
    你要指定一个域名服务器来对你的域名进行解析! 
    当然这步一般人家自动帮你完成了. 不要你手动设置. 但是你要知道这个.

    比如阿里云,有自带的域名服务器! 
    你买了阿里云的域名,会自动通过阿里的DNS服务器 对你的域名进行解析.
    如果你自己搭了个DNS服务器. 可以手动设置 用你自己的DNS服务器对你的域名进行解析.



🔸 CDN 工作原理

    DNS 域名服务器也有很多种.
    一种就是 CDN 域名服务器. 其实就是个自建的DNS服务器! 取了个名字叫CDN 域名服务器.

    比如你的网站想用阿里的CDN,
    那么首先必须把你网站的 域名解析服务器设置为阿里的域名服务器.
    这样阿里才能对你的网站进行各种CDN

    阿里会在这个 DNS服务器(CDN 域名服务器) 上进行各种设置.
    把请求引流到用户最近的缓存服务器上.



🔸 CDN 负载均衡 (Nginx)

    CDN 最重要的就是性能. 响应速度....

    所以一个 CDN 节点肯定是很多服务器组成的集群. 
    集群就需要 负载均衡 技术. 
    所有请求 首先全部到 一个负载均衡器.
    由负载均衡器 决定怎么对负载进行动态分配. 从而实现负载均衡.

    一般用 Nginx 实现负载均衡! 



🔸 CDN 动态加速

    CDN动态加速是指 在CDN的DNS解析过程中. 找出一条最优路由!从而加速用户访问.

    这个就涉及理由器知识.
    路由器能自动选出一条路线. 但是路由器选的路由不是最优的!
    就好像 我在中国访问一个服务器在中国的网站. 
    真实的网络数据可能是从用户浏览器出发,先到美国再回到中国.
    虽然也能访问这个网站. 但是网速会非常慢! 体验不好.
    这时候就可以用 CDN 加速.  能找到一条最优的路由路线,加快访问速度.

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 ARP ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 简介

路由器有ARP表 ➜  路由器上的 ARP 表是最全的!
交换机有ARP表 ➜  交换机上有 该交换机上所插设备的 ARP表.
电脑也有ARP表 ➜  电脑只存和自己有关系的ARP 缓存表; 这表是动态的.

为什么网络设备都有ARP表! 因为两个网络设备本质是通过MAC地址通信的!
ARP 是一个把 IP地址 解析成物理 MAC 地址的协议.  
ARP 是一个   IP地址 和 MAC 地址的映射表格.

比如我的电脑要访问谷歌网站.
首先我的电脑数据会到自家的路由器, 然后会经过网络上很多很多路由器. 最终到谷歌服务器.
我的电脑怎么到谷歌服务器. 这个路径是路由器选的.
但是我的电脑和我家路由器的通信、 
我家路由器和网络上路由器、
网络上路由器和网络上别的路由器 之间的通信其实是通过MAC地址实现的.
这也是 为啥ARP 这么重要.
这也是 为什么经常会听到 ARP 攻击.

🔸 ARP

本地的电脑A 向 本地的电脑B 发消息. 
已知B电脑的IP. 但是不知道B电脑的MAC地址

1.  A 查询 A电脑本机的 ARP 缓存表.

    • 如果能查到B的 MAC地址 
        ➜  直接进行数据传输.
    
    • 如果没查到B的 MAC地址 
        ➜ A 会发ARP广播, 来询问 B的MAC 地址 
            ➜ 然后B就会回复A 说我的MAC地址是 xxx, 于是A就有了B的MAC地址
                ➜  进行数据传输

🔸 ARP 广播

广播很好理解. 就像学校的广播.
学校要找某人,最快的方式就是用广播.
电脑也一样. 电脑A 要找电脑B. 也用广播. 
当然互联网是非常复杂的. 有很多广播的! ARP是一种广播,  DHCP是另外一种广播.
不同的广播有不同的作用.  我们这里用到的是 ARP广播

ARP 广播的左右就是找某台电脑的MAC地址.
你可以理解为 IP地址就像姓名  MAC地址就像手机号!
那么大个学校. 你要和某人聊天.只有名字是不行的. 得有对方手机号才行.

🔸 ARP 广播实例

比如家里有 A(手机) 、B(平板) C(电脑) 三网络设备; 
三个设备连在一个路由器下面, 并且都分配了IP地址.

现在 手机A 要给 电脑C 发数据.   底层的原理是怎么样的呢

首先 A 会发一个 ARP广播.  广播内容是这样的:  
我的名字叫 xx1 (A的IP地址) ; 我的手机号码是 yy1 (A的MAC 地址); 
我想知道名字叫 xx2 (C的IP地址) 的手机号码 (C的手机号码)

这个广播一发出去, 家里路由器下的所有设备 都会听到这个广播. C这位同学自然也听到了! 
通过广播 C 知道了A的IP 和 MAC地址. 也就是知道了A的姓名和手机. 
于是C 也回了条 ARP 广播. 广播内容是这样的:
我的名字叫 xx2 (C的IP地址) ; 我的手机号码是 yy2 (C的MAC 地址); 

C的广播 也是所有人都能听到的. A自然也可以. 
所以A就有了C的MAC地址, 也就是有了C的手机号.所以A就能给C打电话(传输文件了)

🔸 ARP 欺骗

还是那上面的例子.
A 发ARP 问C的 MAC地址.
正常情况下. 只有C 会回复的!  因为A 问的就是C的MAC地址. 而不是 B的MAC地址.

但是如果你的网络被黑了. 那么就是下面这种情况了.
还是 A 发ARP 问C的MAC地址.  
然后C 也回了ARP!   回信里带的是C的MAC地址.
事情没有结束! 这时候 黑客B 就出来搞事情了
B 冒充C的名字. 也回了个 ARP. 说我的名字(IP)也是C. 但是这个ARP回信里的MAC地址是B的.

那么好了 A 就懵了.
A 只知道 C 的名字.  想要弄到C的号码而已.
一开始来一个人(真实的C) 说我是C, 我的电话是yy2
然后又来一个人(冒充的C) 说我是C, 我的电话是xx3

这种情况下就比谁广播的频率高了!!!
电脑C 发广播是有限制的. 频率不能太高....
黑客么.... 无视校规.. 非常卖力的广播... 
结果就是 黑客赢了. 最终 A 认为 C的MAC 号码就是 黑客B回给它的,也就是B的MAC地址.
结果就是 A 一直以为自己是和 C 这个名字的人在聊天的. 其实是和B在聊天的.
黑客B也就能获取A的资料了... 

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 IT - Misc 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔵 Socks ✔︎

经常会听到这个东西.... 但是一直不知道到底是什么..

知道为什么一般的翻墙软件只能浏览器翻墙. 但是电脑的其他软件是不能翻墙的! 
因为平常的翻墙用的 http 代理.
如果你想要你电脑 所有的软件都能翻墙.那么你就要用 socks 代理.

socks 是一直网络程序要用到的接口. 
socks 代理协议 可以说是 http 代理协议的加强.
socks 代理不仅能对http进行代理, 而且能对所有对外的连接都进行代理. 没有任何限制! 
    这就是为什么邮箱翻墙软件只能浏览器翻墙. 有些翻墙软件能让所有软件都能翻墙.

🔵 邮箱常识 ✔︎

服务器两个端口 一个发件, 一个收件.

发件的协议只有一个: smtp 25 
收件的协议却有两个: pop3 110 imap 143

收件之所以有两个是为了解决 客户端 和 服务器邮件同步关系.

imap ➜ 有些人喜欢 两边都同步. 本地删了 服务器也删了.
pop3 ➜ 有些人喜欢 两边不同步. 本地随便折腾, 服务器邮件永远不删, 除非空间不够...

🔵 域名解析

A 记录 ➜ 网网址 解析到 网址
CNAME  ➜ 把网址 解析到 IP
MX     ➜ 邮箱设置.

🔵 AD / NFTS

AD: 控制电脑用的. 控制软件的安装等等.....

NTFS: 控制公司共享文件权限.

🔵 LDAP

轻量级目录权限访问, 一般用来控制员工权限的.

🔵 DHCP

就是给你分配IP地址的.

当然 这个ip地址是有 期限的. 
比如一个星期. 
只要你在一个星期内 用过电脑. 就会继续帮你保留这个ip.
如果你长期没开这电脑了 下次很可能就分到别的ip了.

DHCP 是通过客户端先发起的.
如果电脑设置了 自动获取dhcp.
那么电脑开机后 就会发一个 dhcp广播. 问谁是dhcp服务器.给我分个ip.

🔵 RAID ✔︎

🔸 RAID 简介

磁盘阵列. 要么为了扩容、 要么为了性能、要么为了数据安全. 没啥高深技术.
主要就是安装麻烦点. 要磁盘阵列卡! 设置也不简单...

• RAID 0  最高性能  ➜  一份数据 分割到几块硬盘上. 性能最高. 安全性最低. 
• RAID 1  最安全    ➜  一份数据 复制到几块硬盘上. 成本是做高的!  
• RAID 10 安全+性能
• RAID 5  最实惠    ➜  有着独特的算法.  磁盘阵列坏一块硬盘没关系, 换上新的就好.

🔸 磁盘阵列配置 (参考用) Raid Server Conf

重新建 raid 之后 就算硬盘是没数据的 也要先进行 sync 同步的. 算初始化吧

USB 开启启动选项是 擦了 USB 设备后才会出现的!!  你不插设备是不会显示的! 
插usb 之后 最好重启下才能看到 usb 启动选项.

SAS 配置 就是 Raid 卡; 也就是 连硬盘数据线的那块设备 

开机自检:
看 SAS 阵列卡 是否有检测到.
有的话 Ctrl+C 进入配置.

`VD` 虚拟磁盘
`PD` 物理硬盘
`HS hot spare` 热预备

先选 raid0 或者 raid1

然后 进去 选哪块硬盘到这个 raid!! 空格选硬盘
然后保存.

raid level → 支持的 raid 级别.

🔵 Ping

linux & windows 区别 :   Linux 需要 ⌃+C 手动终止.不然会一直ping。

🔸 原理 :

发送 ICMP 数据包到网络主机, 根据返回信息确定目标主机是否可访问
但这不是绝对的. 有些服务器或者路由器 为了防止通过ping探测到,
通过防火墙设置了禁止ping或者在内核参数中禁止ping

🔸 功能 :

- 确定网络状态
- 确定主机状态(开关机)?
- 确定 硬件 软件问题.
- 测试. 评估和管理网络

🔸 命令参数 :

- 命令格式:	ping \[参数] \[主机名或IP地址]

- 指定 次数 - c: Count  ➜ 	ping -c 10 172.19.16.16

- 指定 间隔 - i: interval   ➜ 	ping -i 3 172.19.16.16 ➜  默认一秒一个

- 指定 间隔+次数 ➜ 	ping -c 10 -i 3 172.19.16.16 ➜ 10次 每次间隔3秒

- Ping 网址得IP ➜ 	ping www.baidu.com  ➜ 得到 ip 地址

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 LINUX 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

🔵 Linux 运维关键技术

🔸 大规模集群管理

⦿ 常规集群:

    高可用性集群 HA 
    负载均衡集群 LVS
    分布式存储集群: GFS  Hadoop 

🔸 监控

性能、流量、负载等监控. 即使发现并解决问题.

🔸 故障管理

大规模集群 服务器死机,等等各种硬件故障是很多的...
设计的时候 就应该考虑到冗余, 这样能给工程师足够的处理时间.
谷歌好像同时死机 800台服务器. 服务都不会受到任何影响

🔸 自动化

比如装系统. 一两台电脑 可以手动搞定. 几千台呢.
比如整个公司服务器要求从 CnentOS6 升级到 CentOS7...

比如重启服务器! 
比如发现某个程序挂了.  那么可以首先尝试自动重启服务器.
非常简单的事情, 你非要手动来完成的话... 也是麻烦的...

反正自动化绝对是趋势! 也是最核心的工作. 也是个人价值的体现! 

🔸 开发能力

各种脚本都要自己写啊....
说不准还要你进行二次开发啊...
这个如果没有平台, 完全自学 那是非常非常痛苦的啊. 我是没学...

🔸 Misc

系统安装维护

各种软件安装配置

用户管理.

磁盘管理

系统状态检测

安全 和 备份

灾难恢复

网络管理

日志分析

防火墙

🔵 运维面试经

1 让面试者简单自我介绍下,大概了解其在校情况和感兴趣的技术方向

2 简单问问运维工作必须用到的一些操作系统、网络、数据库基本概念和原理,大多数是大学教材最最最最最最基础的内容

3 根据面试者的简历内容,针对性地问一些需要一定思考的问题,比如“如果项目出现xx情况,你会怎么处理”

4 对应岗位需求的技能如linux、mysql、apache等,试探得问得面试者所了解的最深程度到哪里;如果面试者自称精通xx语言,我会让他手写一段简单的代码

5 用一些开放性题目测试面试者的运维技术思维的广度和深度。 如:如果你负责运维的一个站点突然无法访问,你会从哪些地方定位问题所在;如果你维护的web服务器突然很卡,你怎么定位系统瓶颈所在;如果你家的网络突然上不了网,你会怎样定位问题所在。

6 闲聊,谈谈为什么想要做运维而不做xx

主要考察面试对象的逻辑思维,沟通能力,学习能力

对于初学者和有经验的略有不同的侧重点:对初学者,具体技能的要求不会太高,只要你能证明你确实是知道你的技能跟这个岗位匹配的,不是随便乱投简历的。

这个主要会问一些很基础的问题,比如你好歹能说出一些常见的linux目录吧,常见的linux命令吧。

然后重点是看这个人能不能培养,比如思维是否清晰,沟通有条理,学习能力是否强(个个面试个个说自己自觉能力强的,要让他举证,在举证过程中通过追问等观察)。

对有经验的人,以上的这些当然仍然重要,但可能很具体的命令啊什么的反而不会去问了。

看你做过什么事,做这些事的过程有什么难点和亮点,会不会总结改进提升。

问你一些你可能没接触过的事,看你分析问题的思路和角度

🔵 LVM ✔︎

� 🔸 简介

    LVM Logical Volume Manager.  逻辑卷管理器.

    安装系统的时候是需要分区的! 那么怎么分区呢!
    分大了浪费. 分小了不够用. 
    所以就有了 LVM 

🔸 LVM 作用

    ★★ 不损坏数据的情况下, 对磁盘大小进行修改. ★★
    
    就像windows 下的 C盘 不够用了. 一般来说只能重装系统.
    但是用了 LVM 技术的话. 就可以直接调整C盘大小. 就是这么厉害.
    当然 LVM 技术是 Linux 的; window ....


🔸 LVM 原理

    1. 首先把几块硬盘 通过软件组成一个 硬盘池! 
    2. LVM 对硬盘池 进行划分. 

🔵 代理服务器

假装是别人... 很有用的..

🔵 Telnet & SSH

这是国际4A广告公司 邓肯•光明 问的问题...
当然这问题只是对初级人员的.

Telnet 和 SSh 都是用于连接服务器的. SSH 安全. Telnet 不安全.

Telnet 主要用在 Windows 下.  还有一个网络设备上. 比如网管交换机

千万不要把 Telnet 当成 Windows 的远程桌面....

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 Linux 命令 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔵 ★★★★★

lsof -i:8080 查看那个进程占用了 8080 端口

lsof -i 查看哪些服务 在监听端口.

su 切换用户.

chmod 改变权限 chown 改变所有者 chgrp 改变用户组

🔵 Misc

强制删除所有文件 sudo rm -rf 文件名

tree

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 Linux 开机过程 ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 http://oldboy.blog.51cto.com/2561410/791273

🔸 1. BIOS 自检:

按下开机键后电脑必须先检测电脑硬件是否正常,BIOS就是检测这个的!
比如你笔记本摔了一下.能开机但是进不去系统.找不到原因,这时候你就需要进BIOS看看,
如果你的BIOS 中能看到HDD,那就说明你的硬盘硬件是没问题的!!!
如果你的BIOS 中没有 HDD 也就是BIOS识别不了你的硬盘!那么基本上你的硬盘就是挂了!
这时候就算你硬盘插下来拿到别的电脑上也是坏的,所以有经验的维修人员会直接告诉你硬盘挂了!
不是人家不仔细(你也许会要求人家硬盘插到别的电脑试试的),也不是人家忽悠你,这就是自信...

BIOS 还为计算机提供最底层的硬件控制.

BIOS  Basic Input/Output System.  是一段程序, 存放在单独一个芯片中.

🔸 2. MBR.GPT 引导

MBR:  Master Boot Record  主引导记录: 
    是指一个存储设备开头的512字节! 它包含操作系统的引导器个存储设备的分区表.

GPT:  GUID Partition Table 是新的分区方案, 解决了MBR的一些遗留问题.
    比如MBR 最大只能支持2T的硬盘大小; 比如MBR 最多只能分4个主分区

BIOS 会有默认的启动设备! 一般是硬盘,重装系统时需要手动设置成光盘/USB 才行.
BIOS 会搜寻BIOS里设置的第一个存储设备中的 MBR 中的第一个分区的引导器.
比如你设置第一个启动设备是USB, 那么电脑开机就不会去找硬盘里面的系统,而是找U盘里面的系统.
一个U盘是可以安装好多个系统的! (U盘完全可以看成小容量的硬盘!)
BIOS 会找U盘中 MBR里的第一个分区的引导器,这里就可以选择你要启动U盘中的那个系统.
选择了某个U盘中的系统后就会读取分区表,然后就能加载操作系统了! 

🔸 3. Grub 引导菜单

电脑开机,BIOS会读取 引导介质(硬盘/USB/光盘)上最前面的512字节,主引导记录(也就是MBR)
MBR只能存储一个系统的引导记录, 用MBR来引导的话一个硬盘只能装一个系统.
如果你要在一个硬盘中安装多个系统,那么你需要更加灵活的引导加载程序

由于BIOS芯片能力有限! 只能访问极少量的数据. 而引导程序一般来说不小的!
所以大部分的引导程序会分成两部分, 也就是系统其实是分两个阶段进行引导的.
第一部分是主要的引导程序,安装在MBR中. 第二部分引导程序就在硬盘的别的位置的!

BIOS会读取 MBR 中的第一个阶段的主引导程序, 主引导程序中有次引导程序在硬盘中的具体位置.

Grub 就是引导程序的第二部分! Grub 能提供 高级的GUI 界面!  而不是冷冰冰的命令行界面.

🔸4. 加载内核kernel

电脑操作其实可以分成两部分: 你能看见的(用户空间) + 你看不见的(内核空间)! 
你能看到的: 各种GUI 图形界面, 鼠标的移动 等等...
你看不见的: 内核操作, 其实你的任何图形操作最终都是对内核的操作.图形只是方便你操作内核而已!

Linux 内核就是让 Linux这个操作系统运行起来的核心代码!
就像人少胳膊少腿都是不行的, 这些核心组件一个都不能少.
但是人少点衣服什么的 完全是没问题的! 就像系统上的 QQ等软件.

🔸5. 启动 init 进程

Linux下有3个特殊的进程:  idle进程(PID=0)、 init进程(PID=1)、 kthreadd(PID=2)

idle 是系统创建的第一个进程. 唯一一个不是由Kernel 产生的进程. 完成加载系统后,演变为进程调度、交换...

init 是idle通过Kernel创建的. 是系统中所有其他进程的祖先进程.
init 是linux 内核启动的第一个用户级进程
Linux 中所有的进程都是init进程创建并运行的! 
首先Linux内核启动, 然后在用户空间启动init进程,再由init创建出其他所有系统进程.
在系统启动完成后,init将变为守护进程,监视系统其他进程.

kthreadd 的任务就是管理和调度其他内核进程.

🔸6. 读取 etc/inittab 配置文件,

当init开始运行,它通过执行一些管理任务来结束引导进程,
这些任务都记录在 /etc/inittab 文件中
例如检查文件系统、清理/tmp、启动各种服务以及为每个终端和虚拟控制台启动getty,

在系统完全起来之后,init为每个用户已退出的终端重启getty(这样下一个用户就可以登录)。
init同样也收集孤立的进程:当一个进程启动了一个子进程并且在子进程之前终止了,这个子进程立刻成为init的子进程。
对于各种技术方面的原因来说这是很重要的,知道这些也是有好处的,因为这便于理解进程列表和进程树图。

🔸7. 其他

• etc/rc.d/sysinit 
• etc/rc.d/rc  (etc/rc3.d/*)
• mingetty

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 进程 & 线程 ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 通俗解释

开个QQ,开了一个进程;  开了迅雷,开了一个进程。

QQ里: 文字聊天功能是线程、语音聊天功能是线程、视频聊天功能也是线程...

一个进程管着多个线程, 线程可以看成是进程的细分

通俗的讲:“进程是爹妈,管着众多的线程儿子”...

🔸 正规解释

运行程序时候. linux 会给程序创建一个特殊的环境.
这个环境包含程序运行需要的所有资源.来保证程序能独立运行.不被别的程序干扰. 这个环境就是进程.
系统给每个进程一个唯一五位数的数字跟踪程序的运行状态. 这个就是 pid 或者进程ID. 

🔸 深入

任何程序/操作都需要CPU. 但是CPU只有一个. 
虽然CPU运行速度非常非常块. 但是单核CPU 一次只能运行一个任务.
要执行多个任务(电脑开多个程序)就要轮流使用CPU!!

比如QQ这个程序. 给你10ms的CPU使用时间. 然后让给别的程序用.
等QQ这10ms使用完后. 就把那个状态保存下来. 等下次轮到QQ使用CPU.再接着使用. 这个状态就是上下文.

先加载程序A的上下文,然后开始执行A,保存程序A的上下文,
调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。。

进程: = CPU加载上下文时间 + CPU执行时间 + CPU保存上下文时间

进程和线程都是CPU工作时间段的描述,不过是颗粒大小不同:进程粗.线程细

单核CPU是所有程序轮着使用的.每次只能给一个进程使用.

★ 进程是系统分配的.是cpu资源分配的最小单位 ★
★ 线程是程序分配的.是cpu调度的最小单位     ★

你能控制线程但是控制不了进程.进程(不同程序)之间通信比较困难.


⦿ 前台进程
    默认用户创建的都是前台进程. 从键盘读取数据.把结果输出到显示器.
    程序运行在前台时候. 程序没执行完毕 不能输入其他命令.
    即使程序需要运行很长时间,也必须等待程序运行结束才能输入其他命令。

⦿ 后台进程:
    后台进程的优点是不必等待程序运行结束就可以输入其他命令。
    创建后台进程最简单的是 在命令尾部 加& 符号

⦿ 父子进程
    每个进程都会包含两个进程. 当前进程 pid 和 父进程ppid
    由用户运行的大部分命令都将 Shell 作为父进程,使用 ps -f 命令可以查看当前进程ID和父进程ID。

⦿ 常驻进程
    系统进程一般是常驻的. 以root权限运行在后台.可以处理其他进程的请求
    常驻进程通常运行在后台,等待指定事件发生,
    例如打印进程是一个常驻进程,它会等待用户输入打印相关的命令并进行处理。

🔸 命令

⦿ 查看进程
    • ps    ➜  查看进程: 包括前台和后台的
    • ps -f ➜  查看更多信息. full 的意思

⦿ 结束进程 • 结束前台进程 ➜ kill 命令或 Ctrl+C 组合键来结束进程 • 结束后台进程 ➜ ps 命令来获取进程ID ➜ kill 命令杀进程

🔸 ps 实例分析

➜  ~ ps -f
UID   PID  PPID   C   STIME   TTY           TIME CMD
501 58288 58287   0  7:42下午 ttys000    0:01.60 /bin/zsh
501 64104 64103   0  9:48上午 ttys002    0:00.61 /bin/zsh
501 12990 12989   0  五03下午 ttys004    0:00.57 zsh

    UID:   进程所属用户的ID,即哪个用户创建了该进程。
    PID:   进程ID。
    PPID:  父进程ID,创建该进程的进程称为父进程。
    C:     CPU使用率。
    STIME: 进程被创建的时间。
    TTY:   与进程有关的终端类型。
    TIME:  进程所使用的CPU时间。
    CMD:   创建该进程的命令。

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 ❤️ 性能调优 ✔︎ ❤️ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 https://www.gitbook.com/book/lihz1990/transoflptg/details

🔸 简介

这是一个非常大的话题... 
首先最好问清楚到底是哪方面的调优 系统层面, 还是软件层面, 还是网络层面....

一般来说就这么几块: IO瓶颈 / CPU 瓶颈 / 内存瓶颈 / 程序问题

🔸 Linux 简单调优

• 改SSH端口, 禁止 root 远程连接.
• 精简开机启动服务.

🔸 为什么性能调优

自己电脑用着慢, 你会不爽. 服务器也一样! 
服务器慢的话影响的就不仅仅是你一个人了! 而是所有的用户.

而且运维的话. 性能调优是本职工作.就算你不会.也起码要有了解...

当然不要把这个看成非常难的事情!
人家面试问你的 只要你简单的会就可以了. 
往简单说升级硬件. 精简服务
往难的说 那就没底了...

Linux 有非常多的工具来检测机器缓慢的原因. 
用这些工具就能确定 为什么慢了. 也就可以有针对性的进行优化了.

🔵 系统瓶颈: top

%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

TOP 下面两个参数非常关键 

★ 99.3 id  ➜  idle  CPU空闲时间, 如果这个太低 说明CPU 不够. 
★ 0.0  wa  ➜  等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;
                cpu 和 硬盘是有互动的.  如果CPU 想要某些数据来计算, 但是硬盘太慢, 
                这时候就只能等硬盘先读取完成, 这就会导致 wa 参数的升高.

🔵 内存瓶颈 free + vmstat

✘✘∙GCE ~ ➜ free
            total        used        free      shared  buff/cache   available
Mem:        1737408     1380424      159752     28944      197232      164948
Swap:             0           0           0

查看内存是不是瓶颈, 虽然也能用 top, 但是用 free 更加直观. 

free 是没有显示真实可用内存的,要自己算. 

系统实际可用内存 = free + buffer/cache 

Linux 系统是你有多少内存就会尽量全部充分利用. 也就是 只要有内存闲着就拿来缓存! 
所以Mac的话 8G的内存开机后. 你会发现 用了1G 但是缓存却高达 6G  可用(这个不是实际可用!) 1G 
但是这绝对不代表 你的内存不够用!!! 
开机后 如果你打开了 ps 这个本身软件会占4G内存. 那么系统就会从6G的缓存中 拿出4G来给PS用,
于是就变成了 已使用 5G 已缓存2G.  还有1G 的可用
这时候真实的可用内存是 2+1 = 3G...

如果内存真的是瓶颈, 那么你会感觉系统非常非常卡. 
因为绝大多数的电脑 瓶颈基本上都是在硬盘的! 
如果你内存不够用, 那么就会把硬盘当成内存! 内存的读写操作是非常频繁的! 
本来就忙的要死的硬盘.再被内存这么一折磨.几乎就挂了. 也就非常非常卡了.

要进一步分析内存使用情况, 可以用 vmstat . 实时监控系统内存、虚拟内存的变化.

🔸 网络调优

TCP/IP 这个真要研究那么真的得看厚厚的好几本书!
一般人当然用不上... 就算网管也很少用的上这方面的专业知识..
所以对 TCP 三次握手这种知识 我是选择无视的, 有点了解就行...

网站一般也就设置下  keep-alive 参数.   time_wait 超时参数 也就差不多了..

还有 UDP 的话. 可以设置下 MTU 最大传输单元...
(传输单元可以看成公交车. 公交车越大 当然载客量也就越多了...)

🔵 进程分析

如果你用 top 发现某个进程导致系统变慢.
那么就需要分析这个进程, 继续查询问题.

进程分析有两个好用的工具: ptack 和 pstrace 
咱也不是搞开发的. 暂时不管这个...

🔵 程序代码优化

不是硬件问题, 那就是软件问题了. 一般肯定是程序问题...

开发人员BUG 、算法 等等什么的...


🔸 性能测试

    用专业的工具来测试. 
    比如 数据库的话 有个啥软件能模拟用户请求. 进行测试.


🔸 算法优化

    算法非常重要! 
    就像我的web 之前的 10000行. 优化后到 1000行... 
    这10倍的性能.你想通过别的方式优化那是非常非常难的!

🔵 Misc

🔸 数据库调优

数据库的选择: SQL / NoSQL 

数据库引擎的选择:  

SQL 查询语句优化

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 软•硬 链接 ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 基础 1

首先你要知道 文件在硬盘中其实是分成两部分存储的!
    • 部分一:  inode部分: 文件名 + 各种文件属性(比如 读写权限...); 
    • 部分二:  文件真正内容.

    至于为什么要分两部分. 我的理解其实是为了文件搜索.
    当然文件搜索也分文件名搜索 和 文件内容搜索.
    文件内容搜索太复杂了. 我们这里只说文件名搜索.

    既然要从整个硬盘中搜索一个文件出来.
    那么肯定是要读一遍整个硬盘的所有文件喽.
    硬盘的文件数量... 仔细算真会吓死你的.. 反正就是非常非常多.

    加上硬盘本来速度就不快! 搜索文件这种对磁盘频繁读写的操作 按理应该非常慢才对.
    但是如果你用过文件搜索的话. 其实搜索速度还是蛮快的. 为什么呢? 
    这就是把文件 分成两部分的好处. 文件名(文件属性)  + 文件真实内容.
    其实系统硬盘有个专门的地方用来存文件名的! 这个地方不大, 
    因为任何文件中,文件名占的大小那是非常非常小的. 文件内容才是真正的大头.
    比如1T的硬盘. 我只要分出100M 大小来存放文件名信息就足够了.
    所有的文件名都集中在硬盘的一个地方. 这样磁盘也方便硬盘读取.
    文件搜索的话只要搜索这100M 就可以知道有没有这个文件了! 

🔸 基础 2

inode信息中有一项叫做"链接数",记录指向该inode的文件名总数.
链接数是x 就代表有x个文件名.同时指向这个内容.
新增/删除 文件名会影响这个数值.
当这个值减到0,表明没有文件名指向这个inode,系统就会删除这个文件.

一般情况: 文件名 和 inode号是一一对应的. 每个inode号对应一个文件名.
linux 允许多个文件名指向同一个inode号, 意味着: 可以用不同的文件名访问同样的内容

🔸 软硬链接

软链接 ➜  windows 的快捷方式, 
硬链接 ➜  类似文件复制,但不是复制.

⦿ 如果一个文件 创建了软链接 

    删除软链接 对 源文件没影响.
    删除源文件 那么软链接也就失效了.

⦿ 如果一个文件 创建了硬链接

    删除源文件 对硬链接无影响!!!
    删除硬链接 对源文件无影响!!!

    这就是为什么 硬链接这个功能 经常被用作系统的快照!
    系统真的要备份,那是非常慢的, 而且也占空间!
    系统快照的话,非常块, 因为不是真正的备份!  
    虚拟机快照功能 使用的就是类似硬链接的原理!!! 

    至于为什么删源文件对硬链接没影响. 这就涉及了Linux 删除文件的机制了.
    详细的自己看 Linux 删除文件原理去.
    简单说 如果一个文件没有硬链接, 那么把源文件删了就是真的删除了.
    如果一个文件有硬链接, 那么你删除了源文件.其实真正的文件还在的.
    同时删除源文件+硬链接 才能真正删除一个文件.

🔸 软硬链接正规区别

在Linux系统中,链接分为两种:  硬链接(Hard link)   软链接(Symbolic Link)


①默认不带参数的情况下,ln创建的是硬链接,带-s参数的ln命令创建的是软链接。

②硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号,与源文件不同,

③ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。

④删除软链接文件,对源文件和硬链接文件无任何影响。

⑤删除文件的硬链接文件,对源文件及软链接文件无任何影响。

⑥删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。

⑦同时删除源文件及其硬链接文件,整个文件才会被真正的删除。

⑧很多硬件设备的快照功能,使用的就是类似硬链接的原理。

⑨软链接可以跨文件系统,硬链接不可以跨文件系统。

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 环境变量 ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 什么是环境变量

环境变量的概念非常重要.安装软件经常涉及到!!!

首先这是一个系统变量.  变量的话就可以在终端里面 用 echo 命令来显示变量内容.

~ echo $HOME   ➜ /Users/v
~ echo $TERM   ➜ xterm-256color
~ echo $PATH   ➜ /usr/local/sbin:/usr/local/sbin:/Users/v/.autojump/bin:......

$PATH 就是环境变量! .一堆文件夹的集合而已. 用分号隔开.

🔸 环境变量作用

环境变量作用就是你告诉系统. 我的某个软件安装在哪里了! 

其实 Linux 中 有几个文件夹是专门用来安装软件的.
一般正规的软件. 默认都是安装在哪些文件夹内的.
这时候你是不需要设置环境变量的.

但是如果你手动安装软件. 那么就会问你软件要安装到哪里.
这时候如果你选的不是系统常用的软件安装路径. 
而是自己手动指定了一个路径. 比如说安装到桌面.
当然这也是没问题的. 照样能用. 但是会麻烦点. 

简单说 ping 这个命令. 是系统自带的. 安装路径是 /sbin/ping
/sbin 是系统默认的软件安装目录. 
所以你在终端可以直接 运行 ping 命令

但是如果你把系统自带的ping 删掉. 然后自己再安装一个ping.
但是这个 ping 的安装路径改成 桌面了. 
那么这时候你还是可以执行 ping 命令.  但是必须用 全路径 
/Users/v/Desktop/ping 23.105.192.96  而不是 ping 23.105.192.96
/Users/v/Desktop/ping 35.194.128.92  而不是 ping 35.194.128.92
因为系统要执行某个命令(比如ping)默认是不会搜索桌面.
如果你想要系统执行某个命令的时候 去搜索桌面文件夹.
那么把桌面文件夹 加到环境路径中就可以了.
然后哪怕你的ping 命令是安装在桌面的. 你也可以用 ping 35.194.128.92  

🔸 设置环境变量

环境变量是在shell的配置文件中改的.
shell 有很多种!! 不同的shell  对应不同的配置文件!!!
bash:    编辑 ~/.bashrc 这个文件
csh:     编辑 ~/.cshrc  这个文件
zsh:     编辑 ~/.zshrc  这个文件

🔸 Misc

终端要在任何位置都能运行某个命令,这个命令就必须在某个文件夹中, 环境路径就是管理这些文件夹的.

如 ls 在 /usr/bin 中; reboot 在 /usr/sbin 中

如果你自己安装了一个 brew 命令: 
    不设置环境变量的话: 只能cd到那个命令的安装位置 才能执行brew
    有设置环境变量的话: 任何位置都能 执行 brew 

🔵 sysvinit ➜ systemd ✔︎

🔸 参考: 

    sysvinit  ➜  https://www.ibm.com/developerworks/cn/linux/1407_liuming_init1/index.html
    UpStart  �➜  https://www.ibm.com/developerworks/cn/linux/1407_liuming_init2/index.html
    Systemd   ➜  https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html


🔸 简介

    CentOS 6/7 最大的区别是 初始化技术的不同.

    Linux 系统启动: BIOS ➜ 进入 boot loader ➜ 载入内核, 进行内核初始化 .
    内核初始化第一步就是启动 pid 为 1 的init 进程. 
    init 进程是系统的第一个进程. 负责生成其他所有用户进程.
    init 进程是其他进程的祖先. init 非常独特,能完成其他进程无法完成的任务.
    下面我来来说说三个主要的 init 系统: sysvinit、upstart、systemd...

    SysVinit 运行非常良好,概念简单清晰。它主要依赖于 Shell 脚本,这就决定了它的最大弱点:启动太慢。
    在很少重新启动的 Server 上,这个缺点并不重要。

    而当 Linux 被应用到移动终端设备的时候,启动慢就成了一个大问题。
    为了更快地启动,人们开始改进 sysvinit,先后出现了 upstart 和 systemd 这两个主要的新一代 init 系统。
    Upstart 已经开发了 8 年多,在不少系统中已经替换 sysvinit。
    Systemd 出现较晚,但发展更快,大有取代 upstart 的趋势。


    ⦿ 系统初始化技术

        sysvinit ➜ CentOS_5 ➜ 主要靠shell 脚本. 按顺序执行.启动太慢
        upstart  ➜ CentOS_6 ➜ 优化大量 sysvinit 脚本.加快系统初始化时间. 
        sysremd  ➜ CentOS_7 ➜ 提高启动速度. 

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 端口转发 • SSH ✔︎ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

        https://www.yanxurui.cc/posts/tool/ssh-port-forward/

🔸 简介

有些人面试会要你说 如何把本地80端口的请求转发给8080端口. 
虽然只要用 iptable 就可以实现, 但是这个真的有用么.

Iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp –dport 80 -j DNAT -to-destination 192.168.2.1:8080

🔸 SSH 简介

搞IT的肯定知道 SSH.... 
绝大多数人用 SSH 只是为了登录服务器. 事实上 SSH 的功能远远不止如此! 

SSH 可以翻墙! 它可以作为 socks5 代理服务器.
SSH 还能帮你跳过堡垒机, 让你访问本来无法直接访问的服务器!

🔵 本地端口转发

🔸 简介

    服务器一般只允许从特定的IP(堡垒机), 通过SSH登录.  这样虽然增加了服务器的安全.
    但是我们就得先 SSH 到堡垒机, 在堡垒机上再SSH到服务器.
    一般的操作也就忍了,但是如果要传个文件到服务器就麻烦了..
    先scp到堡垒机... 再scp 到服务器..

    一般的话 堡垒机和服务器肯定是在同一个内网的.
    堡垒机有两个网卡: 内网IP + 公网IP
    服务器有一个网卡: 内网IP 

    所以如果你是不能直接登录服务器的. 必须先登录跳板机,然后在跳板机上登录服务器.


🔸 实例

    这里我们假设三台电脑
        • 本地PC ➜  
        • 跳板机 ➜ 内网  172.16.1.2 外网 35.194.128.92
        • 服务器 ➜ 内网  172.16.1.9 

    ⦿ 步骤1  本地电脑执行
        
        ssh -Nf -L 1993:172.16.1.9:22 [email protected]

            -L 表示本地端口转发.
            -N 表示不执行命令.  平时ssh进去的话, 会直接弹出一个界面.你可以输入命令.
            -f 表示在后台运行.

        然后 ssh 就会在后台 监听本地的 1993 端口. 并把所有发到 1993 该端口的数据 
        通过 35.194.128.92 这个跳板机, 转发到172.16.1.9上的22端口。

        这就是本地端口转发 ➜ 本地开一个 1993 端口. 通过跳板机 转发给服务器.



    ⦿ 步骤2  本地电脑执行
        
        ssh -p 1993 root@localhost

        这个命令就是登录服务器的命令了!
        等价于在 跳板机上执行 ssh [email protected]


        如果要用 scp 传输文件:
        scp -P 1993 out.txt root@localhost:/tmp/hahah.out


    ⦿ Misc 
        
        通常会有多个需要通过跳板机登陆的目标服务器,这时就需要在本地监听不同的端口。

        端口转发不仅能够转发ssh的数据,它可以转发任意tcp流量,比如http,mysql等等。

🔵 远端端口转发

🔸 需求

    如何在家里登录到公司某台内网服务器呢.
    或者说 公司如何登录家里的某台内网电脑呢.
    注意 不管是家里的电脑 还是 公司的内网服务器. 都是没有公网IP的! 

    想要实现这样的功能, 那你就需要一台有公网IP的服务器,作为中继!


🔸 步骤简介

    ⦿ 中继服务器 

        修改 sshd_config: 将#GatewayPorts no改为GatewayPorts yes


    ⦿ 公司内网服务器

        ssh -Nf -R *:1993:localhost:22 [email protected]

        这个命令会在中继服务器 [email protected] 上监听 1993端口.
        任何发给 中继服务器1993端口的信息 都会转发到本机的22端口!


    ⦿ 家里电脑

        ssh -p 1993 [email protected]
        这样就能登录 公司的服务器了. 
        这的root是公司内网服务器的用户. 而不是 中继服务器的用户.
        因为所有发给 23.105.207.175  1993 端口的数据. 都转发到 公司内网的 22端口了.

🔵 动态端口转发 ( 翻墙 )

🔸 需求

    买了 vps 后用 ssh 搭建一个 socks 代理服务器来翻墙是最简单的了.
    而不是搭建ss,  甚至是多人的 ssr...
    http 代理 只能让浏览器翻墙. 
    socks 代理 能让所有程序翻墙.



🔸 实例

    vps: 35.194.128.92

    ⦿ 一:  本地执行 
            ssh -Nf -D 1080 [email protected]
            -D 动态端口转发.  监听本地 1080端口.

    ⦿ 二:  本地网络配置
            Mac ➜ 网络 ➜ 高级 ➜ 代理 ➜ socks 代理 打勾 
                • socks proxy server 填写  127.0.0.1
                • 端口填写 1080

    ⦿ END 
            然后就能用谷歌了. 好像很慢...
            用这种方式的话 所有流量都会走 socks 代理.
            如果你只要浏览器翻墙再另外折腾了...

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 Linux - Misc 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔵 Load Average 系统平均负载 ✔︎

Mac 安装了 安装了iSTAT的话, 你会发现 CPU 信息里面有个 load average 
当然查看平均负载最简单的是用 top 命令! ➜  Load Avg: 3.12, 2.96, 2.70

🔸 系统平均负载

    特定时间间隔内 运行队列中 (在cpu上运行 或者等等运行多少进程) 的平均数.
    反正就是和CPU 有关的...


🔸 平均负载 人话

    单核CPU:

        平均负载 <= 1 ➜  系统处理进程会非常轻松. 也就是负载很低! 
        平均负载 >= 3 ➜  系统就会很忙!  
        平均负载 >= 5 ➜  单核的极限了, 负载太高了! 

    Mac 13' 寸 笔记本一般是双核. Mac 15' 寸 笔记本一般是四核. 我们拿双核的来举例. 

    如果双核 Mac 的负载 小于2  ➜ 说明电脑压力非常低.
    如果双核 Mac 的负载 2-6    ➜ 压力正常...
    如果双核 Mac 的负载 大于10 ➜ 服务器压力太高,要么换CPU,要么少开软件...


🔸 平均负载分析
        
        终端 ➜ top ➜  Load Avg: 3.53, 3.05, 2.75
        三个值. 分别是 1/5/15分钟的平均负载.
        一般以5/15分钟为准.


🔸 正常负载

    到底负载高于多少就说明负载有问题呢. 两个法则.

    • 多少核心就多少负载.
        比如两个核心的处理器. 平均值就不应该高于 2. 
        看了眼我的双核笔记本... 居然有 3.5 ... 
        看来不能一边开直播 一边写代码.. 一边浏览器了... 

🔵 Linux 文件删除原理 ✔︎

Linux 通过Link数量来控制文件删除.当一个文件不存在任何链接的时候,这个文件才会被删除.

每个文件都会有两个 link 计数器: i_count、i_nlink

i_count 的意义是当前文件使用者(被调用)的数量. ➜  可以理解为 内存引用计数器
i_nlink 的意义是介质链接的数量(硬链接的数量). ➜  可以理解为 磁盘引用计数器.

当一个文件被某一个进程引用时,对应的 i_count 就会增加.
当一个文件被创建硬链接的时候,对应的 i_nlink 就会增加.

rm 删除命令,实际是减少磁盘引用数! 也就是 i_nlink 的值.
如果文件没有其他的硬链接,你只要删除一次就可以把文件删除.
但是!如果你的文件正在被调用,比如你用vi在编辑这个文件.
这时候你是可以删除这个文件的, 但是你会发现,你打开的vi窗口没有自动关闭!
其实当你打开(调用)某个文件的时候, 该文件的 i_count 数量会增加(不为0)!
这时候就算你用rm 删除命令.把 i_nlink 的数量删到0. 系统并没有真正删除该文件.
只有当 i_nlink 和 i_count 都是0的时候! 文件才会被真正删除.
这里也就是你要退出vi后, 系统才会真正删除这个文件.

现在我们不说调用. 只说删除.
执行rm操作删除的文件是否可以被找回呢!?
rm 操作只是将文件的 i_nlink 减少了, 或者说置0了, 实际就是将文件的inode的删除了!
但是文件其实是两部分组成的 inode + 真实数据.
rm 并没有删除文件实体(真实数据).
如果执行rm后, 立刻停止电脑, 数据是可以被找回的. 
如果执行rm后, 你还对磁盘进行频繁的读取,那么新的数据会很可能会覆盖掉你旧的真实数据.
这时候文件会被真正的回收了,这时候神仙也没办法了.

🔵 Linux 0-6 运行级别的各自行义 ✔︎

0:关机
1:单用户模式
2:多用户-无网络服务.   
3:多用户-完整的多用户模式. 有网络支持(文本模式,工作中最常使用的模式)
4:保留,未使用
5:多用户-完整的多用户模式, 有网络支持 (X-Window 图形界面模式)
6:重新引导系统,即重启

运行级别: 操作系统当前正在运行的功能级别, 
能让一些程序在某个级别启动,而在另一个级别不启动

Linux 的登录模式有0-9共十种.
Unix 一般只有1-6是有效的.不同的级别有不同的功能.

/etc/rc.d/ 中放着各种脚本,每个运行级别有对应文件夹,
你把脚本放到哪个文件夹中就会在相应级别运行该脚本
/etc/rc.d/init.d 
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d

标准的Linux 运行级别是 3 或者 5
模式3 就是多用户文本模式. 模式5就是 GUI 图形模式.

在终端中,我们可以键入 init <运行级别> 来切换运行级别来达到某种目的,
如输入 init 0 使系统关机,输入 init 6 使系统重启.

默认的运行级别可以通过修改 /etc/inittab 文件来改变,
该文件在接近开头的地方有一行与下面相似: id:5:initdefault:
把这一行中的数字改成你想要的运行级别。所做改变在系统重新引导之后才会生效。

不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
例如,如果丢失了root口令,那么可以让机器启动进入单用户状态来设置。
在启动后的lilo提示符下输入:   init=/bin/sh rw   
就可以使机器进入运行级1 ,并把root文件系统挂为读写。
它会跳过所有系统认证,让你使用passwd程序来改变root口令,然后启动到一个新的运行级

🔵 脚本中单引号、双引号、不加引号的简单区别;�✔︎

脚本用变量的时候特别要注意 引号!

单引号: 所见即所得,单引号里面的内容会一模一样输出, 你引号里面写的什么就输出什么!

双引号: 双引号里面如果有变量,那么输出内容 会变成变量的内容.而不是引号里面的内容.

无引号: 
    不会将含有空格的字符串视为一个整体输出, 
    如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,
    如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。

例子: 
echo '`date`'  ➜  单引号时看到啥就显示啥  ➜  `date`
echo "`date`"  ➜  双引号里面的变量,会先把变量解析成具体内容在显示 ➜  Sat Oct 29 18:02:59 CST 2011
echo `date`    ➜  对于连续的字符串等内容一般不加引号也可,加双引号一般比较保险 ➜ Sat Oct 29 18:03:08 CST 2011

🔵 Linux 常识

Linux 文件系统中. 每个文件用 inode 节点来标识.

整个硬盘分为4个部分: 引导块. 专用块. i节点表块. 数据存储块.

Linux 系统分区时, 必须要有: 文件系统分区 & 交换分区.

将前一个命令的标准输出作为后一个命令的标准输入. 叫做管道.

🔵 Linux 文件目录

  • /
  • root,存放root用户的相关文件
  • home,存放普通用户的相关文件
  • bin,存放常用命令的目录,如vi,su
  • sbin,要具有一定权限才可以使用命令
  • mnt,默认挂载光驱和软驱的目录
  • etc,存放配置的相关文件
  • var,存放经常变化的文件,如网络连接的sock文件
  • boot,存放引导系统启动的相关文件
  • usr,安装一个软件的默认目录,相当于windows下的program files

🔵 包管理器

方便安装、升级、卸载 等等操作..

🔵 文件查找

🔵 编译安装

1、./configure 2、make 根据makefile文件,构建应用程序

3、make install 复制文件到相应路径

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 三剑客 精简 ✗ 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 简介

awk 作用: 把数据分段!!!

🔵 awk

🔵 LVS 是什么 有什么用 有几种工作模式, 分别说说原理.

  1. lvs/dr调度的过程

客户端请求发送给LVS ==> LVS接受请求后根据调度算法选出后台服务器 ==> LVS将报文目标MAC地址修改为该服务器 ==> 服务器处理请求后直接返回给客户端

🔵 Keepalived 是什么: 有什么用: 高可用实现的原理.

🔵 基本命令

网络 + 进程 + 磁盘

🔵 Linux 运维 网络监控是必须的, 所以没工具也要会看 网络流量方面的!

🔵 磁盘的外部结构,内部结构,以及工作原理

🔵 磁盘的磁头读写数据的原理. 什么是扇区,磁道 柱面

🔵磁盘存储数据的最小单位是 某业务数据为10-100M的视频文件, 如何配置单位大小

🔵 一个硬盘最多可以分多少个主分区, 为什么

🔵 inode http://www.ruanyifeng.com/blog/2011/12/inode.html

🔵 Crontab 的作用.以及注意点

crontab 定时执行命令!

🔵 Lunux 如何实现 系统集权分治的权限分级精细管理

🔵 服务器账户日志审计的5种解决方案

🔵 什么是文件系统, 说出你知道的文件系统.

🔵 nfs 网络文件系统的工作原理.

🔵 ext2 文件系统的原理.

🔵 文件系统的种类

🔵 什么是 rsync 有什么生产环境应用

🔵请描述ssh免密码验证的3种分发控制管理解决方案实现过程。

🔵你了解过有哪些批量部署、分发管理服务器解决方案(13种解决方案)

🔵 24.生产场景下,DELL R710服务器 6块600GSAS盘,计划装系统部署mysql从数据库提供读服务。请你描述从做RAID开始到安装系统后提供业务使用前的整个思想及操作过程。

🔵25.使用linux 命令模式或rescue(救援模式)修复/etc/fstab。

🔵26.root密码忘记了,想重新获取root密码怎么做?

🔵27.请问如何优化linux系统。

🔵 网络

🔵 查看进程

🔵 防火墙

🔵

🔵

28.一台LAN内主机无法上网(打不开网站),请给出你的排查步骤? 29.请描述,如何通过shell监控web及数据库服务,请给出你的思路或方法? 30.请描述下OSI7层模型及tcp/ip的3次握手。 31.mysql主从同步原理,生产情况数据库你是如何备份的?如何实现增量备份及恢复? 32.mysql常用存储引擎及原理区别。 33.请问如何优化数据库? 34.请问如何优化web服务器(apache and nginx)? 35.一台办公室内主机无法上网(打不开网站),请给出你的排查步骤? 36.作为一个运维人员,有运营人员反映我们的网站etiantian.org打开慢,这是你如何排查? 37. 请问你如何理解网站并发的概念。 38.你的公司网站并发是多少?访问量是多少? 39.描述mysql主从同步原理。 40.描述mysql主从同步部署。 41.描述mysql root密码忘了怎么办? 42.描述MyISAM与Innodb数据库引擎特点与区别? 43.描述mysql多实例部署。 44.描述如何查看mysql的命令帮助,请举例。 45.描述mysql增量备份和恢复过程。

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 负载均衡 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

                http://www.jianshu.com/p/fa937b8e6712

🔵 各层级负载均衡

🔸 七层负载均衡 ➜  基于 URL/主机名   ➜  通过虚拟的 URL/主机名 来接收请求. 然后再分配给真实服务器

🔸 四层负载均衡 ➜  基于 IP地址+端口  ➜  通过虚拟的 IP+端口    来接收请求, 然后再分配给真实服务器

🔸 三层负载均衡 ➜  基于 IP地址       ➜  通过虚拟的 IP地址     来接收请求, 然后再分配给真实服务器

🔸 二层负载均衡 ➜  基于 MAC 地址     ➜  通过虚拟的 MAC地址    来接收请求. 然后再分配给真实服务器

🔵 四/七 层负载均衡

在后台进行负载均衡时, 依据四层/七层的信息 来决定怎么转发流量


四层的负载均衡: 通过一个三层的虚拟IP (VIP), 然后加上四层的端口号, 来决定哪些流量需要做负载均衡, 
对需要处理的流量进行NAT处理. 转发到后台服务器.并记录下这个流量是由哪台后端服务器处理的.
后续这个连接的所有流量都转发到同一台服务器处理.


七层的负载均衡,是在四层的基础上! (没有四层是绝不可能有七层的), 再考虑应用层的特征.进行负载均衡.
比如 一个web服务器的负载均衡. 
除了根据 vip + 80端口 来辨别是否要处理.
还可以根据7层的 url、浏览器类别、语言 来决定是否进行负载均衡.

比如你的web 服务器分成两组, 一组处理中文的, 一组处理英文的.
那么用七层的负载均衡, 当用户访问你的网站时, 能自动辨别用户的语言. 然后选择对应的服务器组进行负载均衡.


负载均衡器, 通常称为四层交换 或七层交换.
四层交换机 主要分析 IP层, 以及 TCP/UDP 层. 来实现负载均衡.
七层交换机 除了支持四层负载均衡外. 还可以分析应用层的信息. 比如 http 协议、 URL 、Cookie 信息


四层的负载均衡, 不理解应用层协议  如: LVS、F5 

七层的负载均衡, 能理解应用层协议  如: HAProxy、 MySQL Proxy

🔵 四层负载均衡

通过报文中的 目标地址 和 端口.来选择服务器.

负载均衡器本身 就像一个中转站.  把报文中的目的IP.改成后端某个服务器的IP

🔵 七层负载均衡

通过报文中 真正的内容来决定如歌选择后台服务器.

🔸 七层负载均衡 应用场景.

    七层的好处是 使得整个网络更加智能化. 
    •  比如对图片类的请求转发到特定的图片服务器. 然后使用缓存.
    •  比如对文字类的请求发送到也得的文字服务器, 然后使用压缩技术! 


🔸 七层优点2  安全! 
    网络中常有 SYN 攻击. 

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸 Nginx、LVS、HAProxy 负载均衡优缺点 🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

🔸 负载均衡--软件

• Nginx:   ➜  专门为性能优化而开发. 非常非常注重性能.
• LVS:     ➜  高性能, 高可用的负载均衡服务器.有很好的 伸缩性 以及 可管理性.
• HAProxy: ➜  高可用、负载均衡、以及基于TCP和HTTP应用的代理.

Nginx、LVS、HAProxy 是目前使用最广泛的负载均衡软件, 不同的网站规模用不同的技术.
中小型Web应用 Nginx 足够了. 大型网站 可以考虑用 LVS.

🔸负载均衡--硬件

其实也能用硬件来实现负载均衡, 
F5 的 负载均衡业界使用率最高. 有专业的维护团队来给你维护. 
但是花销实在是太大了...  小公司是用不起的.

所以很多公司都选择上面的开源免费的负载均衡软件. 非常便宜.

🔸 流行架构

前端:  Nginx/HAProxy + Keepalived 
后端:  MySQL: 一主多从、读写分离;  LVS + Keepalived

🔵 Nginx 优缺点

🔸 优点

    Nginx 负载均衡 工作在 网络7层之上.
    可以针对 http 应用做一些分流策略.比如根据域名、目录结构来分流.

    Nginx 的正则匹配非常强大灵活,  这也是非常流行的主要原因之一. 

    Nginx 对网络稳定性依赖非常小.  只要能ping用就能进行负载均衡.
    而 LVS 则对网络稳定性要求比较高.

    Nginx 安装配置简单. 测试方便. 直接看日志就可以. LVS 的话.相对麻烦很多.



    Nginx 能承受更高的负载, 也更加的稳定.


    Nginx 不仅仅是优秀的负载均衡器 / 反向代理软件. 同时也是非常强大的 web 服务器!!! LNMP 非常流行的.

    Nginx 作为 web 反向加速缓存越来越成熟了. ..

    Nginx 可以作为中层反向代理使用. 这点几乎没有对手..

    Nginx 可以作为静态网页 和 图片服务器!


🔸 缺点

    Nginx 只能支持 http、https、和 email 协议. 适用范围比较小.

    对后端服务器的健康检查,只能通过端口来检测. 不支持通过url来检测.

🔵 LVS

🔸 优点

    抗负载能力强. 
    因为工作在网络4层. 仅仅负责分发. 没有流量产生.
    这个决定了它在负载均衡软件里的性能是最强的. 
    对内存、cpu资源消耗低


    配置性比较低. 这是一个缺点也是一个优点. 
    因为没有太多可配置的, 能大大减少人为出错的机率.


    工作稳定, 因为本身抗负载能力佷强, 
    自身有完整的双机热备方案. 如: LVS + KeepAlived


    无流量, LVS 只分发请求.流量本身并不从它本身出去
    这点保证了 均衡器IO的性能不会搜受到大流量的影响.

    应用范围广!  LVS 工作在4层. 
    几乎可以对所有应用做负载均衡. 包括 http、数据库、在线聊天等等...




🔸 缺点


    软件本身不支持正则表达式处理.  不能做 动静分离.
    而现在许多网站在这方面都有比较强的需求.
    这就是 Nginx/HAProxy + keepalived 的优势所在.


    如果网站比较庞大, LVS + Keepalived 实施 配置 维护 就比较复杂了.

🔵 HAProxy 特点:

HAProxy也是支持虚拟主机的。

HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;
同时支持通过获取指定的url来检测后端服务器的状态。

HAProxy跟LVS类似,本身就只是一款负载均衡软件;
单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。

HAProxy支持TCP协议的负载均衡转发,
可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,
大家可以用LVS+Keepalived对MySQL主从做负载均衡。

HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③ leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法;
⑤ ri,表示根据请求的URI;
⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

🔵 Nginx和LVS对比的总结:

Nginx工作在网络的7层,
所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,
相比之下LVS并不具备这样的功能,所以Nginx单凭这点可利用的场合就远多于LVS了;

但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为出问题的几率也就会大。


Nginx对网络稳定性的依赖较小,
理论上只要ping得通,网页访问正常,Nginx就能连得通,这是Nginx的一大优势!
Nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;

LVS就比较依赖于网络环境,目前来看服务器在同一网段内并且LVS使用direct方式分流,效果较能得到保证。
另外注意,LVS需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。
要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。


Nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。
LVS的安装和配置、测试就要花比较长的时间了;
LVS对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,
出了问题要解决也相应的会麻烦得多。

Nginx也同样能承受很高负载且稳定,但负载度和稳定度差LVS还有几个等级:
Nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的。


Nginx能支持http、https和email(email的功能比较少用),
LVS所支持的应用在这点上会比Nginx更多。

在使用上,一般最前端所采取的策略应是LVS,也就是DNS的指向应为LVS均衡器,LVS的优点令它非常适合做这个任务。

重要的ip地址,最好交由LVS托管,比如数据库的 ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。
所以将这些重要ip交给 LVS托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。

Nginx可作为LVS节点机器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。
当然这一层面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所逊色于Nginx。

Nginx也可作为中层代理使用,这一层面Nginx基本上无对手,唯一可以撼动Nginx的就只有lighttpd了,不过lighttpd目前还没有能做到 Nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和LVS是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV小于1000万),用Nginx就完全可以了,如果机器也不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用LVS。

现在对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

第一阶段:利用Nginx或HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择。

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择,Array的应用交付功能非常强大,本人在某项目中使用过,性价比也远高于F5,商用首选,但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。

最终形成比较理想的基本架构为:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 Nginx 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

🔸 LAMP vs LNMP

🔵 反向代理 ✔︎

🔸 什么是反向代理

    如果服务器只有一台
    用户(浏览器) 发起 HTTP 请求 ➜ 直接到服务器! 

    如果服务器是一个集群! 
    用户(浏览器) 发起 HTTP 请求 ➜ 代理服务器 ➜  集群中的某台服务器

    两者的区别就是中间的代理服务器. 
    代理服务器. 假装是真正的服务器. 这就是反向代理.



🔸 为什么要反向代理 (简)  ➜  为了负载均衡

    你不用反向代理. 服务器只能有一台. 处理能力有限.
    你用了反向打理. 服务器可以无上限. 处理能力也无上限



🔸 如何反向代理.
    看下面负载均衡用法就知道了.
    location 里的设置就是反向代理设置.

🔵 负载均衡 ✔︎

Nginx 作为高并发的web服务器,  企业肯定是用 web 服务器集群了.
集群就涉及到负载的分配, 因为服务器的配置有高有低. 
避免出现某台服务器空着, 另外的服务器却忙的要死的情况.

假设主服务器为A (80) 从服务器为 B (8080) C(8081)  D (8082)...
外面的所有请求都 解析到 A 服务器. 
然后在A上面 通过修改 Nginx 配置文件来进行负载均衡. 把压力分配给 BCD...

大概就是先把服务器添加到 upstream 参数中.  然后配置 location 

    upstream yongle.com {
        server 127.0.0.1:8881;
        server 127.0.0.1:8882;
        server 127.0.0.1:8888;
    }

    server{ 
        listen 80; 
        server_name yongle.com; 
        location / { 
            proxy_pass         http://yongle.com; 
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
        } 
    }



🔸 负载均衡 4种配置方案. 

    就是4中分配压力的方式而已. 
    那台配置高就多分配点请求.
    那台服务器的连接数量最少就分配给哪台
    也可以每个服务器一次  轮流来分配...

🔵 SSL ✔︎

HTTPS证书就是在 web 服务器上设置的. 
不管是 Apache 还是 Nginx 
只要先获取HTTPS证书.然后修改对应的配置文件就可以启用HTTPS了

🔵 性能优化 90%

⦿ 开启 Gzip , 
    压缩数据. 减少服务器网络压力,还能加快客户端访问速度.
    但是这个压缩比例不能太高. 这个是要CPU来压缩的. 


⦿ Buffers
    缓冲区!  设置太小. Nginx 会不断的写临时文件. 导致磁盘读写非常频繁.


⦿ keep-alive  Timeout 
    设置超时! 如果客户端没反应 就断开连接. 减轻服务器压力.


⦿ 日志
    日志用不到就关了... 频繁的日志对磁盘还是有压力的.
    就算要用日志, 也设置下日志等级. 不要什么操作都记录到日志中...


⦿ 静态文件缓存
    能缓存的就缓存... 快很多


⦿ 并发连接数 ???


⦿ 限制单个用户IP的连接数
    防止某些疯狂的用户. 用爬虫什么的抓你服务器的数据.

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 数据库 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

                         关系型 / 非关系型

🔵 MySQL

🔸 主从同步原理.

🔸 生产情况数据库是如何备份的.

🔸如何实现增量备份 及 恢复

🔸 Mysql 常用的存储引擎 以及区别 ; 工作中如何选择引擎.

增删查改

主从 主主

读写分离

高可用

分区分表

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 安全 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

🔵 如何防止 DDOS

🔵 如何防止黑客入侵, 安全防护

🔵 你用过那些LVS ,并讲述LVS各个模式的特点和区别? 【

🔵 一千万 并发,你有那些方案?【提示这些单用LVS 成受不起的,】【送五分】

🔵讲述你如何做系统优化,提高系统性能,充分利用资源? 【系统优化题目】 【送三分】

🔵八 IO 性能不足,你如何优调? 【系统优化题目】 【送三分】

🔵九 LNMP 架构优化 优化那些 ,特别影响性能那些参数,? 【应用优化题目】【提示 一定要按大并发】 【送三分】

十 如何 MySQL 优化 【应用优化题目】【提示 一定要按大并发】 【送三分】

十一 讲术 Memecahe 工作原理和优缺?【送二分】

十二 讲术CDN工作原理和优缺? 【送二分】

十三 你如何监视服务器质量和网络质量?用个那些工具 及优缺点?【送二分】

⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️ 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 DevOps 🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵 ⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️------⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️⬛️

🔵 Puppet

配置管理软件. 可以安装软件 等等 各种功能.