Linux自学笔记——keepalived

本文部分参考博客:http://blog.51cto.com/1992tao/1869869

一、        VRRP协议

1.      技术优点;

VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

VRRP具有如下优点:

1)      简化网络管理。在具有多播或广播能力的局域网(如以太网)中,借助VRRP能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。

2)      适应性强。VRRP报文封装在IP报文中,支持各种上层协议。

3)      网络开销小。VRRP只定义了一种报文——VRRP通告报文,并且只有处于Master状态的路由器可以发送VRRP报文。

2.      相关术语

1)      虚拟路由器:有一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当做默认网关。

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

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

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

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

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

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

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

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

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

3.      VRRP工作过程

虚拟路由器示意图:

VRRP工作过程为:

1)      虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;

2)      Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;

3)      如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;

4)      虚拟路由器状态发生切换时,Master路由器由一台设备切换为另一台设备,新的Master路由器只是简单的发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

5)      Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式决定是否重新选举Master。

由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:

Master路由器的选举;

Master路由器状态的通告;

同时,为了提高安全性,VRRP还提供了认证功能;

4.      Master路由器的选举

VRRP根据优先级来确定虚拟路由器中的每台路由器的角色(Master路由器或者Backup路由器)。优先级越高,则越有可能称为Master路由器。

初始化创建路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级;

1)      如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;

2)      如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占称为Master状态,周期性发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;

3)      如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。

VRRP优先级的取值范围为0-255(数值越大表明优先级越高),可配置的范围是1-254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给ip地址拥有者使用。当路由为IP地址拥有者时,其优先级始终为255.因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。

5.      Master路由器的状态的通告。

Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。

Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time,计算方式为:(256-Backup路由器的优先级)/256,单位为秒。

当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。

在 性 能 不 够稳定的网络中, Backup 路由器可能因为网络堵塞而在Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。

6.      认证方式

VRRP提供了三种认证方式:

1)      无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障。

2)      简单字符认证:在一个有可能收到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。

3)      MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在Authentication Header(认证头)中。收到的VRRP报文的路由器会利用认证字解密报文,检查改报文的合法性。

二、        Keepalived

1.      keepalived简介;

1)      keepalived是VRRP协议在linux主机上以守护进程方式的实现;

2)      能够根据配置文件自动生成ipvs规则;

3)       对个RS做健康状态监测;

2.      组件

vrrp  stack

checkers

ipvs wrapper  -- > ipvs

3.      配置文件的组成部分;

GLOBAL CONFIGURATION

VRRPD CONFIGURATION

vrrp instance

vrrp synchronization group

LVS CONFIGURATION

4.      HA Cluster的配置前提;

1)      本机的主机名,要于hostname(uname -n)获得名称保持一致;

Centos 6:/etc/sysconfig/network

Centos 7:hostnamectl  set-hostname  HOSTNAME

2)      各节点时间同步;

3)      确保iptables及selinux不会成为服务阻碍;

5.      配置格式;

virtual_ipaddress {

<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

}

nopreempt:非抢占模式;默认为抢占模式;

vrrp_sync_group VG_1 {

group {

VI_1   # name of vrrp_instance (below)

VI_2  # One for each moveable IP.

}

}

vrrp_instance VI_1 {

eth0

vip

}

vrrp_instance VI_2 {

eth1

dip

}

示例1:单主模型配置keepalived实现高可用

1.      配置环境准备;

两台主机,这里选择的两台centos7的主机,主机名分别为node1,node2,ip地址分别为192.168.19.141, 192.168.19.142;

为了两台主机通信的方便,首先配置两个节点通过主机名并基于密钥认证的ssh服务完成通信;

1)      在两台节点主机上分别在hosts文件中添加名称解析;

2)      通过ssh生成密钥对;

3)      复制公钥文件至node2;

4)      再次尝试远程node2无需密码;

在配置前还需达到以下几点要求:

