Linux Cluster之keepalived及keepalived + LVS DR的实现

 

一、HA Cluster基础

系统可用性A=MTBF/(MTBF+MTTR)

MTBF:平均无故障时间

MTTR:平均修复时间

降低MTTR的方式:冗余(redundent)

衡量标准:几个9 90%、99%、99.9%…

提升系统可用性的办法之一:降低MTTR

通过冗余(redundant)的方式能够避免单点故障(SPoF),从而降低MTTR。

冗余方式:

一主一备

一主多备

多主多备:此时,各主节点提供的服务不应该是同一个服务

主节点:active

备用节点:passive

主节点通过多播的方式以一定的频率发送HeartBeat信息,告知其他备用节点自己仍在提供服务。一旦其他备用节点在一定时长之内没有收到主节点的HeartBeat信息,会认为其发生故障,这时备用节点会基于优先级来抢占提供服务的IP地址,并把服务启动向外提供。

当由多个节点构成一个高可用集群时,若出现某主节点与其他节点互相之间不能通信,但主节点还在正常提供服务,此时,其他节点会与主节点争抢资源,这种情况被称之为Networl Partition(也被称之为脑裂brain split)。出现此情况时,节点数量大于半数的节点将接手服务。

构建集群时,一般使用奇数个节点。当出现网络分区情况时能够选举出新的主节点。

二、HA CLuster的实现方案

vrrp协议的实现:keepalived

ais:完备的HA集群

heartbeat

corosync

三、VRRP协议简介

VRRP全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器。拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。每个Router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的IP地址较大者为master,接管虚拟IP

VRRP协议术语

虚拟路由器:由一个 Master 路由器和多个 Backup 路由器组成。主机将虚拟

路由器当作默认网关。

VRID:虚拟路由器的标识。有相同 VRID 的一组路由器构成一个虚拟路由器。

Master 路由器:虚拟路由器中承担报文转发任务的路由器。

Backup 路由器:Master 路由器出现故障时,能够代替 Master 路由器工作的路由器。

虚拟 IP 地址:虚拟路由器的 IP 地址。一个虚拟路由器可以拥有一个或多个IP地址。

IP 地址拥有者:接口 IP 地址与虚拟 IP 地址相同的路由器被称为 IP 地址拥有者。

虚拟 MAC 地址:一个虚拟路由器拥有一个虚拟 MAC 地址。虚拟 MAC 地址的格式为 00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应 ARP 请求使用的是虚拟 MAC 地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。

优先级:VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。

非抢占方式: 如果 Backup 路由器工作在非抢占方式下,则只要 Master 路由器没有出现故障,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器。

抢占方式:如果 Backup 路由器工作在抢占方式下,当它收到 VRRP 报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的 Master 路由器的优先级高,就会主动抢占成为 Master 路由器;否则,将保持 Backup 状态。

四、keepalived体系结构及简单配置

4.1、keepalived是什么及其功能

keepalived是VRRP协议的软件实现,原生设计的目的为了高可用ipvs服务。其功能如下:

1)、基于VRRP协议完成地址流动;

2)、为VIP地址所在的节点生成ipvs规则(定义在配置文件中);

3)、为各RS做健康状态检测;

4)、基于脚本调用接口通过执行脚本完成脚本中定义的功能;

4.2、keepalived体系结构

keepalived是高度模块化的软件,其由核心模块、内存管理、I/O复用、配置文件分析器四个模块构成。

keepalived采用了多进程的设计模式,每个进程负责不同的功能。

父进程:内存管理,子进程管理等

子进程:VRRP子进程

子进程:healthchecker子进程

Keeplived的体系结构分两层:内核空间(Kernel Spase)和用户空间(User Spase)。

1)、内核空间层包括两个模块:

IPVS:IPVS模块是Keepalived引入的一个第三方模块,通过IPVS可以实现基于IP的负载均衡集群。IPVS默认包含在LVS集群软件中。在Keepalived中,IPVS模块是可配置的,如果需要负载均衡功能,可以在编译Keepalived时打开负载均衡功能,也可以通过配置编译参数关闭。

