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)
上一篇 2016-11-02 20:25
下一篇 2016-11-02 20:32

相关推荐

  • 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象们连接在一起时,它们就可以相互提供服务和信息。 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信。但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改。也许,你只想根据你的具体应用环境而改进通信代码。或者,你只想简单的重新构造通信代码来避免类和类…

    Linux干货 2015-07-24
  • OpenSSL 的使用详解

    OpenSSL 是一个开源项目,其组成主要包括一下三个组件:     openssl:多用途的命令行工具     libcrypto:加密算法库     libssl:加密模块应用库,实现了ssl及tls openssl可以实现:秘钥证书管…

    Linux干货 2016-09-23
  • 马哥教育网络班N22期+第3周课程练习

    马哥教育网络班N22期+第3周课程练习 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 示例: [root@Red Hat Enterprise Linux Desktop]# who | cut -d' &#039…

    Linux干货 2016-08-29
  • 13grep和正则表达式

    grep:Global search REgular expression and Print out the line . 文本过滤工具,根据用户指定的模式对目标文本进行匹配检查;打印匹配到的行。过滤即不改变原来文本数据。 grep [options] PATTERN [file…] –color=auto: 对匹配到的文本着色显示…

    Linux干货 2016-11-27
  • 马哥教育网络班20期+第6周课程练习

    vim编辑器使用总结 一、文件的打开与关闭             打开文件:                 # vim [OPTION]… FILE…      …

    Linux干货 2016-07-17
  • 内核编译流程和自动化安装

    内核编译         在特定的情况我们机器上面有些硬件特性需要利用起来,但是我们现成的这个内核没有开启这个功能,那就需要重新编译,把这个功能模块加进来,或者打到vmlinux中的核心文件里面。比如ntfs功能,默认系统没有启用此功能,但是系统是带这个功能的,编译的时候时候可以…

    Linux干货 2016-09-18