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
下一篇 2015-07-24

相关推荐

  • grub legacy、内核编译

    grub legacy grub: GRandUnified Bootloader    grub 0.x: grub legacy    grub 2.x: grub2 grub legacy:        stage1: m…

    Linux干货 2016-09-13
  • 软连接与硬连接

    硬链接定义 新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用. 硬链接(hard link) ln   UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本。系统简单地通过在目录中建立一个新的登记项来实现这种连接。该登记项…

    Linux干货 2017-07-22
  • 集中练习1-10个Linux运维脚本

    用户管理、文本处理、文件管理相关

    2017-09-20
  • Mozart的剑(文本处理工具)——贰剑(head、tail、cut、sort、uniq、wc、diff、paste、patch)

    有点拖了,没有好好整理之前的内容,拖延症害死人….. 这次介绍一些有趣的小文本处理工具,可以方便截取文本内容、排序、备份之类的。 head 用法:head [选项]… [文件]… head[OPTION]…[FILE]… 默认将每个指定文件的头10行显示到标准输出。如果指定了多于一个文件,在每一段输…

    Linux干货 2017-08-02
  • find命令总结

    用途:     find命令用来在文件层级结构中搜索跟条件匹配的文件 语法:     find [OPTIONS] [查找起始路径] [查找条件] [处理动作]     查找起始路径:指定具体搜索起始路径。默认为当前目录  &nb…

    Linux干货 2016-09-19
  • 马哥教育网络班21期-第九周课程练习

    "1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i login_user=0 declare -i nologin_user=0 whil…

    Linux干货 2016-09-15