NETLINK:主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间层Netlink Reflector模块发来的各种网络请求。

2)、用户空间层分为4个部分:

Scheduler – I/O Multiplexer : I/O复用分发调度器,负责安排Keepalived所有内部的任务请求。

Memory Management:内存管理机制,这个框架提供了访问内存的一些通用方法。

Control Plane:Keepalived的控制面板,实现对配置文件进行编译和解析,Keepalived的配置文件解析比较特殊,不是一次解析所有模块的配置,而是在用到某个模块时才解析相应的配置。

Core components:Keepalived的核心组件,包含了一系列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper和Netlink Reflector。

3)、Core components的5个主要功能模块:

WatchDog:负责监控Checkers和VRRP进程。

Checkers:负责对服务器运行状态检测和故障隔离

VRRP Stack:负责HA集群中失败切换(Failover)。

IPVS wrapper:负责将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。

Netlink Reflector:负责高可用集群中Failover时虚拟IP(VIP)的设置和切换。Netlink Reflector的所有请求最后都发送到内核空间层的NETLINK模块来完成。

clip_image002

4.3、keepalived程序环境

配置文件:/etc/keepalived/keepalived.conf

主程序:/usr/sbin/keepalived

配置文件组成部分:

全局配置(GLOBAL CONFIGURATION):

Global definations

static routes

VRRPD CONFIGURATION

VRRP synchronization group(s)

VRRP instance(s)

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s)

4.4、keepalived配置文件详解之全局配置&vrrp instance配置

1)全局配置

global_defs {

notification_email { #当keepalieved发生切换等操作时,需要通知的收件人

acassen@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc#通知邮件的发件人

smtp_server 192.168.200.1 #邮件服务器地址

smtp_connect_timeout 30 #邮件服务器连接超时时长

router_id LVS_DEVEL #当前路由器的标识符

vrrp_mcast_group4 224.0.0.18 #发送多播的多播地址。当局域网中存在多个keepalived集群时,建议将其地址修改为各自独立。

}

要能发送多播信息,网卡必须支持MULTICAST。使用ip link show可以查看是否支持

clip_image003

如果查看到不支持,可以通过ip link set dev ifname multicast on来启用支持

~]# ip link set dev eth0 multicast on

2)虚拟路由器配置

vrrp_instance instance_name { #一个vrrp_instance定义一个虚拟路由器,instance_name不能重复。

state MASTER |BACKUP #定义当前节点在此虚拟路由器的初始状态。只能有一个MASTER。注:初识状态是通过优先级的比对来最终决定的

interface interface_name #当前虚拟路由器使用的物理接口,即Vip配置在哪个网卡的别名上

virtual_router_id VRID #虚拟路由器的唯一标识符,不能重复,范围0-255

priority 100 #当前节点在此虚拟路由器中的优先级,范围1-254。优先级高的为MASTER

advert_int 1 #主加点向备用节点通告自己heartbeat信息的时间间隔,默认1秒。

authentication { #认证方式和密码,主从必须一样。

auth_type AH|PASS #推荐使用简单字符认证,不能超过8个字符

auth_pass 1111 #认证密码,最好使用随机数。openssl rand -hex 4

}

virtual_ipaddress { #设定虚拟路由器IP地址,可以指定配置在哪个物理接口上,也可以指定标签。其随着state的变化而增加或删除,state为MASTER时增加,BACKUP时删除。state由priority决定。

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

}

track_interface { #当虚拟路由器配置在某物理接口上时,此配置用于定义当该物理接口发生故障时,则转为FAULT状态,重新触发选举。

eth0

eth1

}

nopreempt #定义为非抢占模式,默认为抢占模式

preempt_delay #抢占模式下节点上线后触发新选举操作的延时时长

#在实例中,可以自定义通知方式,而不使用全局通知方式,配置如下

notify_master <STRING>|<QUOTED-STRING> #当前节点为主节点时触发的脚本

notify_backup <STRING>|<QUOTED-STRING> #当前节点为备节点时触发的脚本

notify_fault <STRING>|<QUOTED-STRING>#当前节点转为失败状态时触发的脚本

notify <STRING>|<QUOTED-STRING>#通用格式的通知触发机制,能完成上述三种状态切换的通知,不能与上述通知配置同时使用。

}

