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

相关推荐

  • N22-第六周作业

    请详细总结vim编辑器的使用并完成以下练习题      vim是模式化的文本编辑器。在不同模式下,每一次按键的效果都不一样。vim有三种工作模式,分别是编辑模式,插入模式和末行模式。编辑模式是打开vim后的默认模式,用于查看文本或进行复制,粘贴,删除等编辑命令。插入模式是为了向文本中输入信息。末行模式是vim自带的命令行接口,能…

    Linux干货 2016-09-26
  • ContOS 7 安装

    在虚拟机中安装ContOS 7,自定义4个分区
    虚拟机使用ISO镜像文件安装,网络使用桥接模式,内存大小设置为1224MB(安装桌面比较大)

    2018-03-13
  • N25-第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@zf ~]# grep -E "^(root|fedora)\>" /etc/passwd | cut -d: -f1,7   &nbs…

    Linux干货 2016-12-27
  • N26-第三周博客作业

    1、  列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 命令:who | cut -d' ' -f1 | sort –u 涉及知识点: l  who命令 作用:查看当前所有的登录会话 l  cut命令 作用:将文本内容按照指定内容分割,然后取出指定字段。 常用选项: &…

    Linux干货 2017-02-10
  • 马哥教育网络班20期+第二周课程练习

    Table of Contents 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 目录管理 文件管理 2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。 脚本返回值 命令或路径补全和展开 3、请使用命令行展开功能来完成以下练习: (1)、创建/tmp目录下的:a_c, a_d, b_c, b (2…

    Linux干货 2016-06-23
  • 马哥linux0801课程内容

    0801课堂笔记 硬链接和软链接最根本的区别 硬链接是同一个文件,而软链接是两个文件 软链接查询到文件的软链接个数.比较麻烦. 而硬链接的个数可以通过链接数就可以看到. 硬链接不能跨分区,而软链接可以跨分区 (因为每个分区都有自己的inode表) ln 创建硬链接 ln–s 创建软链接(软链接如果使用相对路径,对象是相对软链接的路径,而硬…

    Linux干货 2016-08-04