1)      本机的主机名,要于hostname(uname -n)获得名称保持一致;

Centos 7:hostnamectl  set-hostname  HOSTNAME

2)      各节点时间同步;

3)      确保iptables及selinux不会成为服务阻碍;

2.      安装keepalived,编辑node1的配置文件;

Note:编辑配置文件前记得先备份,再编辑,便于恢复;

3.      将node1编辑好的配置文件复制给node2,再次编辑node2的配置文件;

Note:主要修改以上内容,修改状态为备用节点,和优先级为99

4.      测试;

1)      启动节点1上的keepalived;利用systemctl status keepalived查看日志;

        查看node1的ip地址,地址已经在使用;

2)      启动node2节点的keepalived,观察日志;

        查看node2的ip地址:

3)      现在我们手动down掉node1的keepalived服务,可以发现配置的虚拟ip地址被移除;

        查看node2的日志和ip地址,可以发现地址被成功配置在node2上:

4)      我们再次手动启动node1的keepalived服务,观察node1日志和地址转移情况,可以发现地址再次转移到node1上;

观察node2的日志和地址转移情况:可以发现地址再次被移除;

示例2 :双主模型配置keepalived实现高可用;

1.       在上面的基础上编辑node1的配置文件,添加一个虚拟路由器;

2.      配置node2的配置文件;

3.      测试

1)      重启两个节点的keepalived服务,观察日志文件,及地址转移情况;

        Node1的日志和地址转移情况:获得地址192.168.19.160;

        Node2的日志和地址转移情况:获得地址192.168.19.161;

2)      跟上面一样,我们手动关闭node1的keepalived服务,观察日志和地址转移情况;

        Node1的日志和地址转移情况:ip地址被移除;

        Node2的日志和地址转移情况:两个虚拟地址都转到了node2节点上;

3)      再次启动node1的keepalived服务,测试观察;

        Node1节点再次获得192.168.19.160地址;

        Node2节点上192.168.19.160这个地址被移除,只剩192.168.19.161这个地址:

在vi中的主机状态发生改变生发送通知:

# notify scripts, alert as above

notify_master <STRING>|<QUOTED-STRING>

notify_backup <STRING>|<QUOTED-STRING>

notify_fault <STRING>|<QUOTED-STRING>

notify <STRING>|<QUOTED-STRING>

smtp_alert

示例3:编辑通知脚本使其在主备节点发生转换时发送邮件;

1.      编辑脚本文件,并赋予脚本执行权限;

2.      编辑配置文件定义通知脚本;

3.      重启node1,查看邮件;

示例4:Keepalived实现优先级动态调整;

Keepalived可以调用外部脚本进行资源监控,并根据监控结果实现优先级动态调整;

1.      在node1上定义脚本,如果在/etc/keepalived/目录下存在down文件,将节点的优先级减10,编辑配置文件;然后也同时把编辑的内容添加到node2的配置文件中;

2.      在两个节点的/etc/keepalived目录下新建脚本文件,内容如下。并赋予执行权限;

3.      测试;

1)      在node1的/etc/keepalived/目录下新建一个down文件,观察地址转移情况;

Node1失去了地址:

Node2获得地址:

2)      删除down文件;node1重新获得了地址

三、     配置keepalived高可用ipvs和nginx服务

具体用法可以使用man keepalived.conf命令查看。

示例1:配置单主模型keepalived高可用ipvs-dr集群

1.      准备实验环境

四台虚拟机,两台作为director,两台作为real server,在director上配置keepalived+lvs-dr实现高可用;

实验拓扑图如下:

两台director的vip为192.168.19.160(即虚拟ip地址),两台real server的vip也为192.168.19.160,RS1的rip为192.168.19.134,RS2的rip为192.168.19.143

1)      配置RS1主机的vip地址及内核参数,在这里可编写一个脚本;

        给脚本赋予执行权限,执行脚本,查看IP地址,路由以及内核参数;