keepalived服务启动日志信息:保存于/var/log/messages

4.5、keepalived配置示例之vrrp instance实现:

配置前提:

(1) 各节点时间必须同步; 使用ntp或 chrony服务进行同步。

(2) 确保iptables及selinux不会成为阻碍;

(3) 各节点之间可通过主机名互相通信(非必须);

(4) 各节点之间的root用户 可以基于密钥认证的ssh互相通信;

实验环境:

node1 CentOS6.8 192.168.154.127

node2 CentOS6.8 192.168.154.128

虚拟路由器1:名称 testone ip:192.168.154.220

虚拟路由器2:名称 testtwo ip:192.168.154.230

node1为虚拟路由器1 testone的主节点,虚拟路由器2 testtwo的备节点

node2为虚拟路由器2 testtwo的主节点,虚拟路由器1 testone的备节点

1)单主配置。以配置testone为例

a)在node1上配置,其为主节点

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id 121

vrrp_mcast_group4 224.0.54.154

}

vrrp_instance testone {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 797fea91

}

virtual_ipaddress {

192.168.154.220/24 dev eth1

}

}

b)在node2上配置,其为备用节点。

备用节点配置文件在主节点配置文件的基础上修改state为BACKUP和priority低于主节点即可

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id 121

vrrp_mcast_group4 224.0.54.154

}

vrrp_instance testone {

state BACKUP #在备节点上state改为BACKUP

interface eth0

virtual_router_id 51

priority 95 #备节点上的priority低于主节点的priority

advert_int 1

authentication {

auth_type PASS

auth_pass 797fea91

}

virtual_ipaddress {

192.168.154.220/24 dev eth1

}

}

之后,分别在主节点和备节点启动keepalived服务。

c)在主节点上查看配置

clip_image005

查看网卡信息

clip_image006

d)查看备节点配置及网卡信息

clip_image008

clip_image009

2)主主配置。

配置2个虚拟路由器,一个节点为虚拟路由器1的主节点,虚拟路由器2的备节点;另一个节点为虚拟路由器2的主节点,虚拟路由器1的备节点。

a)在node1上新增虚拟路由器2 testtwo的配置,其为testtwo的备节点

vrrp_instance testtwo {

state BACKUP

interface eth0

virtual_router_id 52 #注:虚拟路由器之间的ID不能重复

priority 97

advert_int 1

authentication {

auth_type PASS

auth_pass fe9f18a0 #注:虚拟路由器之间的认证密码不能重复

}

virtual_ipaddress {

192.168.154.230/24 dev eth1 #注:虚拟路由器之间的虚拟IP互相独立

}

}

b)在node2上新增以下配置,其为testtwo的主节点

vrrp_instance testtwo {

state MASTER

interface eth0

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass fe9f18a0

}

virtual_ipaddress {

192.168.154.230/24 dev eth1

}

}

c)先启动node1上的keepalived,查看主节点日志及网卡信息

发现,此时,由于node2上没有启动keepalived,所以node1既是testone的主节点,也是testtwo的主节点

clip_image011

clip_image012

d)启动node2上的keepalived,查看备节点日志及网卡信息。发现对于testtwo实例,其收到一个低优先级的组播信息,因此发起新的选举,成为testtwo的主节点。

clip_image014

clip_image015

e)此时,在查看node1上日志。发现对于testtwo实例,其受到一个更高优先级的组播,因此其转换为BACKUP模式,并且移除testtwo的虚拟IP

clip_image017

clip_image018

配置邮件通知。当主备节点之间发生切换时,系统管理员能查看到相应的信息,对系统的健康状态做出判断。

1)在node1上,编辑/etc/keepalived/notify.sh

#!/bin/bash

#

contact=’root@localhost’

notify() {

mailsubject=”$(hostname) to be testone $1, vip floating.”

mailbody=”$(date +’%F %T’): vrrp transition, $(hostname) changed to be $1″

echo “$mailbody” | mail -s “$mailsubject” $contact

}

case $1 in

master)

notify master

;;

backup)

