这些英文缩写你知道是什么职位么(PM,RD,FE,UE,UI,QA,OP,DBA)

PM
项目经理( Project Manager )
从职业角度,是指企业建立以项目经理责任制为核心,对项目实行质量、安全、进度、成本管理的责任保证体系和全面提高项目管理水平设立的重要管理岗位。项目经理是为项目的成功策划和执行负总责的人。
项目经理是项目团队的领导者,项目经理首要职责是在预算范围内按时优质地领导项目小组完成全部项目工作内容,并使客户满意。为此项目经理必须在一系列的项目计划、组织和控制活动中做好领导工作,从而实现项目目标。
当然在互联网公司这个有着项目经理or产品经理的意思。

RD
研发(Research and Development)
如:软件RD工程师就是软件研发工程师,诸如PHP程序猿,Java程序猿,无论是爱疯的还是安卓的都是属于这一类别。偏向于后端的技术实现。

FE
前端(Front-End);前端开发(Front-End Development)
FE是web前端研发、前端开发的意思!

UE
用户体验(User Experience,简称UX或 UE)
是一种纯主观的在用户使用一个产品(服务)的过程中建立起来的心理感受。因为它是纯主观的,就带有一定的不确定因素。
个体差异也决定了每个用户的真实体验是无法通过其他途径来完全模拟或再现的。但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计的实验来认识到。
计算机技术和互联网的发展,使技术创新形态正在发生转变,以用户为中心、以人为本越来越得到重视,用户体验也因此被称做创新2.0模式的精髓。
另外还有有个组合叫法:UED(产品交互设计师,用户体验师)。

UI
用户界面(User Interface)
UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由、充分体现软件的定位和特点。
UI还有其它的意义,如Unit Interval,Univ of Iowa,Unlock Instruction,Urgent Interrupt。

QA
测试(QUALITY ASSURANCE,中文意思是“质量保证”)
其在ISO8402:1994中的定义是“为了提供足够的信任表明实体能够满足质量要求,而在质量管理体系中实施并根据需要进行证实的全部有计划和有系统的活动”。有些推行ISO9000的组织会设置这样的部门或岗位,负责ISO9000标准所要求的有关质量保证的职能,担任这类工作的人员就叫做QA人员。

OP
运维(Operations)
OP这个词语代表的意思很多,这个简称来自于英文的Operations一词。我也不清楚谁最早用op代表运维工程师,不过2010年开始,这个词慢慢被很多人所知道。
OP工作内容主要就是维护公司的服务器能够正常提供服务,细分的话包括系统部分,网络部分,应用程序部分,数据库部分,具体根据公司的规模和职位职能不同,运维的定义也不同。现在市面上主要的OP有三种:网络游戏运维,网站运维,大型项目测试和生产环境运维。

DBA
数据库管理员(Database Administrator,简称DBA)
是一个负责管理和维护数据库服务器的人。数据库管理员负责全面管理和控制数据库系统。这个职位对不同的人意味着不同的意义。
另外还有DB,既数据库(Database)。

还有就是互联网产品设计常用文档类型的缩写: BRD、MRD、PRD、FSD等

MRD
市场需求文档(Market Requirements Document)
获得老大的认同后,产品进入实施,需要先出MRD,具体来说要有更细致的市场与竞争对手分析,通过哪些功能来实现商业目的,功能/非功能需求分哪几块,功能的优先级等等。实际工作中,这个阶段PD可能的产出物有Mind Manager的思维图,Excel的Feature List等。
市场需求文档(MRD)重点放在为一个被提议的新产品或者现有产品的改进定义市场需求。与BRD指出商业问题和解决这些问题的解决方案不同,MRD更深入提议解决方案的细节。它包括一些或者所有这些细节:
a. 解决商业问题所需要的特色
b. 市场竞争分析
c. 功能和非功能需求
d. 特色/需求的优先级
e. 用例
MRD通常是由拥有产品经理,产品营销经理或者行业分析师头衔的人撰写的。MRD通常是一份连续的5-25页Word文档,或者正如之后描述那样在一些机构中甚至更长。

