keepalived实现高可用LVS

前言

vrrp介绍:

 vrrp(Virtual Router Redundancy Protocol)虚拟路由冗余协议;就是把多个路由器或多个网关设备加入到组中,然后在这一组中虚拟出一个路由器,此虚拟路由器有真是的IP和MAC地址,客户端将网关指向此虚拟路由器的IP;客户端向此虚拟路由器的IP和MAC地址发起请求时,由活动路由器负责响应;当活动路由器发生故障时,由备份路由器响应客户端请求,同时备份路由器转变为活动路由器,从而实现客户端网关无缝切换,保证客户端无感知情况下正常上网。 

keepalived介绍:

 keepalived就是vrrp协议在Linux主机上以守护进程方式的实现,能根据配置文件生成ipvs规则,不需要ipvsadm客户端工具,还能对后端real server主机做健康状态检查,当real sever主机发生故障时,自动从ipvs中删除;当故障real server恢复后,还可以自动加入到ipvs中;从而实现业务正常运转。

keepalived官方结构图如下所示:

     Software Design.gif

一、安装配置keepalived高可用lvs

1、实验环境:

1.png

keepalived主机:

  node1: 172.16.2.14/24

  node2:172.16.2.13/24

web主机:

  node3:172.16.2.12/24

Virtual:

 Virtaul 1:172.16.2.15/24

2、安装keepalived:

# yum -y  install keepalived

2.1配置keepalived:

node1配置:

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {   \\全局定义
   notification_email {  \\定义邮件的接收者
     node1@mylinux.com
         node2@mylinux.com
   notification_email_from root@mylinux.com  \\定义邮件的发送者
   smtp_server 127.0.0.1  \\定义邮件发送服务器
   smtp_connect_timeout 30 \\定义与邮件服务器的连接超时时长
   router_id LVS_DEVEL  \\定义主机名称,默认即可
}

vrrp_instance mylinux_1 {  \\定义实例,名称为mylinux_1
    state BACKUP   \\为备份节点
    interface eth0  \\工作在eth0接口
    virtual_router_id 51  \\虚节点路由id,每个实例节点id不能相同
    priority 98  \\优先级,
    advert_int 1  \\定义vrrp间隔时间
    authentication {  \\定义认证类型以及秘钥
        auth_type PASS  \\常用的认证类型有PASS||AH
        auth_pass 111122233334444  \\定义秘钥
    }
    virtual_ipaddress {  \\定义虚拟ip地址,也就是VIP地址
        172.16.2.15/24 dev eth0 label eth0:0 
    }\\可以直接使用172.16.2.15不加其他选项是只能使用ip addr list查看,加上此参数可以使用ifconfig查看
    virtual_routers {  定义路由
        172.16.2.15/24 dev eth0:0   \\定义主机路由
   }
}
virual_server 172.16.2.15 80 {  \\定义ipvs
   dealay_loop 6   \\定义时延
   lb_algo rr  \\调度方法,常用的调度方法有rr|wrr|lc|wlc|lblc|sh|dh
   lb_kind DR  \\ipvs的工作类型
   persistence_timeout 10  \\持久连接为10s,可根据需求自定义
   protocol TCP  \\ipvs的协议

   sorry_server 127.0.0.1 \\当后端所有real_server故障,使用本机web响应信息

   real_server 172.16.2.12 80 {  \\添加后端主机real_server
      weight 1   \\定义权重
      HTTP_GET {   \\在应用层,对后端real_server健康检测
           url {   
            path /  \\请求的url为根路径
            status_code 200  \\当返回的状态码为200时则证明此real_server正常;可以使用digest做校验,前提是事先利用genhash对请求的url做hash,然后将结果保存到此位置
           }  
          connect_timeout 3  \\后端real_server连接超时时长
          nb_get_retry 3  \\确定当重试多少次之后连接不到后端real_server认为其发生故障
          delay_before_retry 3 \\在尝试去连接时的时间间隔
         }
     }
}

node2节点配置:

[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     node1@mylinux.com
     node2@mylinux.com
   }
   notification_email_from root@mylinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance mylinux_1 {
    state MASTER  \\此处MASTER,为主节点
    interface eth0
    virtual_router_id 51
    priority 100   \\优先级比backup要高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111122233334444
    }
    virtual_ipaddress {
        172.16.2.15/24 dev eth0 label eth0:0
    }
    virtual_routers {
        172.16.2.15/24 dev eth0:0
   }
}
virual_server 172.16.2.15 80 {
   dealay_loop 6
   lb_algo rr
   lb_kind DR
   persistence_timeout 10
   protocol TCP

   sorry_server 127.0.0.1

   real_server 172.16.2.12 80 {
      weight 1
      HTTP_GET {
           url {
            status_code 200
           }
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
         }
     }
}

