LVS+Keepalived双主模型的实现

拓扑结构:

Client LVS1 LVS2 RS1 RS2
192.168.2.1 DIP 192.168.2.128 VIP 192.168.2.198 DIP 192.168.2.129 VIP 192.168.2.199 192.168.2.130 192.168.2.131

实现双主模型我们需要配置两个虚拟路由器组,也就是每台主机需要配置两段 vrrp_instance,每个虚拟接口配置虚拟IP,LVS1与LVS2的同一组virtual_router_id内互为主备,这里如果不明白可以查看VRRP的实现原理或者稍后看配置信息,RS1与RS2在双主模式下需要配置两组路由,当收到来自VIP1的请求交给lo:0的网卡处理,收到来自VIP2的请求交给lo:1的网卡处理

上配置:

###########################           LVS1配置          ######################### 

yum install nginx -y
echo "对不起,服务器正在维护..‘ > /usr/share/nginx/html/index.html
systemctl start nginx

! Configuration File for keepalived

global_defs {           ##对于邮件报警,先简单配置为本地的邮箱,而且这里的邮件报警也比较鸡肋,后面我们借助keepalive调用脚本的能力再开发报警或者借助zabbix这种专业级程序
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1                   ##设置为主机名,唯一
   vrrp_mcast_group4 224.0.0.112     ##组播地址
}

###  配置虚拟IP配置区域 

vrrp_instance VI_1 {
    state MASTER                    #状态分为MASTER | BACKUP
    interface eno16777736           ##浮动ip绑定在哪一个物理接口
    virtual_router_id 31            ##虚拟路由器id,和另一台设置为一致
    priority 100                    ##优先级
    advert_int 1                    ##心跳检测频率,默认1s
#    nopreempt                       ##非抢占模式
    authentication {
        auth_type PASS
        auth_pass f1GDsVH6      ##VRRP组播,和同一组虚拟vip保持一致
    }
    virtual_ipaddress {
        192.168.2.198/24 dev eno16777736 label eno16777736:1    ##设置vip地址
    }

    notify_master "/etc/keepalived/scripts/notify.sh master"      ##状态变更为master时执行脚本
    notify_backup "/etc/keepalived/scripts/notify.sh backup"     ##状态变更为backup时执行脚本
    notify_fault "/etc/keepalived/scripts/notify.sh fault"     ##状态发生故障时执行脚本
}

vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 32
    priority 98
    advert_int 1
#    nopreempt
    authentication {
        auth_type PASS
        auth_pass f1GDsV78
    }
    virtual_ipaddress {
        192.168.2.199/24 dev eno16777736 label eno16777736:2
    }

    notify_master "/etc/keepalived/scripts/notify.sh master"      ##状态变更为master时执行脚本
    notify_backup "/etc/keepalived/scripts/notify.sh backup"     ##状态变更为backup时执行脚本
    notify_fault "/etc/keepalived/scripts/notify.sh fault"     ##状态发生故障时执行脚本

}

###  LVS规则配置区域
##由于是双主模型,我们需要配置两组VIP的集群,当LVS2宕机时,LVS2虚拟IP漂移到本机,我们需要LVS1上有192.168.2.199的集群配置,反之LVS2也要配置192.168.2.198的集群配置

virtual_server 192.168.2.198 80 {
    delay_loop 1
    lb_algo wlc
    lb_kind DR
#   persistence_timeout 300
    protocol TCP
    sorry_server 127.0.0.1 80
  real_server 192.168.2.130 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

  real_server 192.168.2.131 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

}

virtual_server 192.168.2.199 80 {
    delay_loop 1
    lb_algo wlc
    lb_kind DR
#   persistence_timeout 300
    protocol TCP
    sorry_server 127.0.0.1 80
  real_server 192.168.2.130 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

  real_server 192.168.2.131 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }
}

###########################           LVS2配置          #########################
yum install nginx -y
echo "对不起,服务器正在维护..‘ > /usr/share/nginx/html/index.html
systemctl start nginx

! Configuration File for keepalived

