一、简介

负载平衡是一种在真实服务器集群中分配IP流量的方法,可提供一个或多个高度可用的虚拟服务。在设计负载均衡拓扑时,重要的是要考虑负载均衡器本身的可用性以及它背后的真实服务器。用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。

Keepalived为负载平衡和高可用性提供了框架。负载平衡框架依赖于众所周知且广泛使用的Linux虚拟服务器(IPVS)内核模块,该模块提供第4层负载平衡。Keepalived实现了一组健康检查器,以根据其健康动态地自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现高可用性。VRRP是路由器故障转移的基础砖块。此外,keepalived实现了一组挂钩到VRRP有限状态机,提供低级别和高速协议交互。每个Keepalived框架可以独立使用或一起使用,以提供弹性基础设施。

在这种情况下,负载平衡器也可以被称为导向器或LVS路由器。

简而言之,Keepalived提供了两个主要功能:

  • 健康检查LVS系统
  • 实施VRRPv2堆栈以处理负载均衡器故障转移

Keepalived使用四个Linux内核组件:

  1. LVS框架:使用getsockopt和setsockopt调用来获取和设置套接字上的选项。
  2. Netfilter框架:支持NAT和伪装的IPVS代码。
  3. Netlink接口:设置和删除网络接口上的VRRP虚拟IP。
  4. 组播:将VRRP通告发送到保留的VRRP MULTICAST组(224.0.0.18)。


上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
**内核空间:**主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。
用户空间:

  • WatchDog:负载监控checkers和VRRP进程的状况
  • VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
  • Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
  • IPVS wrapper:用户发送设定的规则到内核ipvs代码
  • Netlink Reflector:用来设定vrrp的vip地址等。
    Keepalived的所有功能是配置keepalived.conf文件来实现的。

二、安装keepalived

2.1 方法一:yum方式

1、yum安装