2)      将RS1的配置脚本发送给RS2,并执行脚本查看;

3)      给RS1和RS2提供网页测试文件(一般centos6主机httpd默认已安装);

        RS1网页测试文件:

        RS2网页测试文件:

2.      配置node1(director1)上的keepalived,使其自动生成ipvsadm定义的规则;

1)      配置node1上的keepalived配置文件;

2)      配置node2节点上的keepalived配置文件;

3)      启动两台rs server的web服务,和启动两台director的keepalived服务;

Note:保证四台主机的iptables和selinux不会影响演示。

3.      测试;

1)      查看node1的keepalived日志等信息,自动生成了ipvs规则;

2)      查看node2上的keepalived服务日志等信息,发现自动生成了ipvs规则,但没有获取到虚拟ip地址;

3)      用客户端访问测试;

4)      手动关闭RS1的web服务,再次测试;

Node上的ipvs规则定义的后端主机只剩一个;

客户端测试:

5)      重启RS1上的web服务,手动关闭node1的keepalived服务;

Node2获取到ip地址,集群规则为两台RS:

客户端测试:依旧能负载均衡后端rs server

6)      如果后端的两台RS同时down掉,我们可以在director上定义一个sorry_server,用来提醒用户,集群服务出现故障。在上面的配置文件中,我们已经定义好了sorry server,现在提供sorry server网页文件和开启两台node的web服务。

7)      Down掉两台RS的web服务,再次测试;

再Down掉node1的keepalived服务;

8)      再次启动node1的keepalived,和RS1;

只要有一个rs启动,sorry server就会下线。

示例2:keepalived高可用nginx服务

1.      实验环境

四台虚拟主机,两台upstream server,两台nginx服务器作为反向代理调度器,并配置keepalived实现高可用nginx;

upstream server1:192.168.19.143;

upstream server2:192.168.19.134;

node1:192.168.19.141

node2:192.168.19.142

虚拟ip(vip):192.168.19.160

2.      两台node节点服务器配置;

1)      在/etc/nginx/nginx.conf文件中,两台nginx服务器配置upstream模块,定义后端web服务器组并定义反向代理;(两台nginx配置相同)

2)      配置keepalived服务,在这里因为nginx的原因,所以无需再配置virtual server去定义后端主机;

Node1节点:

Node2节点:

3.      测试;

1)      开启node1,node2节点上的nginx和keepalived服务;

Node1:成功获取到地址;

Node2:

2)      开启两台upstream server的web服务,用客户端测试;

3)      Down掉node1的keepalived服务,重新访问测试;

Node1丢失ip地址:

客户端访问,服务不收影响;

4.      如果是nginx服务出现故障而不是keepalived服务故障,这时IP地址不会出现转移,我们需要一个外部脚本监控nginx服务,一旦出现nginx服务故障,立即调用脚本,降低优先级转移ip地址;

1)      Node1:编写监控nginx服务运行状况脚本;

Node1:编辑keepalived配置文件:

2)      将脚本文件复制给node2下的/etc/keepalived/目录下,并编辑node2的keepalived配置文件;

3)      重启keepalived服务,手动kill掉node1上的nginx服务,ip地址丢失;

观察node2获取到了ip地址;

客户端测试,依旧可以访问;

4)      当nginx服务出现故障时,我们一种方法就是立即去手动修复或重启服务,如果不想手动去操作,可以编辑通知脚本,在主节点变为MASTER和BACKUP时,都重启nginx服务;

手动杀掉nginx进程,node1丢失地址,过了一会,又重新抢占了地址;

 

原文地址:http://blog.51cto.com/claude666/2068199

时间: 2024-11-10 14:51:58

Linux自学笔记——keepalived的相关文章

linux自学笔记--lvs和keepalived高可用基础

