lvs编译
① 求集群管理的相关知识!
集群技术案例介绍和具体操作
集群技术案例介绍和具体操作
中国科学院西安网络中心 中科红旗linux培训认证中心
集群技术
1.1 什么是集群
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提
供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的
集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一
个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群
系统的节点。
1.2 为什么需要集群
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就
开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并
不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。
对集群的研究起源于集群系统良好的性能可扩展性(scalability)。提高CPU
主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的
提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了
向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些
多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能
随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的
增加几乎是线性变化的。图1显示了这中情况。
图1. 几种计算机系统的可扩展性
对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下
面的统计数字列举了不同类型企业应用系统停机所带来的损失。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
应用系统每分钟损失(美元)
呼叫中心(Call Center) 27000
企业资源计划(ERP)系统13000
供应链管理(SCM)系统11000
电子商务(eCommerce)系统10000
客户服务(Customer Service Center)系统27000
图2:停机给企业带来的损失
随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。
集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:
高可扩展性:如上所述。
高可用性:集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单点失效。
高性能:负载平衡集群允许系统同时接入更多的用户。
高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
2.1 集群系统的分类
虽然,根据集群系统的不同特征可以有多种分类方法,但是一般把集群系统分为两类:
(1)、高可用(High Availability)集群,简称HA集群。
这类集群致力于提供高度可靠的服务。就是利用集群系统的容错性对外提供7*24小时不间
断的服务,如高可用的文件服务器、数据库服务等关键应用。
目前已经有在Linux下的高可用集群,如Linux HA项目。
负载均衡集群:使任务可以在集群中尽可能平均地分摊不同的计算机进行处理,充分利
用集群的处理能力,提高对任务的处理效率。
在实际应用中这几种集群类型可能会混合使用,以提供更加高效稳定的服务。如在一个使
用的网络流量负载均衡集群中,就会包含高可用的网络文件系统、高可用的网络服务。
(2)、性能计算(High Perfermance Computing)集群,简称HPC集群,也称为科学计算
集群。
在这种集群上运行的是专门开发的并行应用程序,它可以把一个问题的数据分布到多
台的计算机上,利用这些计算机的共同资源来完成计算任务,从而可以解决单机不能胜任
的工作(如问题规模太大,单机计算速度太慢)。
这类集群致力于提供单个计算机所不能提供的强大的计算能力。如天气预报、石油勘探与油
藏模拟、分子模拟、生物计算等。这些应用通常在并行通讯环境MPI、PVM等中开发,由于MPI
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
是目前的标准,故现在多使用MPI为并行环境。
比较有名的集群Beowulf就是一种科学计算集群项目。
3、集群系统转发方式和调度算法
3.1转发方式
目前LVS主要有三种请求转发方式和八种调度算法。根据请求转发方式的不同,所构
架集群的网络拓扑、安装方式、性能表现也各不相同。用LVS主要可以架构三种形式的集群,
分别是LVS/NAT、LVS/TUN和LVS/DR,可以根据需要选择其中一种。
(1)、网络地址转换(LVS/NAT)
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、直接路由
(3)、IP隧道
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
三种转发方式的比较:
3.2、调度算法
在选定转发方式的情况下,采用哪种调度算法将决定整个负载均衡的性能表现,不同
的算法适用于不同的应用场合,有时可能需要针对特殊场合,自行设计调度算法。LVS的算
法是逐渐丰富起来的,最初LVS只提供4种调度算法,后来发展到以下八种:
1.轮叫调度(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均
等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.加权轮叫(Weighted Round Robin)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样
可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动询问真实服务器的
负载情况,并动态地调整其权值。
3.最少链接(Least Connections)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器
上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较
好地均衡负载。
4.加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自
动询问真实服务器的负载情况,并动态地调整其权值。
5.基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache
集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务
器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且
有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求
发送到该服务器。
6. 带复制的基于局部性最少链接( Locality-Based Least Connections with
Replication)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要
用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务
器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目
标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一
台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接
”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服
务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,
以降低复制的程度。
7.目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分
配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,
否则返回空。
8.源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的
散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则
返回空。
了解这些算法原理能够在特定的应用场合选择最适合的调度算法,从而尽可能地保持
Real Server的最佳利用性。当然也可以自行开发算法,不过这已超出本文范围,请参考有
关算法原理的资料。
4.1、什么是高可用性
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性
(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,
用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
MTTF/(MTTF+MTTR)*100%
业界根据可用性把计算机系统分为如下几类:
可用比例
(Percent
Availability)
年停机时间
(downtime/year
)
可用性分类
99.5 3.7天
常规系统
(Conventional)
99.9 8.8小时可用系统(Available)
99.99 52.6分钟
高可用系统(Highly
Available)
99.999 5.3分钟Fault Resilient
99.9999 32秒Fault Tolerant
为了实现集群系统的高可用性,提高系统的高可性,需要在集群中建立冗余机制。一个功
能全面的集群机构如下图所示
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
负载均衡服务器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行
High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运
行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并
继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息是,它就释放
服务IP地址,这样的主管理器就开开始再次进行集群管理的工作了。为在住服务器失效的
情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,
保持二者系统的基本一致。
HA的容错备援运作过程
自动侦测(Auto-Detect)阶段 由主机上的软件通过冗余侦测线,经由复杂的监听程序。逻
辑判断,来相互侦测对方运行的情况,所检查的项目有:
主机硬件(CPU和周边)
主机网络
主机操作系统
数据库引擎及其它应用程序
主机与磁盘阵列连线
为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,
侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供
维护参考。
自动切换(Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的
任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服
务。
自动恢复(Auto-Recovery)阶段 在正常主机代替故障主机工作后,故障主机可离线进行修
复工作。在故障主机修复后,透过冗余通讯线与原正常主机连线,自动切换回修复完成的
主机上。整个回复过程完成由EDI-HA自动完成,亦可依据预先配置,选择回复动作为半自
动或不回复。
4.2、HA三种工作方式:
(1)、主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,
待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的
一致性通过共享存储系统解决。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另
一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存
储系统中。
(3)、集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用
主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
相关文档
http://tech.sina.com.cn/it/2004-04-09/1505346805.shtml
http://stonesoup.esd.ornl.gov
LINUX下的集群实列应用
最近有客户需要一个负载均衡方案,笔者对各种软硬件的负载均衡方案进行了调查和
比较,从IBM sServer Cluster、Sun Cluster PlatForm 等硬件集群,到中软、红旗、
TurboLinux的软件集群,发现无论采用哪个厂商的负载均衡产品其价格都是该客户目前所
不能接受的。于是笔者想到了开放源项目Linux Virtual Server(简称LVS)。经过对LVS的研
究和实验,终于在Red Hat 9.0上用LVS成功地构架了一组负载均衡的集群系统。整个实
现过程整理收录如下,供读者参考。
选用的LVS实际上是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操
作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组
服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集
群,如图1所示。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
图1 LVS实现集群系统结构简图
图1显示一台名为Director的机器在集群前端做负载分配工作;后端两台机器称之为
Real Server,专门负责处理Director分配来的外界请求。该集群的核心是前端的Director
机器,LVS就是安装在这台机器上,它必须安装Linux。Real Server则要根据其选用的负
载分配方式而定,通常Real Server上的设置比较少。接下来介绍Director机器上LVS的
安装过程。
安装
LVS的安装主要是在Director机器上进行,Real Server只需针对不同的转发方式做简单
的设定即可。特别是对LVS的NAT方式,Real Server惟一要做的就是设一下缺省的网关。
所以构架集群的第一步从安装Director机器开始。
首先,要在Director机器上安装一个Linux操作系统。虽然早期的一些Red Hat版本,
如6.2、7.2、8.0等自带Red Hat自己的集群软件,或者是在内核中已经支持LVS,但是为
了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux内核的方式进行安装,
Linux版本采用Red Hat 9.0。
如果用户对Red Hat的安装比较了解,可以选择定制安装,并只安装必要的软件包。
安装中请选择GRUB 做为启动引导管理软件。因为GRUB 在系统引导方面的功能远比
LILO强大,在编译Linux内核时可以体会它的方便之处。
LVS是在Linux内核中实现的,所以要对原有的Linux内核打上支持LVS的内核补丁,
然后重新编译内核。支持LVS 的内核补丁可以从LVS 的官方网
http://www.linuxvirtualserver.org 下载,下载时请注意使用的Linux核心版本,必须下载和
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
使用的Linux内核版本相一致的LVS内核补丁才行。对于Red Hat 9.0,其Linux内核版本
是2.4.20,所以对应内核补丁应该是http://www.linuxvirtualserver.org/software/kernel-
2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。笔者经过多次实验,使用Red Hat 9.0自带的Linux
源代码无法成功编译LVS 的相关模组。由于时间关系笔者没有仔细研究,而是另外从
kernel.org上下载了一个tar包格式的2.4.20内核来进行安装,顺利完成所有编译。下面是
整个内核的编译过程:
1.删除Red Hat自带的Linux源代码
# cd /usr/src
# rm -rf linux*
2.下载2.4.20内核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解压到当前目录/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立链接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的内核补丁
# cd /usr/src
#wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-
1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能
无法成功编译。
6.打上修正ARP问题的内核补丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
# patch -p1 < ../hidden-2.4.20pre10-1.diff
这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server
上必须做。
7.为新核心命名
打开/usr/src/linux/Makefile。注意,在开始部分有一个变量EXTRAVERSION可以自行定
义。修改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显
示成2.4.20-LVS。这样给出有含义的名称将有助于管理多个Linux核心。
8.检查源代码
# make mrproper
这一步是为确保源代码目录下没有不正确的.o文件及文件的互相依赖。因为是新下载的内
核,所以在第一次编译时,这一步实际可以省略。
9.配置核心选项
# make menuconfig
命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对内核进行定制。
此过程中,要注意对硬件驱动的选择。Linux支持丰富的硬件,但对于服务器而言,用不到
的硬件驱动都可以删除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur
Radio support等项也可以删除。
注意,以下几项配置对LVS非常重要,请确保作出正确的选择:
(1)Code maturity level options项
对此项只有以下一个子选项,请选中为*,即编译到内核中去。
Prompt for development and/or incomplete code/drivers
(2)Networking options项
对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助:
<*> Packet socket
[ ] Packet socket: mmapped IO
< > Netlink device emulation
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
IP: broadcast GRE over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[ ] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
(3)Networking options项中的IP: Virtual Server Configuration项
如果打好了LVS的内核补丁,就会出现此选项。进入Virtual Server Configuration选项,
有以下子选项:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheler
<M> round-robin scheling
<M> weighted round-robin scheling
<M> least-connection scheling scheling
<M> weighted least-connection scheling
<M> locality-based least-connection scheling
<M> locality-based least-connection with replication scheling
<M> destination hashing scheling
<M> source hashing scheling
<M> shortest expected delay scheling
<M> never queue scheling
--- IPVS application helper
<M> FTP protocol helper
以上所有项建议全部选择。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(4)Networking options项中的IP: Netfilter Configuration项
对于2.4版本以上的Linux Kernel来说,iptables是取代早期ipfwadm和ipchains的
更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。
本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的
支持:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
10. 编译内核
(1)检查依赖关系
# make dep
确保关键文件在正确的路径上。
(2)清除中间文件
# make clean
确保所有文件都处于最新的版本状态下。
(3)编译新核心
# make bzImage
(4)编译模组
# make moles
编译选择的模组。
(5)安装模组
# make moles_install
# depmod -a
生成模组间的依赖关系,以便modprobe定位。
(6)使用新模组
# cp System.map /boot/System.map-2.4.20-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.20-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz
# new-kernel-pkg --install --mkinitrd --depmod 2.4.20-LVS
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(7)修改GRUB,以新的核心启动
执行完new-kernel-pkg命令后,GRUB的设置文件/etc/grub.conf中已经增加了新核心的
启动项,这正是开始安装Linux时推荐使用GRUB做引导程序的原因。
grub.conf中新增内容如下:
title Red Hat Linux (2.4.20-LVS)
root (hd0,0)
kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/
initrd /boot/initrd-2.4.20LVS.img
将Kernel项中的root=LABEL=/改成 root=/dev/sda1 (这里的/dev/sda1是笔者Linux的根
分区,读者可根据自己的情况进行不同设置)。
保存修改后,重新启动系统:
# reboot
系统启动后,在GRUB的界面上会出现Red Hat Linux(2.4.20-LVS)项。这就是刚才编译的
支持LVS的新核心,选择此项启动,看看启动过程是否有错误发生。如果正常启动,ipvs
将作为模块加载。同时应该注意到,用LVS的内核启动后在/proc目录中新增了一些文件,
比如/proc/sys/net/ipv4/vs/*。
11.安装IP虚拟服务器软件ipvsadm
用支持LVS的内核启动后,即可安装IP虚拟服务器软件ipvsadm了。用户可以用tar包或
RPM 包安装,tar 包可以从以下地址http://www.linuxvirtualserver.org/software/kernel-
2.4/ipvsadm-1.21.tar.gz 下载进行安装。
这里采用源RPM包来进行安装:
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
# rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
注意:高版本的rpm命令去掉了--rebuild这个参数选项,但提供了一个rpmbuild命令来实
现它。这一点和以前在Red Hat 6.2中以rpm—rebuild XXX.src.rpm来安装源RPM包的习
惯做法有所不同。
安装完,执行ipvsadm命令,应该有类似如下的信息出现:
# ipvsadm
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
出现类似以上信息,表明支持LVS 的内核和配置工具ipvsadm 已完全安装,这台
Director机器已经初步安装完成,已具备构架各种方式的集群的条件。
实例
理解了上述关于请求转发方式和调度算法的基本概念后,就可以运用LVS来具体实现
几种不同方式的负载均衡的集群系统。LVS的配置是通过前面所安装的IP虚拟服务器软件
ipvsadm来实现的。ipvsadm与LVS的关系类似于iptables和NetFilter的关系,前者只是
一个建立和修改规则的工具,这些命令的作用在系统重新启动后就消失了,所以应该将这
些命令写到一个脚本里,然后让它在系统启动后自动执行。网上有不少配置LVS的工具,
有的甚至可以自动生成脚本。但是自己手工编写有助于更深入地了解,所以本文的安装没
有利用其它第三方提供的脚本,而是纯粹使用ipvsadm命令来配置。
下面就介绍一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的负载均衡集群。
1.设定LVS/NAT方式的负载均衡集群
NAT是指Network Address Translation,它的转发流程是:Director机器收到外界请求,
改写数据包的目标地址,按相应的调度算法将其发送到相应Real Server上,Real Server
处理完该请求后,将结果数据包返回到其默认网关,即Director机器上,Dire
② 怎样从零开始学习linux
1. 基本功要扎实
学习任何一种语言,必备的基本功是必须要有的,一方面可以提高效率,另一方面可以拓宽思路。
对于Linux基本知识的学习,对一些初学者来说是枯燥乏味的,可以通过理解再背诵的方式先进行代码及语法的学习,然后进行实践操作,必须手动输入命令行,不要借助工具,这样可以更快速有效的掌握Linux。
2. 学以致用
Linux学习的目的是应用,Linux基本知识是一些零散的技术,当没有应用在项目上时,我们无法理解他的真实价值,所以打好基本功之后,最紧迫的是多做几个完整的项目,刚开始可以是功能简单的项目,之后可以选择稍微复杂的项目,勤于动手,敢于实践,一定能学好Linux。
3. 学会使用Linux联机帮助
任何一种教材都不会完全讲述Linux知识,一般讲的都是比较常用的或者是比较有代表性的知识,但是,我们在项目应用中往往有些功能的实现是需要一些生僻知识和技能的,那么,如何查找我们所需的知识呢,推荐查阅Linux帮助文档,主流的Linux都自带详细的帮助文档,很方便解决问题!
4. 在网上找资源
在Linux的学习和应用中,难免会遇到一些没有思路、不知道如何解决的问题,这时就要借助网络力量,可以通过搜索引擎搜索查找,也可以咨询资深技术人员,最终实现问题的解决,这是Linux知识积累的一个重要的途径!
5. 查阅英文技术文档
如果想深入学习Linux,查阅英文技术文档是十分必要的,往往最新的技术都是采用英文文档的方式发布的,而且更全面,因此,对于Linux人员来说,多看一些Linux技术文档,对于掌握前沿技术和加深知识是十分有必要的!
Linux学习是一个需要长期坚持不懈的过程,新的技术不断的产生,要想成为Linux大牛,必须要时刻关注Linux发展动态,掌握最新技术,才能走在行业前列!
③ 如何使用LVS构架负载均衡Linux集群系统
集群和负载均衡的区别如下:1、集群(Cluster)
所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信?应用程序可以通过网络共享内存进行消息传送,实现分布式计算机?
2、负载均衡(Load Balance)
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去?这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性?
3、特点
(1)高可靠性(HA)?利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务?
(2)高性能计算(HP)?即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析?化学分析等?
(3)负载平衡?即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求?
LVS系统结构与特点
1. Linux Virtual Server:简称LVS?是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性?高可靠性?高性能和高可用性的体系?许多商业的集群产品,比如RedHat的Piranha? Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的?
2. 体系结构:使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器?物理服务器之间可以通过高速的 LAN或分布在各地的WAN相连?最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器?
3. LVS的三种模式工作原理和优缺点: Linux Virtual Server主要是在负载均衡器上实现的,负载均衡器是一台加了 LVS Patch的2.2.x版内核的Linux系统?LVS Patch可以通过重新编译内核的方法加入内核,也可以当作一个动态的模块插入现在的内核中?
④ 技术面试会问很多技术问题吗
笔者其实没有想到去面试,只是在智联上更新了一下简历,就陆陆续续接到很多猎头的邮件和电话,实在是没准备好要去面试,就推掉了几家公司的面试了。正因为笔者也很久没有面试了,笔者也想去面试学习一下,闲话少说,下面就分享给大家笔者在2018年1月4号上午10点30分的面试经历:
首先,猎头或者公司人资会把公司的介绍及岗位要求发到你邮箱(或者QQ、微信),下面这份是猎头发给我的岗位说明,为了职业道德操守,公司的介绍和面试通知信息我就不贴出来了,我就把岗位要求贴出来:
职位描述:
1、 负责应用服务器的安装、配置、优化与维护;
2、 负责应用系统的日志信息备份、管理、维护与分析;
3、 负责应用系统的日常监测于维护、故障处理、性能分析与优化;
4、 负责应用部署系统、环境配置系统、监控系统的开发、部署、升级与维护,建设高性能的运维平台。
岗位要求:
1、 熟悉Linux操作系统的基础知识,熟练使用Linux常用操作命令;
2、 熟练配置Nginx、HAproxy 等应用相关软件的部署、配置与优化维护;
3、 熟悉网络基础知识、熟悉TCP/IP的工作原理,会配交换机或路由器,能熟练的对网络情况进行分析
4、 熟悉shell/perl/python中的一种或多种进行运维程序的开发;
5、 熟悉Nagios,Ganglia等监控软件
看着上面的要求大家是不是觉得要求也不高啊,你要细看就会发现,这家公司要求的还挺多,不仅要会网络知识(熟悉TCP/IP好像是每家单位的都会写这样的要求),还要会开发技能。相信很多做运维的兄弟在网络这一块是个头疼的事情,都对交换机和路由器不怎么会配置和管理。
然后,笔者详细了解他们公司,了解岗位要求,在突击复习一下可能会问到的知识点和技术点。到了面试的这天时间,早早的起床,把牙一定要刷干净,特别是有口臭的兄弟,最好准备点口香糖,到达面试公司前嚼块口香糖,以免因为口气的原因熏到面试官,让你在面试官心里减分。早点要记得吃,如果你是下午面试的话也要吃午饭,吃早点了精气神就有了。还要注意,带上你的简历和一支笔,虽然他们那边也会有你的简历,为了以防万一还是准备好简历。
最后,关键点来了,就是和面试官沟通了,有笔试的公司会让你做些面试题,没有笔试就直接和面试官聊了,下面是我和面试官沟通完之后记住的一些问题,分享给大家看一下,笔者一共记住了7个问题,好像还有两个问题实在想不起来了,如果大家有更恰当的回答一定要贴出来一起探讨和进步:
1、介绍下自己?(几乎每家公司首先都会让你做个自我介绍,好像是必修课一样)
笔者回答:此处省略笔者的自我介绍,笔者建议介绍自己的时间不宜过长,3-4分钟为宜,说多了面试官会觉得你太啰嗦了。说太少了也不行,那样会让人感觉你的经历太简单了、太空了。正常情况下,一般你在做自我介绍的同时,面试官这个时候在看你的简历,他需要一边看简历、一边听你介绍自己,如果你说个几句话就把自己介绍完了,他肯定还没缓过神来,对你的映像会减分的。在介绍的同时思维要清晰,逻辑要清楚,最好是根据你简历上写的经历来介绍,这样可以把面试官的思路带到你这里来,让他思路跟着你走。不要东扯一句,西扯一句。竟量少介绍自己的性格、爱好(最好能不说就不说),你可以简单罗列干过几家公司(最多罗列3家公司/也包含目前所在的公司,注意顺序不要乱),都在那几家公司负责什么工作,都用过什么技术,在着重介绍一下你目前所在的公司是负责哪些工作的,可以稍微详细一点介绍,不要让面试官听着晕头转向的感觉。
2、灰度发布如何实现?
笔者回答:其实对这个问题笔者也答的不好,就不写出来误导大家了。大家有好的方法可以共享出来。不过笔事后在知呼上看到了一位网友的建议觉得不错,大家可以参考看一下 :https://www.hu.com/question/20584476
3、Mongodb熟悉吗,一般部署几台?
笔者回答:部署过,没有深入研究过,一般mongodb部署主从、或者mongodb分片集群;建议3台或5台服务器来部署。MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。 对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为mongos。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。对客户端来说,它仅知道连接了一个普通的mongod,在请求数据的过程中,通过路由器上的数据和片的对应关系,路由到目标数据所在的片上,如果请求有了回应,路由器将其收集起来回送给客户端。
4、如何发布和回滚,用jenkins又是怎么实现?
笔者回答:发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。
回滚:按照版本号到发布服务器找到对应的版本推送
5、Tomcat工作模式?
笔者回答:Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
Tomcat作为独立服务器:请求来自于web浏览器;
6、监控用什么实现的?
笔者回答:现在公司的业务都跑在阿里云上,我们首选的监控就是用阿里云监控,阿里云监控自带了ECS、RDS等服务的监控模板,可结合自定义报警规则来触发监控项。上家公司的业务是托管在IDC,用的是zabbix监控方案,zabbix图形界面丰富,也自带很多监控模板,特别是多个分区、多个网卡等自动发现并进行监控做得非常不错,不过需要在每台客户机(被监控端)安装zabbix agent。
7、你是怎么备份数据的,包括数据库备份?
笔者回答:在生产环境下,不管是应用数据、还是数据库数据首先在部署的时候就会有主从架构、或者集群,这本身就是属于数据的热备份;其实考虑冷备份,用专门一台服务器做为备份服务器,比如可以用rsync+inotify配合计划任务来实现数据的冷备份,如果是发版的包备份,正常情况下有台发布服务器,每次发版都会保存好发版的包。
总结
总结一下面试注意几点事项,可能笔者也说得不太对,为了我们运维工作的兄弟们都能拿到高薪,大家一定要指证出来一起进步、一起探讨:
第一,你要对自己的简历很熟悉,简历上的写的技能自己一定要能说出个一二,因为面试官的很多问题都会挑你简历上写的问。比如你简历上写了这么一条技能“熟悉mysql数据库的部署安装及原理”。你即然写了这么一条技能,你在怎么不熟悉你也要了解mysql的原理,能说出个大概意思。万一面试官问到了你写的这一条,你都答不上来,那在他心里你又减分了,基本上这次面试希望不大。
第二,如果面试官问到你不会的问题,你就说这个不太熟悉,没有具体研究过,千万别不懂装懂,还扯一堆没用的话题来掩饰,这样只会让面试官反感你。
第三,准备充分,竟可能多的记住原理性的知识,一般面试问的多的就是原理。很少问具体的配置文件是怎么配置的。面试前也要了解清楚“职位描述”和“岗位要求”,虽然有时候大多数不会问到岗位要求的问题,但也要了解和熟悉。
第四,面试完后一定要总结,尽量记住面试官问的每一个问题,回去记录下来,如果问到不会的问题,事后要立马查网络或者找朋友搞清楚、弄明白,这样你才能记劳,下次面试说不定又问到同样的问题。
问完之后,面试官就跟我聊薪资待遇了,问我多少钱能达到自己的要求,我就不便透露了,可以私聊,哈哈,后续笔者会陆陆续续更新以前面试的经历和问题,有需要的朋友可以转载或者收藏起来一起讨论。
基于大家热情高昂的气氛,笔者又花了一个下午的时间回忆并整理在2017年2月24号笔者在东三环边上(快到东四环了,没有地铁过去,到了四惠还要转公交车)的一家传媒公司的面试经历,还好笔者有做笔记的习惯,把之前面试的问题都记录在案,这一次的面试笔者可是记忆犹新,因为这次这家公司都跟笔者发offer了,实在是真心不想去这家公司就找原因推掉了,大家可别学我这么不靠谱。下面是这家公司中的岗位要求说明:
岗位职责:
1、负责公司产品的版本控制、构建和发布管理;
2、负责公司统一配置库管理工作,权限管理与分配准确及时,定期完成配置备份;
3、负责公司内部开发/测试服务器的运行管理工作;
4、负责Linux操作系统的安装、配置、监控和维护、问题处理、软件升级、 数据备份、应急响应、故障排除等、保证线上环境的稳定运行;
5、负责支撑平台24×7稳定运行,并进行前瞻性容量规划;
6、负责公司机房服务器日常维护及网络系统安装、部署、维护工作。
岗位要求:
1、计算机相关专业本科及以上学历,2年以上运维或配置管理工作经验;
2、至少熟悉一种监控系统搭建,如Nagios/Zabbix/等;
3、至少熟悉一种集群管理工具,如Ansible/SaltStack等;
4、有使用集成发布工具发布构建经验优先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系统,熟悉Weblogic/tomcat等中间件,能够编写shell脚本,熟悉软件开发过程及过程产品,有一定的网络基础;
6、熟悉rsyslog, flume等日志收集和处理系统;
7、具有强烈的安全意识及较强的沟通协调和学习能力,良好的团队合作精神,工作积极主动。
过去之后,前台美眉把我带到他们公司的地下室,我扫视了一下周围的环境,貌似旁边就是机房,因为我听到服务器的声音。等了几分钟,面试官下来了,面试官目测比较瘦,看着跟我身材差不多(应该不到120),他说他是负责运维部的,然后开始就叫我先自我介绍,都是一个套路,免不了介绍的,所以兄弟们一定要把自我介绍练好。然后开始问我问题了,跟面试官聊得还行,问我应该有不下10个以上的问题,我记住了下面有10个问题:
1、LVS负载的原理,和Nginx负载有啥区别?
笔者回答:这个问题我觉得面试官司没问好,正常都会这么问“LVS有哪些负载均衡技术和调度算法?"。我回答就是按我说的这种问法回答的,反正他也频繁点头,当然,笔者回答的可能没有下面我整理出来的那么详细,大概意思我都说明白了。
LVS是Liunx虚拟服务器的简称,利用LVS提供的负载均衡技术和linux操作系统可实现高性能、高可用的服务器集群,一般LVS都是位于整个集群系统的最前端,由一台或者多台负载调度器(Director Server)组成,分发给应用服务器(Real Server)。它是工作在4层(也就是TCP/IP中的传输层),LVS是基于IP负载均衡技术的IPVS模块来实现的,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,详述如下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。
回答负载调度算法,IPVS实现在八种负载调度算法,我们常用的有四种调度算法(轮叫调度、加权轮叫调度、最少链接调度、加权最少链接调度)。一般说了这四种就够了,也不会需要你详细解释这四种算法的。你只要把上面3种负载均衡技术讲明白面试官就对这道问题很满意了。接下来你在简单说下与nginx的区别:
LVS的优点:
抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
应用范围比较广,可以对所有应用做负载均衡;
配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
LVS的缺点:
软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单一点
Nginx的优点:
工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
Nginx安装和配置比较简单,测试起来比较方便;
可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
Nginx的缺点:
Nginx不支持url来检测。
Nginx仅能支持http和Email,这个它的弱势。
Nginx的Session的保持,Cookie的引导能力相对欠缺。
2、redis集群的原理,redis分片是怎么实现的,你们公司redis用在了哪些环境?
笔者回答:reids集群原理:
其实它的原理不是三两句话能说明白的,redis 3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
redis分片:
分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储。分片部署方式一般分为以下三种:
(1)在客户端做分片;这种方式在客户端确定要连接的redis实例,然后直接访问相应的redis实例;
(2)在代理中做分片;这种方式中,客户端并不直接访问redis实例,它也不知道自己要访问的具体是哪个redis实例,而是由代理转发请求和结果;其工作过程为:客户端先将请求发送给代理,代理通过分片算法确定要访问的是哪个redis实例,然后将请求发送给相应的redis实例,redis实例将结果返回给代理,代理最后将结果返回给客户端。
(3)在redis服务器端做分片;这种方式被称为“查询路由”,在这种方式中客户端随机选择一个redis实例发送请求,如果所请求的内容不再当前redis实例中它会负责将请求转交给正确的redis实例,也有的实现中,redis实例不会转发请求,而是将正确redis的信息发给客户端,由客户端再去向正确的redis实例发送请求。
redis用在了哪些环境:
java、php环境用到了redis,主要缓存有登录用户信息数据、设备详情数据、会员签到数据等
3、你会怎么统计当前访问的IP,并排序?
笔者回答:统计用户的访问IP,用awk结合uniq、sort过滤access.log日志就能统计并排序好。一般这么回答就够了,当然你还可以说出其它方式来统计,这都是你的加分项。
4、你会使用哪些虚拟化技术?
笔者回答:vmware vsphere及kvm,我用得比较多的是vmware vsphere虚拟化,几本上生产环境都用的vmware vsphere,kvm我是用在测试环境中使用。vmware 是属于原生架构虚拟化技术,也就是可直接在硬件上运行。kvm属于寄居架构的虚拟化技术,它是依托在系统之上运行。vmware vcenter
管理上比较方便,图形管理界面功能很强大,稳定性强,一般比较适合企业使用。KVM管理界面稍差点,需要管理人员花费点时间学习它的维护管理技术。
5、假如有人反应,调取后端接口时特别慢,你会如何排查?
笔者回答:其实这种问题都没有具体答案,只是看你回答的内容与面试官契合度有多高,能不能说到他想要的点上,主要是看你排查问题的思路。我是这么说的:问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。
6、mysql数据库用的是主从读写分离,主库写,从库读,假如从库无法读取了、或者从库读取特别慢,你会如何解决?
笔者回答:这个问题笔者觉得回答的不太好,对mysql比较在行的朋友希望能给点建议。以解决问题为前提条件,先添加从库数量,临时把问题给解决,然后抓取slow log ,分析sql语句,该优化就优化处理。慢要不就是硬件跟不上,需要升级;要不就是软件需要调试优化,等问题解决在细化。
7、cpu单核和多核有啥区别?
笔者回答:很少有面试官会问这样的问题,即然问到了,也要老实回答。还好笔者之前了解过CPU,我是这么说的:双核CPU就是能处理多份任务,顺序排成队列来处理。单核CPU一次处理一份任务,轮流处理每个程序任务。双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。
8、机械磁盘和固态硬盘有啥区别?
笔者回答:我擦,啥年代了,还问磁盘的问题,这面试官有点逗啊。那也要回答啊:
HDD代表机械硬盘,SSD代表固态硬盘。首先,从性能方面来说,固态硬盘几乎完胜机械硬盘,固态硬盘的读写速度肯定要快机械硬盘,因为固态硬盘和机械硬盘的构造是完全不同的(具体的构造就没必要解释了)。其次,固态盘几乎没有噪音、而机械盘噪音比较大。还有就是,以目前的市场情况来看,一般机械盘容量大,价格低;固态盘容量小,价格偏高。但是企业还是首选固态盘。
9、说一下用过哪些监控系统?
笔者回答:这个监控的问题又问到了,笔者在2018年1月4号也被问到类似这样的问题,笔者曾经用过zabbix、nagios、 cacit等。但是在这次面试中只说用过zabbix和nagios。说完了之后,面试官就让我说一下这两个监控有啥区别:
从web功能及画图来讲:
Nagios简单直观,报警与数据都在同一页面, 红色即为问题项。Nagios web端不要做任何配置。 Nagios需要额外安装插件,且插件画图不够美观。
Zabbix监控数据与报警是分开的,查看问题项需要看触发器,查看数据在最新数据查看。而且zabbix有很多其它配置项, zabbix携带画图功能,且能手动把多个监控项集在一个图中展示。
从监控服务来讲:
Nagios自带的监控项很少。对一些变动的如多个分区、多个网卡进行监控时需要手动配置。
Zabbix自带了很多监控内容,感觉zabbix一开始就为你做了很多事,特别是对多个分区、多个网卡等自动发现并进行监控时,那一瞬间很惊喜,很省心的感觉。
从批量配置和报警来讲:
Nagios对于批量监控主机,需要用脚本在server端新增host,并拷贝service文件。 Nagios用脚本来修改所有主机的services文件,加入新增服务。
Zabbix在server端配置自动注册规则,配置好规则后,后续新增client端不需要对server端进行操作。 Zabbix只需手动在模板中新增一监控项即可。
总体来讲:
Nagios要花很多时间写插件,Zabbix要花很多时间探索功能。
Nagios更易上手,Nagios两天弄会,Zabbix两周弄会。
Zabbix画图功能比Nagios更强大
Zabbix对于批量监控与服务更改,操作更简洁;Nagios如果写好自动化脚本后,也很简单,问题在于写自动化脚本很费神。
10、给你一套环境,你会如何设计高可用、高并发的架构?
笔者回答:如果这套环境是部署在云端(比如阿里云),你就不用去考虑硬件设计的问题。可直接上阿里云的SLB+ECS+RDS这套标准的高可用、高并发的架构。对外服务直接上SLB负载均衡技术,由阿里的SLB分发到后端的ECS主机;ECS主机部署多台,应用拆分在不同的ECS主机上,尽量细分服务。数据库用RDS高可用版本(一主一备的经典高可用架构)、或者用RDS金融版(一主两备的三节点架构)。在结合阿里其它的服务就完全OK,业务量上来了,主机不够用了,直横向扩容ECS主机搞定。
如果这套环境托管在IDC,那么你就要从硬件、软件(应用服务)双面去考虑了。硬件要达到高可用、高并发公司必须买多套网络硬件设备(比如负载设备F5、防火墙、核心层交换、接入层交换)都必须要冗余,由其是在网络设计上,设备之间都必须有双线连接。设备如果都是跑的单机,其中一个设备挂了,你整个网络都瘫痪了,就谈不上高可用、高并发了。其次在是考虑应用服务了,对外服务我会采用成熟的开源方案LVS+Keepalived或者Nginx+Keepalived,缓存层可以考虑redis集群及Mongodb集群,中间件等其它服务可以用kafka、zookeeper,图片存储可以用fastDFS或MFS,如果数据量大、又非常多,那么可采用hadoop这一套方案。后端数据库可采用 “主从+MHA”。这样一套环境下来是绝对满足高可用、高并发的架构
⑤ lvs+keepalived怎么处理dos攻击
被DoS攻击时的现象大致有:
* 被攻击主机上有大量等待的TCP连接;
* 被攻击主机的系统资源被大量占用,造成系统停顿;
* 网络中充斥着大量的无用的数据包,源地址为假地址;
* 高流量无用数据使得网络拥塞,受害主机无法正常与外界通讯;
* 利用受害主机提供的服务或传输协议上的缺陷,反复高速地发出特定的服务请求,使受害主机无法及时处理所有正常请求;
* 严重时会造成系统死机。
到目前为止,防范DoS特别是DDoS攻击仍比较困难,但仍然可以采取一些措施以降低其产生的危害。对于中小型网站来说,可以从以下几个方面进行防范:
主机设置:
即加固操作系统,对各种操作系统参数进行设置以加强系统的稳固性。重新编译或设置Linux以及各种BSD系统、Solaris和Windows等操作系统内核中的某些参数,可在一定程度上提高系统的抗攻击能力。
例如,对于DoS攻击的典型种类—SYN Flood,它利用TCP/IP协议漏洞发送大量伪造的TCP连接请求,以造成网络无法连接用户服务或使操作系统瘫痪。该攻击过程涉及到系统的一些参数:可等待的数据包的链接数和超时等待数据包的时间长度。因此,可进行如下设置:
* 关闭不必要的服务;
* 将数据包的连接数从缺省值128或512修改为2048或更大,以加长每次处理数据包队列的长度,以缓解和消化更多数据包的连接;
* 将连接超时时间设置得较短,以保证正常数据包的连接,屏蔽非法攻击包;
* 及时更新系统、安装补丁。
防火墙设置:
仍以SYN Flood为例,可在防火墙上进行如下设置:
* 禁止对主机非开放服务的访问;
* 限制同时打开的数据包最大连接数;
* 限制特定IP地址的访问;
* 启用防火墙的防DDoS的属性;
* 严格限制对外开放的服务器的向外访问,以防止自己的服务器被当做工具攻击他人。
⑥ lvs fullnat 必须编译内核么
fullnat开源已经有一阵子了,内核版本为2.6.32-220.23.1.e16,项目地址http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY。本屌编译测试环境如下:
centos6.3 64位
编译过程参照官方做法,只是融入后续的打rpm包的部分。过程如下:
一、下载相关代码:
下载 kernel-2.6.32-220.23.1.el6.src.rpmlinux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
lvs-fullnat-synproxy.tar.gz
二、编译内核
1、安装kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
2、生成内核源码
默认的,你会在root家目录下看到rpmbuild目
1
2
cd ~/rpmbuild/SPECS
rpmbuild -bp kernel.spec
3、对生成的内核源码打patch默认的
1
2
3
4
5
6
7
8
9
10
#在/usr/local/src下解压linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
tar zxf linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
#打patch
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cp /usr/local/src/linux-2.6.32-220.23.1.el6.x86_64.lvs/lvs-2.6.32-220.23.1.el6.patch .
#淘宝将IP_VS改成了22,测试时遇到些麻烦,因此改为20了。
#vim .config
CONFIG_IP_VS_TAB_BITS=20
#你可以修改Makefile把内核的名称做下标记(line:4)
EXTRAVERSION = .FNAT.shanks.e27.x86_64
4、make
1
2
3
make -j16
make moles_install
make install;
5、配置grub.conf
1
2
#vim /boot/grub/grub.conf
default=0
三、reboot
reboot之后uname -r看下是不是你想要的内核。
四、打内核rpm包
1、安装kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh /usr/local/src/kernel-2.6.32-220.23.1.el6.src.rpm
2、生成内核源码目录
1
rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec
3、复制出一份内核源码目录
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
cp -a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new
4、为内核打fullnat的patch
1
2
3
cd linux-2.6.32-220.23.1.el6.x86_64_new/
patch -p1 < /usr/local/src/lvs-2.6.32-220.23.1.el6.patch
cp .config ~/rpmbuild/SOURCES/config-x86_64-generic
5、删除原来内核源码目录中的.config文件。
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
rm -rf .config
不删的话,会在最后打rpm时遇到报错
wKioL1NM8jWhm-LPAAK42XDh8KU043.jpg
6、打自己的patch
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
diff -uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ../../SOURCES/lvs-2.6.32-220.23.1.el6.patch
7、编辑kernel.spec
1
2
3
4
5
6
7
8
9
vim ~/rpmbuild/SPECS/kernel.spec
line:9 打上个版本号
%define dist .e27
line:22 打上个名称的标记
%define distro_build fnat.shanks
line:605 标记下自己的patch
Patch999999: lvs-2.6.32-220.23.1.el6.patch
line:915 让自己的patch生效
ApplyOptionalPatch lvs-2.6.32-220.23.1.el6.patch
8、打rpm
1
rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=x86_64 SPECS/kernel.spec
1
2
3
4
5
6
7
8
9
10
11
12
在这里如果遇到这样的报错:
+ cp /root/rpmbuild/SOURCES/Mole.kabi_x86_64 /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi
+ /root/rpmbuild/SOURCES/check-kabi -k /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi -s Mole.symvers
*** ERROR - ABI BREAKAGE WAS DETECTED ***
The following symbols have been changed (this will cause an ABI breakage):
register_ip_vs_scheler
unregister_ip_vs_scheler
+ exit 1
error: Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
可以在rpmbuild的时候加上--without kabichk
参考:https://fedoraproject.org/wiki/Building_a_custom_kernel/zh-cn
http://wiki.centos.org/HowTos/Custom_Kernel
⑦ 服务器集群,负载均衡,分布式等问题
集群和负载均衡的区别如下:
1、集群(Cluster)
所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信?应用程序可以通过网络共享内存进行消息传送,实现分布式计算机?
2、负载均衡(Load Balance)
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去?这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性?
3、特点
(1)高可靠性(HA)?利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务?
(2)高性能计算(HP)?即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析?化学分析等?
(3)负载平衡?即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求?
LVS系统结构与特点
1. Linux Virtual Server:简称LVS?是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性?高可靠性?高性能和高可用性的体系?许多商业的集群产品,比如RedHat的Piranha? Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的?
2. 体系结构:使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器?物理服务器之间可以通过高速的 LAN或分布在各地的WAN相连?最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器?
3. LVS的三种模式工作原理和优缺点: Linux Virtual Server主要是在负载均衡器上实现的,负载均衡器是一台加了 LVS Patch的2.2.x版内核的Linux系统?LVS Patch可以通过重新编译内核的方法加入内核,也可以当作一个动态的模块插入现在的内核中?
⑧ VS2015 win32 编译的时候 createwindow不支持 LVS_REPORT类型。
用ctrl+f5运行试试
⑨ linux的什么内核版本中包括了lvs
要自己手动编译的。
根据不同版本内核,下载不同的lvs版本,
高的linux版本兼容低的lvs版本。反过来就有问题。
lvs官网地址:http://www.linuxvirtualserver.org/