安装依赖包
[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
[root@localhost ~]# yum install -y keepalived

2、初始化及启动

[root@localhost ~]# systemctl start keepalived   //启动keepalived
[root@localhost ~]# systemctl enable keepalived  //加入开机启动keepalived
[root@localhost ~]# systemctl restart keepalived  //重新启动keepalived
[root@localhost ~]# systemctl status keepalived   //查看keepalived状态

2.2方法二、源码包

1、官网下载keepalived的最新版本,解压并安装

[root@master src]# pwd
/usr/local/src
[root@master src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@master src]# tar xvf keepalived-2.0.7.tar.gz
[root@master src]# cd keepalived-2.0.7
[root@master keepalived-2.0.7]# ./configure --prefix=/usr/local/keepalived
[root@master keepalived-2.0.7]# make && make install

完成后会在以下路径生成:

/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived

2、初始化及启动

# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
[root@localhost /]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived # 将keepalived主程序加入到环境变量(安装目录下)
[root@localhost /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
[root@localhost /]# cp /usr/local/src/keepalived-2.0.7/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived# 将配置文件放到默认路径下
[root@localhost /]# mkdir /etc/keepalived
[root@localhost /]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 加为系统服务:chkconfig –add keepalived
  • 开机启动:chkconfig keepalived on
  • 查看开机启动的服务:chkconfig –list
  • 启动、关闭、重启service keepalived start|stop|restart

三、keepalived.conf配置文件说明

keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板:

#全局定义块
global_defs {# 邮件通知配置notification_email {email1email2}notification_email_from emailsmtp_server hostsmtp_connect_timeout numlvs_id stringrouter_id string    ## 标识本节点的字条串,通常为hostname
}
#VRRP 实例定义块
vrrp_sync_group string { group {stringstring}
}vrrp_instance string {state MASTER|BACKUPvirtual_router_id numinterface stringmcast_src_ip @IP priority numadvert_int numnopreemptsmtp_alertlvs_sync_daemon_interface string authentication {auth_type PASS|AHauth_pass string}virtual_ipaddress {  # Block limited to 20 IP addresses @IP@IP@IP}
}
#虚拟服务器定义块
virtual_server (@IP PORT)|(fwmark num) { delay_loop numlb_algo rr|wrr|lc|wlc|sh|dh|lblc lb_kind NAT|DR|TUNpersistence_timeout num protocol TCP|UDPreal_server @IP PORT { weight numnotify_down /path/script.shTCP_CHECK { connect_port num connect_timeout num}}real_server @IP PORT {weight numMISC_CHECK {misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)}}real_server @IP PORT {weight numHTTP_GET|SSL_GET {url { # You can add multiple url block path alphanumdigest alphanum}connect_port numconnect_timeout num nb_get_retry num delay_before_retry num}}
}

全局定义块

1、email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。
2、lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。
3、router_id:用户标识本节点的名称,通常为hostname
4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,因此很容易遗漏结尾处的花括号,这点需要特别注意。

VRRP实例定义块

  • vrrp_sync_group:同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪
  • group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致
  • vrrp_instance:vrrp实例名
    1> state:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。
    2> interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
    3> mcast_src_ip:本机IP地址
    4> virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
    5> priority:节点优先级,取值范围0~254,MASTER要比BACKUP高
    6> advert_int:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
    7> lvs_sync_daemon_inteface:负载均衡器之间的监控接口,类似于 HA HeartBeat 的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口
    8> authentication:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。
    9> smtp_alert:有故障时是否激活邮件通知
    10> nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。
    11> virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。

虚拟服务器virtual_server定义块

  • virtual_server:定义一个虚拟服务器,这个ip是virtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。
    1> delay_loop:健康检查时间间隔,单位:秒
    2> lb_algo:负载均衡调度算法,互联网应用常用方式为wlc或rr
    3> lb_kind:负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。
    4> persistence_timeout:http服务会话保持时间,单位:秒
    5> protocol:转发协议,分为TCP和UDP两种
  • real_server:真实服务器IP和端口,可以定义多个
    1> weight:负载权重,值越大,转发的优先级越高
    2> notify_down:服务停止后执行的脚本
    3> TCP_CHECK:服务有效性检测

    • connect_port:服务连接端口
    • connect_timeout:服务连接超时时长,单位:秒
    • nb_get_retry:服务连接失败重试次数
    • delay_before_retry:重试连接间隔,单位:秒

Linux下Keepalived安装与配置相关推荐

  1. Linux下Keepalived 安装与配置 此博文包含图片

    来源:http://blog.sina.com.cn/s/blog_6dbc8a680100u1s7.htmlUAN  Keepalived 安装与配置 一.环境说明 1.操作系统内核版本:2.6.9 ...

  2. linux安装DNS服务命令,Linux下的安装和配置DNS服务器

    Linux下的安装和配置DNS服务器 发布时间:2008-09-08 17:03:00   作者:佚名   我要评论 在Linux操作系统中使用BIND (Berkeley Internet Name ...

  3. webmin升级php,Centos linux下webmin安装及配置

    Centos linux下webmin安装及配置 2012-1-30 18:14 Monday 分类:Linux 评论(49) 浏览(18247) webmin是一个用浏览器来管理系统的工具. 1.下 ...

  4. 图解MySQL在Linux下的安装与配置

    MySQL简介 MySQL是最流行的RDBMS(Relational Database Management System:关系数据库管理系统)之一,被广泛地应用在互联网上的中小型网站中.关联数据库将 ...

  5. linux下gitolite-admin安装和配置

    linux下gitolite-admin安装和配置 1.安装git    [root@iZwz9c0doj0taonyrldlc3Z ~]# yum install git -y 2.创建git用户  ...

  6. 安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...

    安装说明 安装环境:CentOS-6.3 安装方式:yum安装.rpm源码安装 软件:ftp-0.17-51.1.el6.x86_64.rpm 下载地址:http://pan.baidu.com/s/ ...

  7. jenkins持续集成(一): 在Linux下的安装与配置

    撸了今年阿里.网易和美团的面试,我有一个重要发现.......>>>  前提: 安装了JDK,并配置好环境变量:JAVA_HOME 安装了Maven,并配置好环境变量:MAVEN_H ...

  8. linux下elasticsearch 安装、配置及示例

    简介  开始学es,我习惯边学边记,总结出现的问题和解决方法.本文是在两台linux虚拟机下,安装了三个节点.本次搭建es同时实践了两种模式--单机模式和分布式模式.条件允许的话,可以在多台机器上配置 ...

  9. Linux下Tomcat安装和配置

    1.前提(JDK环境) Tomcat的安装需要JDK环境,如何配置JDK环境见我的文章Linux下Java环境配置,所以在安装Tomcat之前需要先检测JDK环境是否配置好. 进入命令行界面,输入ja ...

最新文章

  1. linux修改文件所属用户和组
  2. 完全卸载Oracle方法(亲测有效)
  3. QML 编程之旅 -- QML程序的基本结构概念
  4. 自定义图片验证码认证过滤器
  5. JavaScript实现单词首字母大写的方法集锦
  6. Vulhub 靶场安装
  7. Html中value和name属性的作用
  8. python编辑器_没有人比它更懂少儿编程,慧编程Python'吮指编辑器'
  9. 别再面向 for 循环编程了,JDK 自带的观察者模式就很香!
  10. 关于静态资源压缩技术
  11. 下载部署和管理Windows Azure应用程序评估
  12. 【微信公众平台开发】之一:入门与BAE3.0下操作
  13. MUI - 图片预览(perviewimage)的优化
  14. linux 安卓svn,linux安装svn
  15. win11如何设置始终以管理员身份运行 windows11设置始终以管理员身份运行的方法步骤
  16. 【eclipse】Multiple annotations found at this line:——解决方法
  17. 56)函数模板的基本语法
  18. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
  19. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用 一
  20. cmd中文乱码解决方案

热门文章

  1. 提高项目执行力的六板斧
  2. SAP Basis: 从SAP GUI杀死进程
  3. ABAP中接收.NET语言byte[]类型返回值问题
  4. 轻松构建复杂数据集,永洪自服务数据查询功能详解
  5. 抖音:我“弱”我有理
  6. c++ eos智能合约开发_TrustBase平台智能合约的开发与实现
  7. fpga初始化错误_一种SRAM型FPGA单粒子效应加固平台设计
  8. html源码md风格,code/html.md at master · Rongx/code · GitHub
  9. centos7 ifconfig命令找不到_分享一个解决 sudo 命令找不到环境变量的小技巧
  10. dann的alpha torch_一图解密AlphaZero(附Pytorch实践)