PRD
产品需求文档(Product Requirements Document)
进步一细化,这部分是PD写得最多的内容,也就是传统意义上的需求分析,我们这里主要指UC(use case)文档。主要内容有,功能使用的具体描述(每个UC一般有用例简述、行为者、前置条件、后置条件、UI描述、流程/子流程/分支流程,等几大块),Visio做的功能点业务流程,界面的说明,demo等。Demo方面,可能用dreamweaver、ps甚至画图板简单画一下,有时候也会有UI/UE支持,出高保真的demo,开发将来可以直接用的那种。
产品需求文档(PRD)重点放在为一个被提议的新产品或者现有产品的改进定义市场需求。与MRD侧重于从市场需要角度看需求的不同,PRD侧重于从产品本身角度看待需求。通常在特点和功能需求上更深入细节,并也可能包括屏幕截图和用户界面流程。在那些MRD不包括具体需求和用例的机构中,PRD就包含这些具体内容。PRD通常是由拥有产品经理,行业分析师或者产品分析师头衔的人撰写的。PRD通常是一份连续的20-50页Word文档,或者针对复杂产品甚至更长。
提醒:一些机构将这里描述的MRD和PRD合并成一个文档,并称最后的文档为MRD。在这种情况下,MRD包括本段描述的内容,也包括上一段描述PRD的内容,并且可能超过50页。

FSD
功能详细说明(Functional Specifications Document)
有一点像“概要设计”,这步就开始往开发衔接了,产品UI、业务逻辑的细节都要确定,细化文档并保持更新。相应的,有很多内容,比如表结构设计,要由项目经理来编写了。
功能规格文档(FSD)把焦点集中在实现,定义产品功能需求的全部细节。FSD可能通过一张张的截屏和一条条功能点来定义产品规格。这是一份可以直接让工程师创建产品的文档。
与MRD和PRD侧重于以市场需要和产品角度看需求不同,FSD把重点放在了以表格形式定义产品细节,再让工程师实现这些细节。FSD也可能包括完整的屏幕截图和UI设计细节。
FSD通常是由拥有产品分析师,工程领导或者项目经理头衔的人撰写的 – 作者通常属于工程部门。通常一个连续几十页的Word或类似文档。

今年我23岁

我们今年23岁,

每天起床的时间从中午12点变成早上7点,睡觉的时间从凌晨2点变成了晚上11点;

我们今年23岁

开始工作,开始接触形形色色的人;

我们今年23岁,

下班路过学校,看见学校放学,我们会怀念我们上学的时候;

我们今年23岁,

见到亲戚朋友,他们不再问你考试考了几分,更多的是问现在一个月工资多少;

我们今年23岁,

聊天的话题,从各种网络游戏变成汽车、房子,吃饭的时候讨论的往往是他准备结婚,她哪年结婚;

我们今年23岁,

每天不再感叹学校有多少作业做不完,开始感叹油价、房价涨的有多快;

我们今年23岁,

不再乱买东西,月底开始算计这个月还了信用卡,还了房贷,还剩下多少钱;

我们今年23岁,

渐渐地讨厌酒吧、KTV,喜欢亲近自然,喜欢健康的生活方式;

我们今年23岁,

偶尔会有寂寞,偶尔会挂念一个人;

我们今年23岁,

我们开始追逐梦想,不会再轻易流泪,不会再为了一点挫折而放弃;

我们今年23岁,

没有了年少的轻狂,把遇到的挫折困难都当成一种人生的阅历,试着去包容,试着去忍耐;

我们今年23岁,

回想起曾经,我们做过了太多的错事,走了太多的弯路,我们总在后悔,可是我们回不去了,回去不那个曾经纯真的年代了。当我们被社会上无形的压力压的喘不过气的时候,我们渴望爱,渴望每天下班了能有个人一起吃饭,一起看电影,我们需要一个人来为我们分担些东西。我们在一条伟大的航路上,我们需要有人为我们鼓劲,也许我们偶尔累到会想放弃,可是当我们想到身边还有一个让我们牵挂的人,深吸一口气,继续向前走,总有一个能停靠的彼岸。

Linux运维水平自测(来自Linu运维学院)

1.【单选题】Linux 操作系统的核心是什么?
A. Shell
B. Kernel
C. Command
D. script
答案: B

答案解析:

内核(Kernel)是Linux 操作系统的核心。Shell是一个命令行解释器,命令(Command)是针对计算机的指令,脚本(script)是存储在文件中的命令的集合,终端(Termial)是命令行接口。
2.【单选题】挑出来一个与众不同的来。
A. HP-UX
B. AIX
C. OSX
D. Slackware
答案: D
答案解析:
Slackware。 HP-UX, AIX, OSX, Solaris 分别是由 HP, IBM, APPLE, Oracle 开发的,并且都是UNIX的变种. Slackware 则是一个Linux操作系统。
3.【单选题】在python语言中,条件控制语句是下列中哪个:
A. or
B. if
C. IF
D. for
答案: B答案解析
if在python中,就是条件控制语句,和一些其他语言是类似的
4.【单选题】下面哪个是python中类的标识符:
A. class
B. def
C. int
D. type
答案: A答案解析
class 见名知意,是类的标识符,我们在python中使用class来创建类,学习对象
5.【单选题】有一些文件root用户也无法直接修改,可使用说明命令看其权限( )
A. ls -lh
B. file
C. stat
D. lsattr
答案: D答案解析
选D用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。
6.【单选题】Linux上为了使用更多简洁操作,可以使用别名来简化命令,以下别名定义正确的是( )
A. LS=‘ls -lh’
B. set cnet ‘cd /etc/sysconfig/network-scripts/ifcfg-eth0’
C. alias die=‘rm -fr’
D. unalias die=‘rm -fr’
答案: C答案解析
选C ,alias 是用来设置别名的,允许使用更短的名称来重新定义Linux当中的shell命令来简化输入
7.【单选题】a = 1, b = a << 2 ,下面选项中,正确的是:
A. b = 2
B. a = 2
C. b = 4
D. b = 1
答案: C答案解析
<<在python中是左移两位的意思,左移两位就是要乘两个2,得出来是4
8.【单选题】在python3.x版本中,有两个整数,使用下面哪个操作符可以得出浮点数结果:
A. +
B. //
C. /
D. *
答案: C答案解析
在python3.x,进行除法运算的两个数,不论这两个数是整型或是浮点型,除法的结果都会变成float,浮点型
9.【单选题】NFS是 什么系统。
A. 文件
B. 磁盘
C. 网络文件
D. 操作
答对了
答案: C答案解析
NFS是Network File System的简写,属于网络文件系统,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
10.【单选题】在python中,如何跳出本次循环:
A. continue
B. break
C. shutdown
D. go in
答案: A答案解析
continue在python的循环语句中用来跳出本次循环,属于关键字
11.【单选题】下列哪个程序通常与 NameNode 在一个节点启动?
A. SecondaryNameNode
B. DataNode
C. TaskTracker
D. Jobtracker
答案: D答案解析
hadoop的集群是基于master/slave模式,namenode和jobtracker属于master,datanode和tasktracker属于slave,master只有一个,而slave有多个SecondaryNameNode内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode运行在不同的机器上。

交换机的MAC地址学习和ARP协议

1. 首先我们来看看交换机,swith(交换机)

今天就先讲讲交换机和网桥的区别。这两个设备都工作在第2层

主要区别是,交换机的转发速度较快,是硬件的转发,端口数比较多

下面直接来看交换机的学习功能 , 也就是交换机的MAC地址学习. 下面我们设想一个模型,有A,B,C,D这四台PC接在一台交换机上, 首先交换机最初加电时它里面的MAC地址表为空,也就是还没学习,在学习的最初状态. 首先,比如A发给D一个数据, 这个时候交换机首先在连接A那台PC的端口上学习到A的MAC地址,并且把这个MAC地址记录到交换机里的MAC地址表里, 但是这个时候交换机并不知道D是在哪,因为MAC表里还没有D的MAC. 这个时候怎么办呢?交换机会复制多份这个数据(多帧复制),向交换机的所有端口都转发这个数据(除A接的那个端口外),这个称为泛洪,flooding 。当B和C接到这个数据时,首先检查目的地址,发现不是发给我的,那么就丢弃这个帧 . 当D接到这个帧时,发现这是发给自己的,然后D便会发给A数据,这个时候交换机在D的接口又学习到了D的MAC地址 , 这个时候交换机学习到了两条MAC地址。

2. 下面继续讲ARP协议

当数据包到网络层的时候,这个时候会继续向下层数据链路层封装,这个时候要找寻目的的MAC地址. 因为在第2层,也就是交换机工作的那层是不不知道什么叫IP地址呢,交换机始终是靠MAC地址找寻的 .