3、在node3安装httpd服务

3.1安装httpd服务

[root@node3 ~]# yum -y install httpd

3.2添加默认文档

[root@node3 ~]# echo "<h1>test keepalived</h1>" >/var/www/html/index.html

3.3 修改node3的相关参数:

[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

3.4 配置vip地址和主机路由:

[root@node3 ~]# ifconfig lo:0 172.16.2.15 broadcast 172.16.2.15 netmask 255.255.255.255 up
[root@node3 ~]# route add -host 172.16.2.15 dev lo:0

3.5 启动httpd

[root@node3 ~]# /etc/init.d/httpd start

3.5 访问测试http是否可以正常访问

2.png

4、 启动keepalived

4.1 启动

[root@node1 ~]# /etc/init.d/keepalived start; ssh node2 '/etc/init.d/keepalived start '

4.2 查看vip地址,ipvs规则

6.png 

7.png

4.3访问测试:

5.png

5、知识扩展:

参考/usr/share/doc/keepalived-1.2.13/samples/目录下的文件,可以参考里面的文件自定检查脚本

例如:

在全局中定义检查:
vrrp_script chk_nginx {
    killall -0 nginx   \\检查nginx进程,如果错误此主机在keepalived中的权重减去5,检查时间间隔为5s
    interval 1
    weight -5
  }
}
vrrp_script chk_haproxy {\\检查haproxy进程,如果错误此主机在keepalived中的权重减去5,检查时间间隔为5s
    killall -0 haproxy
    interval 1
    weight -5
  }
   vrrp_script chk_keealived_down {\\当/etc/keepalived/目录中有down文件时,则此服务器再keepalived中的权限将会减5,检查时间间隔为5s
  [[ -f /etc/keepalived/down ]] && exit 1 || exit 0
  interval 1
  weight -5
}
在实例中引用:
 track_script {  \\在实例中调用此检查脚本
      chk_nginx
      chk_haproxy
      chk_keepalived_down
    }

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6384

(0)
上一篇 2015-07-21 21:57
下一篇 2015-07-24 21:53

相关推荐

  • N22-第二周作业-对Linux的基础操作命令的理解及用法示例

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 Linux上文件管理类命令常用的有:pwd、ls、cd、cp、touch、mv、rm、rmdir   1)pwd:显示当前工作目录     2)ls:列出指定目录下的内容    常用的选项有:   -a:列出目录中的所有文…

    Linux干货 2016-08-22
  • Linux网络管理之网卡别名及网卡绑定配置

    在日常的运维工作当中,有时候需要在一块物理网卡上配置多个IP地址,这就是网卡子接口的概念,以及多块网卡实现网卡的绑定,通俗来讲就是多块网卡使用的一个IP地址,下面我来详细说明实现的过程。 &创建网卡子接口 在CentOS系统当中网络是由NetworkManager这个服务来管理的,它提供了一个图形的界面,但此服务不支持物理网卡子接口的设置,所以在配置网卡子接…

    系统运维 2016-09-02
  • yum的简单配置与使用

    yum 的基本配置与使用 1、yum:是rpm包管理器的前端工具,它是基于C/S结构,就客户端服务器模式 2、yum使用前需先配置好服务端的仓库(yum源) 3、yum客户端是通过文件传输协议来获取到yum源上的软件包的,yum一共支持四种传输协议 http:// https:// ftp:// file:// (这是一个本地路径,当yum源为本地光盘时,使…

    Linux干货 2017-06-11
  • DNS常用配置解析反向解析

    什么是域名解析库文件?     是指将我们访问的域名解析成IP返回给本主机,然后本机拿着解析后IP去访问服务器,而解析格式就放在域名解析库文件中。DNS解析分为正向解析和反向解析    正向解析就是将域或域名解析成对应的IP地址,反之则相反,通过IP解析成域名 &nbs…

    Linux干货 2017-05-31
  • N22-妙手-第七周博客作业第四题:RAID各级别的特性

    什么是RAID RAID的全称是Redundant Array of Independent Disks – 独立磁盘冗余阵列。基本思想是将多个相对便宜的硬盘组合成为一个硬盘阵列,使其在性能上达到或超过一块价格昂贵、容量巨大的硬盘。RAID通常被用在服务器上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统会把其当做一块硬盘。RAID分为不同的等…

    Linux干货 2016-09-27