global_defs {           ##对于邮件报警,先简单配置为本地的邮箱,而且这里的邮件报警也比较鸡肋,后面我们借助keepalive调用脚本的能力再开发报警或者借助zabbix这种专业级程序
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2                   ##设置为主机名,唯一
   vrrp_mcast_group4 224.0.0.112     ##组播地址
}

vrrp_instance VI_1 {
    state BACKUP                    #状态分为MASTER | BACKUP
    interface eno16777736           ##浮动ip绑定在哪一个物理接口
    virtual_router_id 31            ##虚拟路由器id,和另一台设置为一致
    priority 98                     ##优先级
    advert_int 1                    ##心跳检测频率,默认1s
#    nopreempt                       ##非抢占模式
    authentication {
        auth_type PASS
        auth_pass f1GDsVH6      ##VRRP组播,和同一组虚拟vip保持一致
    }
    virtual_ipaddress {
        192.168.2.198/24 dev eno16777736 label eno16777736:1    ##设置vip地址
    }

    notify_master "/etc/keepalived/scripts/notify.sh master"      ##状态变更为master时执行脚本
    notify_backup "/etc/keepalived/scripts/notify.sh backup"     ##状态变更为backup时执行脚本
    notify_fault "/etc/keepalived/scripts/notify.sh fault"     ##状态发生故障时执行脚本
}

vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 32
    priority 100
    advert_int 1
#    nopreempt
    authentication {
        auth_type PASS
        auth_pass f1GDsV78
    }
    virtual_ipaddress {
        192.168.2.199/24 dev eno16777736 label eno16777736:2
    }

    notify_master "/etc/keepalived/scripts/notify.sh master"      ##状态变更为master时执行脚本
    notify_backup "/etc/keepalived/scripts/notify.sh backup"     ##状态变更为backup时执行脚本
    notify_fault "/etc/keepalived/scripts/notify.sh fault"     ##状态发生故障时执行脚本
}

virtual_server 192.168.2.198 80 {
    delay_loop 1
    lb_algo wlc
    lb_kind DR
#   persistence_timeout 300
    protocol TCP
    sorry_server 127.0.0.1 80
  real_server 192.168.2.130 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

  real_server 192.168.2.131 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

}

virtual_server 192.168.2.199 80 {
    delay_loop 1
    lb_algo wlc
    lb_kind DR
#   persistence_timeout 300
    protocol TCP
    sorry_server 127.0.0.1 80
  real_server 192.168.2.130 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }

  real_server 192.168.2.131 80{
    weight 1
    TCP_CHECK {
            connect_port 80
        connect_timeout 1
            nb_get_retry 2
        delay_before_retry 1
    }
  }
}

########################   RS1配置   ########################
yum install nginx -y
echo "192.168.2.130‘ > /usr/share/nginx/html/index.html
systemctl start nginx
## 执行脚本 set_lvs_rs.sh
bash set_lvs_rs.sh start

########################   RS2配置   ########################
yum install nginx -y
echo "192.168.2.131‘ > /usr/share/nginx/html/index.html
systemctl start nginx
## 执行脚本 set_lvs_rs.sh
bash set_lvs_rs.sh start

到此LVS+keepalived的双主模型已经完成,通过测试我们可以得到:
1、DNS轮巡,当LVS1与LVS2无异常时同时正常工作。
2、当LVS1或任意其中一台宕机时,浮动IP飘逸至另一台主机,两个VIP都仍然正常工作
3、当NGINX任意一台TCP 80端口4层检测不正常,keepalived自动将其从规则删除,反之自动添加
4、当NGINX同时全部宕机,keepalived临时提供sorry server
5、当vip发生变更keepalived将自动发送邮件通知管理员

set_lvs_rs.sh 脚本内容:

#!/bin/bash
#
vip1=‘192.168.2.198‘
vip2=‘192.168.2.199‘
mask=‘255.255.255.255‘

case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ifconfig lo:0 $vip1 netmask $mask broadcast $vip1 up
    ifconfig lo:1 $vip2 netmask $mask broadcast $vip2 up
    route add -host $vip1 dev lo:0
    route add -host $vip2 dev lo:1
    ;;
stop)
    ifconfig lo:0 down
    ifconfig lo:1 down

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ;;
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

notify.sh脚本内容:

[[email protected] scripts]# cat notify.sh
#!/bin/bash
#
contact=‘[email protected]‘

notify() {
        local mailsubject="$(hostname) to be $1, vip floating"
        local mailbody="$(date +‘%F %T‘): vrrp transition, $(hostname) changed to be $1"
        echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
        notify master
        ;;
backup)
        notify backup
        ;;
fault)
        notify fault
        ;;
*)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
esac

原文地址:http://blog.51cto.com/swiki/2342624

时间: 2024-09-29 22:38:50

LVS+Keepalived双主模型的实现的相关文章

haproxy+keepalived双主模型及动静分离的实现

实验目标: 1.haproxy统计页面的输出机制: 2.haproxy动静分离机制: 3.基于keepalived的高可用实现: 环境: vm8虚拟机 操作系统: centos 6.4 内核版本: 2.6.32-358.el6.x86_64 注: (1) 每个haproxy各有两块网卡,外网网卡选择Bridge,内网网卡选择Vmnet2; (2) 内部两台web服务器的网卡都是选择Vmnet2; 一.准备工作: 1.各节点IP地址相关设置 node1:  ifconfig eth1 192.16

keepalived 双主模型

keepalived 双主模型 双主模型是两台服务器互为主备,即一台为主备,另一台为备主,让两台服务器并行运行,也可以实现减轻单台keepalived主机上的压力.双主模型需要注意此时需要有2个VIP地址 keepalived 双主模型实现 准备主机2台 server hostname ip keepalived s1 172.20.27.10 keepalived s2 172.20.27.11 s1 节点配置 修改配置文件 [[email protected] ~]# vim /etc/ke

基于keepalived双主模型的高可用LVS

背景知识: keepalived:Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. LVS:LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 实验系统:CentO

mysql主从之LVS+keepalived+双主MySQL 负载均衡

LVS(Linux Virtual Server)即Linux 虚拟服务器,是一个的开源负载均衡项目,目前LVS 已经被集成到Linux 内核模块中.LVS 是四层负载均衡,也就是说建立在OSI 模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS 支持TCP/UDP 的负载均衡. 一 环境 192.168.132.120    VIP192.168.132.123   LVS01,keepalived192.168.132.124   LVS02,keepalived192.

centos6.5实现LVS+Keepalived双主热备

拓扑 1.   基本配置 根据拓扑配置IP 2.   调度器配置 -安装ipvsadm,并启用ip_vs模块 [[email protected] ~]# yum -y install ipvsadm [[email protected] ~]# modprobe ip_vs [[email protected] ~]# echo "modproce ip_vs" >>/etc/rc.local -修改内核参数 [[email protected] ~]# sysctl –

keepalived双主模型高可用+lvs-实例

拓扑图: 环境准备: Centos6.5x86_64 关闭防火墙和Selinux node5: eth0:192.168.1.190/24   VIP:192.168.1.121/24 node1:eth1:192.168.1.191/24   VIP:192.168.1.122/24 node2:RIP:eth0: 192.168.19.2/24 node3:RIP:eth0: 192.168.19.3/24   所有节点网关/DNS都为:192.168.1.1 每个服务器的hosts文件 #

keepalived双主模型实现高可用ipvs的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 说明: 主机操作系统为:CentOS-6.5-x86_64 准备工作 安装keepalived和ipvsadm 在IP地址为10.170.2.60和10.170.2.61两台主机上安装keepalived和ipvsadm # yum -y install keepalived # yum -y install ipvsadm 安装httpd 在IP地址为10.170.2.101和10

双主模型高可用负载均衡集群的实现(keepalived+lvs-dr)

实现keepalived双主模型lvs高可用集群 一.拓扑图 二.环境准备 两台负载均衡调度器,两台web服务器. 调度器A环境: VS:一张网卡 DIP:192.168.0.7/24 VIP(主):192.168.0.200 VIP(备):192.168.0.201 软件包:yum install -y keepalived ipvsadm nginx(作用:sorry-server服务) 调度器B环境: VS:一张网卡 DIP:192.168.0.8/24 VIP(主):192.168.0.

keepalived+nginx 双主模型实现高可用服务

一.keepalived的工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗协议. 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个虚拟路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为mas