列举:

还是那个开始的那个模型,当A发数据给D。这个时候,在网络层只知道D的IP地址,那么怎么获取D的MAC地址,从而让交换机把数据发送到D的MAC地址呢?这个时候A便会发送arp,,注意一点,交换机本身是不会主动发送ARP的。那么在ARP这个报文里包含了啥东东呢?ARP报文里有源MAC地址,(也就是A的MAC地址),源IP地址,目的IP地址(也就是D的IP地址),目的MAC地址这个时候为全F,,因为这个arp是一个广播嘛。全F的MAC地址就是一个广播,因为这个时候A不知道D的mac地址,所以要发送一个广播,通知全部的PC,找寻D的MAC地址 ,怎么发送给全部同网段的PC呢?就是靠全F的mac地址。也叫flooding,我说了泛洪只是一个形象的比喻书法。当D接到这个ARP请求后,发现是找自己的,那么就返回一条ARP回应给A,告诉自己的MAC地址 ,全F的MAC地址就是广播。这个时候A的arp表便记录了D的ip地址和mac地址的对应关系。这样便顺利的发送给了D这台机子的物理地址,mac。交换机的学习是交换机自己多帧复制,不是靠广播实现,ARP是PC发送ARP广播。在A的arp表项里会记录D的ip和mac的对应关系,这个arp表在ms的系统里好像是15分钟刷新一次。

总结:交换机通过局域网主机发送的ARP数据包,学习MAC地址。

Linux系统管理员面试50题

大多数Python程序都是要在服务器端运行的,而服务器端主要的操作系统是Linux.学习Linux系统管理是你成为大牛程序员的必经之路,让我们看看成为Linux系统管理员都需要具备哪些知识和技能?

  1. 命令nslookup是做什么的?
  2. 你如何把CPU占用率最高的进程显示出来?
  3. 如果检查Linux上开放的端口,并将不用的端口屏蔽掉?
  4. 什么是Linux?它和Unix有什么不同?
  5. 详细描述Unix系统启动的过程?
  6. 如何修改文件权限,如何创建一个只读文件?
  7. 详细介绍SUDO命令,它的缺点是什么?
  8. UDP和TCP之间有什么区别?
  9. 描述Linux机器启动的顺序.
  10. 设计一个3层的Web应用.
  11. 概述你如何将互联网流量导入子网.
  12. 你对虚拟化了解吗?它好用吗?
  13. 不同级别的RAID有什么不同?对于Web服务器和数据库服务器你会使用哪一级别的RAID?
  14. 说出开源社区最近的一些开发进展.
  15. 你是否向开源项目做过贡献?
  16. 系统工程师和系统管理员有什么区别?解释一下?
  17. 列出一些系统专家不道德的行为.
  18. 通常情况下Linux系统的交换分区是多大?
  19. 没有名字的目录在Linux系统中表示什么?
  20. 如何列出目录中的所有文件,包括隐藏文件?
  21. 如何添加一个没有登录权限的新的系统用户?
  22. 说明什么是硬链接?硬链接被删除会发生什么?
  23. 系统管理员执行这条命令会发生什么:chmod 444 chmod?
  24. 如何找出一个Linux系统的共有IP和私有IP?
  25. 用bash发邮件如何带附件?
  26. 说出一些在服务器上使用的Linux发行版.
  27. 说明在Linux上重新安装Grub的最简便的方式?
  28. 什么是记录,NS记录,PTR记录,CNAME记录,和MX记录?
  29. 什么是僵尸进程?做什么会导致僵尸进程?
  30. 我们什么时候选择使用脚本,而不是编译型程序?
  31. 如何创建一个简单的主从集群?
  32. 删除一个文件链接的源文件会发生什么?
  33. FTP服务器如何限制访问IP?
  34. 说明Linux的目录结构,/usr/local文件夹里放的是什么?
  35. 什么是git?解释它的结构和工作原理?
  36. 你如何在中午十二点发一封邮件给100个人?
  37. 描述ZFS文件系统.
  38. 如何修改Linux系统的默认运行级别?
  39. 如何修改Linux的内核参数?
  40. 说明SSH和Telnet之间的区别.
  41. 你如何虚拟化一个Linux物理机?
  42. 告诉我一些古怪的Linux命令.
  43. 解释HTTPS的工作原理.
  44. 你知道tor浏览器么?解释它的原理.
  45. 如何在下次启动机器的时候触发强制系统检查?
  46. 你喜欢什么备份技术?
  47. 解释一些SWAP分区.
  48. 解释一下ping死亡攻击.
  49. 你如何嗅探IP包的内容.
  50. OSI层次结构如何确保数据包抵达正确的地址?

    欢迎大家和我一起探讨答案!