notify backup

;;

fault)

notify fault

;;

*)

echo “Usage: $(basename $0) {master|backup|fault}”

exit 1

;;

esac

2)修改/etc/keepalived/notify.sh权限,增加可执行权限

3)vim /etc/keepalived/keepalived.conf。在testone实例中增加以下内容

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

notify_fault “/etc/keepalived/notify.sh fault”

如下图:

clip_image019

4)将脚本文件拷贝至其他备节点中,此处仅有node2节点。

5)同样也需要编辑/etc/keepalived/keepalived.conf。在testone实例中增加以下内容

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

notify_fault “/etc/keepalived/notify.sh fault”

6)测试。分别停掉node1、node2上的keepalived服务做测试。皆可看到

4.6、keepalived配置文件详解之virtual server配置

virtual_server VIP VPORT { #设置虚拟服务器,指定虚拟IP及服务端口,用空格分开

delay_loop 6 #设置服务轮询的时间间隔,单位秒

b_algo rr|wrr|lc|wlc|lblc|sh|dh #集群调度算法

lb_kind NAT|DR|TUN #集群类型

persistence_timeout 50 #持久连接时长。

protocol TCP #集群服务通过哪个协议提供

sorry_server 192.168.200.200 1358 #定义当整个集群不能正常提供服务时,由谁来对客户请求进行响应,而不是直接返回拒绝链接等错误信息。

real_server 192.168.201.100 443 { #集群服务器的Real Server IP及其端口

weight 1 #定义权重,数值越大,权重越高。性能较高的服务器建议设置较高的权重,能合理利用资源

notify_up <STRING>|<QUOTED-STRING> #定义RS状态改变脚本

notify_down <STRING>|<QUOTED-STRING> #定义RS状态改变脚本

#健康状态检测机制,支持应用层检测HTTP_GET、SSL_GET;传输层检测TCP_CHECK,使用一种即可。注:在做健康状态检测时,有三种方式:1、icmp ping;2、扫描tcp|udp服务端口;3、通过应用层协议直接请求关键资源,以判断服务是否可用。通常而言,使用应用层检测能精准定位服务是否可用。

HTTP_GET|SSL_GET {

url {

path <STRING> #定义要监控的URL

digest <STRING> #判断上述检测机制为健康状态的响应的内容的校验码

status_code <INT> #判断上述检测机制为健康状态的响应码。两种判断方式选择其一即可。也可一起使用。

}

connect_timeout <INTEGER> #连接超时时长

nb_get_retry <INT> #重试的次数;

delay_before_retry <INT> #重试之前延迟时长;

connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求;

connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求;

bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址;

bind_port <PORT> #源端口

}

TCP_CHECK {

connect_timeout <INTEGER> #连接超时时长

nb_get_retry <INT> #重试的次数;

delay_before_retry <INT> #重试之前延迟时长;

connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求;

connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求;

bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址;

bind_port <PORT> #源端口

}

}

}

4.7、keepalived配置示例之keepalive + LVS DR的实现

环境: http server通过lvs DR实现负载均衡,director service通过keepalived保证高可用。如下图所示

clip_image021

为了以示区别,http server1上的index页面内容为“this is RS1 website”; http server2上的index页面内容为“this is RS2 website”

配置步骤:

1)配置http server

a)在http server1上配置

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig lo:0 192.168.154.168 netmask 255.255.255.255 up

route add -host 192.168.154.168 dev lo:0

之后:安装http程序,配置站点内容为“this is RS1 website”,并启动httpd服务,具体配置略。

b)在http server2上的配置类似http server1,不再赘述。

2)配置keepalived。

a)keepalived的主节点配置如下。编辑/etc/keepalived/keepalived.conf。配置内容如下:

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id 121

vrrp_mcast_group4 224.0.54.154

}

vrrp_instance testone {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 797fea91

}

virtual_ipaddress {

192.168.154.168/24 dev eth1

}

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

notify_fault “/etc/keepalived/notify.sh fault”

}