1.lvs负载方式 静态:仅根据算法 (1)RR 轮询 (2)WRR 加权轮询 (3)SH 源地址哈希,以KV结构将一个用户的访问会话绑定至固定一台服务器,可视为负载均衡集群保持会话方式之一. (4)DH 目标地址哈希,列:用DH给代理服务器做负载均衡,内网主机访问网页时,会议KV结构存储用户IP和网站地址,提高代理服务器的缓存命中率. 动态:根据算法以及各RS当前负载状态 (1)LC:最少连接,活动连接数*256+非活动连接 (2)WLC:默认方式,加权最少连接(活动连接数*256+非活动连接

Linux自学笔记--基础命令date,cal等

逆水行舟,不进则退: date命令: 我们可以来man一下date命令,可以在上面看出 date的含义为 - print or set the system date and time,我们从以下几方面对date命令进行阐述. 1.   显示时间 date[OPTION]... [+FORMAT] format:格式符号 %D: %F: %T: 在屏幕中输入单独的date命令可以显示系统的时间: 同时我们也可以显示自己想要的时间显示格式: 2.   设置时间 date[-u|--utc|--un

linux自学笔记——RAID级别特性以及软RAID的实现

RAID,Redundant Arrays of Inexpensive Disks 廉价冗余磁盘阵列,又称为Redundant Arrays of Independent Disks,独立冗余磁盘阵列. 其基本原理就是利用多块较小的磁盘通过不同的组织方式,组成一个大的磁盘组,以提高磁盘的IO能力和耐用性.由于组织方式不同,所以把RAID分为多个级别.而最常用的是RAID0,RAID1,RAID5,RAID6,RAID10,RAID01.下面我们将对以上的级别进行比较分析. 级别:level R

Linux自学笔记——Centos启动流程

Centos启动流程大概为:POST --> Boot Sequence(BIOS)--> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs (readonly)-->switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端.

Linux自学笔记——Selinux简介

SElinux是美国国家安全局(NSA)对于强制访问控制的实现,是linux历史上最杰出的新安全子系统.NSA是在Linux社区的帮助下开发的一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在它的任务中所需要的文件.SElinux默认安装在Fedora和RedHat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到. DAC,自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给其他人而具有任意的访问权

Linux自学笔记——linux文件系统

Linux的文件系统 根文件系统(rootfs),内核挂载的第一个文件系统,在启动流程的这一篇文章里有提到: LSB,FHS(Filesystem  Herirache Standard) 常用的文件系统目录:/etc,/usr,/var,/root/,/home,/dev 目录介绍:(以下截图很多是目录内容的部分截图) /boot:引导文件存放目录,内核文件(vmlinuxz).引导加载器(bootloader,grub)都存放于此目录: /bin:供所有用户使用的基本命令:不能关联至独立分区

Linux自学笔记——计算机基础以及命令帮助的获取

计算机基础知识: 计算机的主要组成部分: 运算器.控制器.存储器.输入设备.输出设备 CPU:运算器,控制器 bus:总线 memory: 编址存储设备 IO:与外部部件交互 程序的运行模式: 用户空间:user space,us 内核空间:system space POS:Portable OperationSystem POSIX API:编程接口: 运行程序格式: Windows:EXE,dll(dynamic link library) Linux:ELF,so(shared objec

Linux 自学笔记——内核管理初步及编译

Linux Kernel: 内核设计体系:单内核.微内核: 内核的组成部分: 1.Kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release: 2.Kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/,maninfo命令通过读取此文件的信息以显示相关信息: 内核模块与内核核心版本一定要严格匹配: []:N: [M]:Module,编译进模块中: [*]:Y,编译进内核

Linux自学笔记——grub应用

GRUB(Boot Loader) GRUB,GRand Unified Bootlader ,是一个来自GUN项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统.GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数. grub版本: grub 0.x:grub(legacy) centos 5,6 grub 1.x:grub2              centos 7 grubleg