Keepalived高可用集群实践

keepalived

1、keepalived初识

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

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面的节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

keepalived软件的官网是:www.keepalived.org

2、keepalived服务的三个重要功能

  • 管理LVS负载均衡软件

早期的LVS软件,需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能,为了解决LVS的这些使用不便的问题,keepalived就诞生了,可以说,Keepalived软件起初是专为解决LVS的问题而诞生的。因此,Keepalived和LVS的感情很深,它们的关系如夫妻一样,可以紧密的结合,愉快的工作。Keepalived可以通过读取自身的配置文件实现通过更底层的接口直接管理LVS的配置以及控制服务启动、停止等功能,这使得LVS的应用更加简单方便了。LVS和Keepalived的组合应用此文暂不讨论。

  • 实现对LVS集群节点健康检查功能(healthcheck)

Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把他们加入到正常转发队列中,对客户提供服务。

  • 作为系统网络服务的高可用功能(failover)

Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、Nginx反向代理这样的服务器。

Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时 ,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

3、Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP(Virtual Route Redundancy Protocol,虚拟路由冗余协议)来实现的。

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点 也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

那么什么是VRRP呢?

VRRP,全称为Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

VRRP早期是用来解决交换机、路由器等设备单点故障的,下面是交换、路由的Master和Backup切换原理描述,同样也适用于Keepalived的工作原理。

在一组VRRP路由器集群中,有多台物理VRRP路由器,但是这多台物理的机器并不是同时工作的,而是由一台称为Master的机器负责路由工作,其他的机器都是Backup。Master角色并不是一成不变的,VRRP会让每个VRRP路由参与竞选,最终获胜的就是Master。获胜的Master有一些特权,比如拥有虚拟路由器的IP地址等,拥有系统资源的Master负责转发发送给网关地址的包和相应ARP请求。

VRRP通过竞选机制来实现虚拟路由的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址为224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的mac地址:00-00-5E-00-01-{VIDR}。所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因Master的改变而修改自己的路由配置。对他们来说,这种切换是透明的。

在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包(VRRP Advertisement messages),此时Backup不会抢占Master。当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master。这种抢占是非常快速的(可能只有1s甚至更少),以保证服务的连续性。出于安全性考虑,VRRP数据包使用了加密协议进行了加密。

4、keepalived高可用服务单实例实战

配置keepalived主服务器lb01 Master

[code lang=”bash”]

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id <span style="color: #ff0000;">lb01</span>
}

vrrp_instance VI_1 {
state <span style="color: #ff0000;">MASTER</span>
interface eth0
<span style="background-color: #00ffff;">virtual_router_id 51</span>
priority <span style="color: #ff0000;">150</span>
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.100.200/24 dev eth0 label eth0:1
}
}

[/code]

实战配置keepalived备服务器lb02 BACKUP

[code lang=”bash”]
! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id <span style="color: #ff0000;">lb02</span>
}

vrrp_instance VI_1 {
state <span style="color: #ff0000;">BACKUP</span>
interface eth0
<span style="background-color: #00ffff;">virtual_router_id 51</span>
priority <span style="color: #ff0000;">100</span>
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.100.200/24 dev eth0 label eth0:1
}
}

[/code]

5、关于Keepalived高可用服务器的“裂脑”问题
什么是裂脑:
由于某些原因,导致两台高可用服务器对在指定的时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并且在正常运行,这样就会导致同一个IP或服务在两段同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两段的数据不一致或造成数据丢失,这种情况就被成为裂脑。

导致裂脑的原因:

  1. 高可用服务器之间心跳线链路发生故障,导致无法正常通信。
  2. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。
  3. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  4. 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件bug等。

注意:Keepalived配置里同一VRRP实例如果virtual_route_id两端参数配置不一致,也会导致烈脑问题的发生。