virtual_server 192.168.154.168 80 {

delay_loop 6

lb_algo rr

lb_kind DR

protocol TCP

real_server 192.168.154.129 80 {

weight 1

HTTP_GET {

url {

path /

status_code 200

}

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

}

}

real_server 192.168.154.130 80 {

weight 1

HTTP_GET {

url {

path /

status_code 200

}

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

}

}

}

b)将主节点上/etc/keepalived/keepalived.conf配置文件拷贝至BACKUP上。

修改vrrp instance配置上的state 为BACKUP及priority低于MASTER的priority 100即可。

3)启动主节点及备节点上的keepalived服务。

4)模拟http server服务故障

在主节点上使用watch ipvsadm -Ln实时监控RS的健康状况。

停止http server1上的http服务:service httpd stop

clip_image022

5)当两个http server都出现故障时,即集群不能正常提供服务时。此时在请求http服务,会提示错误信息。但此错误信息并不能给予用户判断请求错误的原因提供帮助。通过配置sorry server可以让用户或系统管理员了解服务故障的部分原因。sorry server配置步骤如下:

a)在keepalived的MASTER和BACKUP节点上,配置http服务。在master上提供的页面内容为”http cluster with some wrong,this is sorry server 1″,backup上提供的页面内容为”http cluster with some wrong,this is sorry server 2″。

http服务配置完成之后,启动服务。

b)编辑主节点的/etc/keepalived/keepalived.conf配置文件。在virtual_server中增加以下内容:

sorry_server 127.0.0.1 80

在备节点上操作相同。

之后,在主、备节点上使用service keepalived reload重载配置。

c)在http server的http服务都停止时,再去访问。测试结果如下

测试命令:for i in {1..10};do curl http://192.168.154.168;done

clip_image023

此时,停止192.168.154.127上的keepalived服务,再次测试,结果为

clip_image024

6)从测试结果判断,keepalived + lvs DR工作正常。将停掉的keepalived服务恢复启动,确保http server及keepalived节点上的http服务为启动即可,至此,keepalived + lvs DR配置完成。

附:快速部署LVS DR的示例脚本。

#!/bin/bash

#

vip=”192.168.154.168″

vport=”80″

netmask=”255.255.255.255″

iface=”lo:0″

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $iface $vip netmask $netmask broadcast $vip up

route add -host $vip dev $iface

;;

stop)

ifconfig $iface down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

esac

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/57040

(1)
M20-1钟明波M20-1钟明波
上一篇 2016-11-02
下一篇 2016-11-02

相关推荐

  • 进程管理

    简述进程的相关理论与工具使用

    2017-09-09
  • 计划任务&脚本进阶练习

    1、每天的2点和12点整,将/etc备份至/testdir/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz” mkdir /testdir/backup vim /root/bin/etcbak.sh tar cvf /testdir/backup/etcbak-`date “+%F-%H”`.tar.xz …

    Linux干货 2017-03-26
  • Linux文件压缩、解压、归档总结

    一、简介   压缩对我们来说通常意味着减小文件体积,节省硬盘空间。在Windows平台上处理大文件或目录中的文件很多时我们都需要对这些文件进行压缩处理,压缩格式多种多样,如:zip、rar、7z等格式,压缩方式也比较多样话,支持按最大压缩比例或者最快时间进行压缩等多种方式,而生成的压缩包就可以让我们更方便的进行拷贝及归档整理。解压缩顾名思义就是回归…

    Linux干货 2015-09-26
  • CentOS 7和CentOS 6 使用gpg工具实现公钥加密和解密

    运行环境: [root@Shining ~]# uname -a Linux Shining.ACG 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x…

    Linux干货 2016-12-01
  • Linux第三周

    一.正则表达式和扩展正则表达式 1.首先有各种工具来对文本进行的查看,分析,统计   cat 命令:查看文本的工具    cat主要有三大功能:1.一次显示整个文件。$ cat filename2.从键盘创建一个文件。$ cat > filename     只能创建新文件,不能编辑已有文件.…

    2017-06-04
  • 系统管理和内核管理(二)之grub使用、编译安装内核

    系统管理和内核管理(二)之grub使用、编译安装内核   回顾CentOS 6启动流程: POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot&…

    Linux干货 2016-09-15