LVS+keepalived生产环境实现电信联通双VIP(DR模式)

参考:

http://duyunlong.blog.51cto.com/1054716/1118447

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html

http://www.cnblogs.com/Eivll0m/p/4580826.html

防火墙配置参考:http://wgkgood.blog.51cto.com/1192594/1102870

server全部为centos6.8

[[email protected]_MASTER keepalived]# uname -a
Linux iiw_MASTER 2.6.32-642.4.2.el6.x86_64 #1 SMP Tue Aug 23 19:58:13 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

一:需求.由于前期经费有限,说白了就是没钱.

只能使用单主机做keepalived master,后端三台nginx提供web服务.开发80,443端口.

所需的ip为(安全原因ip都未虚构):

电信IP 联通IP
VIP 10.10.10.214  36.10.10.86
keepaliver master主机 10.10.10.213  36.10.10.85 
realserver1主机 10.10.10.215 36.10.10.87
realserver2主机 10.10.10.216 36.10.10.88
realserver3主机 10.10.10.217 36.10.10.89

二.流程

  1. masterserver主机(ip:10.10.10.213),安装lvs+keeplived.开启ip转发功能.
  2. [[email protected]_MASTER keepalived]# cat /etc/sysctl.conf 
    net.ipv4.ip_forward = 1
  3. realserver安装nginx,并开启服务.略
  4. masterserver,realserver 防火墙开发80,443端口.开放虚拟路由广播:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

4.后端realserver,VIP绑定脚本文件为:

[[email protected]_WEB1 ~]$ cat /etc/init.d/realserver.sh 
#!/bin/bash
SNS_VIP=10.10.10.214  #电信vip
SNS_VIP1=36.10.10.86  #联通vip
. /etc/rc.d/init.d/functions    
case "$1" in    
start)    
 ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up   
 /sbin/route add -host $SNS_VIP dev lo:0
 ifconfig lo:1 $SNS_VIP1 netmask 255.255.255.255 broadcast $SNS_VIP1 up
 /sbin/route add -host $SNS_VIP1 dev lo:1    
 echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore    
 echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce    
 echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore    
 echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce    
 sysctl -p > /dev/null 2>&1    
 echo "RealServer Start OK"    
 ;;    
stop)    
 ifconfig lo:0 down    
 route del $SNS_VIP >/dev/null 2>&1
 ifconfig lo:1 down
 route del $SNS_VIP1 >/dev/null 2>&1    
 echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore    
 echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce    
 echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore    
 echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce    
 echo "RealServer Stoped"    
 ;;    
 *)    
 echo "Usage: $0 {start|stop}"    
 exit 1    
esac    
exit 0

开启脚本:

[[email protected]_WEB1 ~]$ /etc/init.d/realserver.sh start

检测vip是否存在:

[[email protected]_WEB1 ~]$ ifconfig 
............................
lo:0      Link encap:Local Loopback  
          inet addr:10.10.10.214  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536  Metric:1

lo:1      Link encap:Local Loopback  
          inet addr:36.10.10.86  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536  Metric:1

可见我们所需的两个VIP已经绑定在网卡l0:0,l0:1上.

5.masterserver上keepalived的配置:

[[email protected]_MASTER keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_MASTER
}
#电信vip设置.
vrrp_instance VI_1 {
    state MASTER       #注意此住为master状态
    interface eth0     #检测eth0网卡
    virtual_router_id 51 #注意id是51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.214
    }
}
#联通VIP设置
vrrp_instance VI_2 {
    state MASTER    #注意此住为master状态
    interface eth0  #检测eth0网卡
    virtual_router_id 52  #复制的时候注意此处id是52,不要跟电信VIP相同
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        36.10.10.86
    }
}
virtual_server 10.10.10.214 80 {
    delay_loop 6
    lb_algo wrr 
    lb_kind DR
    nat_mark 255.255.255.0
    protocol TCP
    real_server 10.10.10.215 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
    }
    real_server 10.10.10.216 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80 
        }
    }
    real_server 10.10.10.217 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
    }
}
virtual_server 10.10.10.214 443 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mark 255.255.255.0
    protocol TCP
    real_server 10.10.10.215 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
    }
    real_server 10.10.10.216 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
    }
    real_server 10.10.10.217 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
    }
}
virtual_server 36.10.10.86 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mark 255.255.255.0
    protocol TCP
    real_server 36.10.10.87 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
    }
     real_server 36.10.10.88 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
    }
    real_server 36.10.10.89 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
    }
}
virtual_server 36.10.10.86 443 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mark 255.255.255.0
    protocol TCP
    real_server 36.10.10.87 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
   }
   real_server 36.10.10.88 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
    }
    real_server 36.10.10.89 443 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 443
        }
    }
}

在此,我将两个VIP分别绑定在两个vrrp_instance上,并且每个vrrp_instance都设置为master.然后启动keepalived

[[email protected]_MASTER keepalived]# service keepalived start

检测vip:

[[email protected]_MASTER keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 3c:4a:92:e0:d1:30 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.213/27 brd 10.10.10.223 scope global eth0
    inet 36.10.10.85/27 brd 36.10.10.95 scope global eth0:0
    inet 10.10.10.214/32 scope global eth0
    inet 36.10.10.86/32 scope global eth0
    inet6 fe80::3e4a:92ff:fee0:d130/64 scope li

可见我们所需的vip已经绑定在eth0上:

inet 10.10.10.214/32 scope global eth0
inet 36.10.10.86/32 scope global eth0

6.使用ipvsadm检测后端realserver是否ok轮询:

[[email protected]_MASTER keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  36.10.10.86:80 wrr
  -> 36.10.10.87:80              Route   1      0          18        
  -> 36.10.10.88:80              Route   1      0          17        
  -> 36.10.10.89:80              Route   1      0          17        
TCP  36.10.10.86:443 wrr
  -> 36.10.10.87:443             Route   1      0          2         
  -> 36.10.10.88:443             Route   1      0          5         
  -> 36.10.10.89:443             Route   1      0          3         
TCP  10.10.10.214:80 wrr
  -> 10.10.10.215:80            Route   1      7          25        
  -> 10.10.10.216:80            Route   1      11         25        
  -> 10.10.10.217:80            Route   1      7          25        
TCP  10.10.10.214:443 wrr
  -> 10.10.10.215:443           Route   1      4          3         
  -> 10.10.10.216:443           Route   1      1          6         
  -> 10.10.10.217:443           Route   1      1          4

通过这个命令可见,后端三台realserver的nginx 80,443端口被完全识别.

7.通过hosts绑定网站为联通VIP36.10.10.86.通过AB软件测试:

[email protected]:/home/huwei# ulimit -SHn 51200
[email protected]:/home/huwei# ab -n 10000 -c 100 "http://www.iiii111.com"

测试,通过http访问网站1w次,使用watch "lpvsadm"查看会不会平均分布到后端realserver

[[email protected]_MASTER keepalived]# watch "ipvsadm"
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  36.10.10.86:http wrr
  -> 36.10.10.87:http            Route   1	 0          3354
  -> 36.10.10.88:http            Route   1	 0          3354
  -> 36.10.10.89:http            Route   1	 0          3354

换https测试:

[email protected]:/home/huwei# ab -n 10000 -c 100 "https://www.iiii111.com"

结果:

TCP  36.10.10.86:https wrr
  -> 36.10.10.87:https           Route   1	 0          3366
  -> 36.10.10.88:https           Route   1	 0          3364
  -> 36.10.10.89:https           Route   1	 1          3366

可见,轮询成功.

换hosts绑定电信vip再测也正常.

到此结束.

总结:1.keepalived后端的nginx 80,443端口不要写错.

2.防火墙配置要正确.

3.后端服务器vip脚本先记得要启动,并检查vip ip有没有绑定好.

时间: 2024-11-09 04:30:54

LVS+keepalived生产环境实现电信联通双VIP(DR模式)的相关文章

应用负载均衡之LVS(三):使用ipvsadm以及详细分析VS/DR模式

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

lvs+keepalived+nginx环境部署

Redhat搭建centos镜像作为yum源 2.删除原有的yum [[email protected] ~]# rpm -qa | grep yum |xargs rpm -e --nodeps [[email protected] ~]# rpm -qa | grep yum 3.下载需要的安装包 python-urlgrabber-3.9.1-11.el6.noarch.rpm yum-metadata-parser-1.1.2-16.el6.x86_64.rpm yum-3.2.29-8

记一次keepalived双主DR模式实验

实验环境 CENTOS 7.5DIP1 192.168.119.110DIP2 192.168.119.111RIP1 192.168.119.120RIP2 192.168.119.121VIP1 192.168.119.130VIP2 192.168.119.131双主模式需要准备两个VIP DS上安装 yum install -y keepalived ipvsadm修改配置文件 vim /etc/keepalived/keepalived.confDS1上 ! Configuration

生产环境下实践DDD中的规约模式

最近的开发工作涉及到两个模块“任务”和“日周报”.关系是日周报消费任务,因为用户在写日周报的时候,需要按一定的规则筛选当前用户的任务,作为日周报的一部分提交.整个项目采用类似于Orchard那种平台加插件的架构,“任务”和“日周报”是两个独立的插件. “任务”已经由一位同事事先写好,周报中筛选任务的规则简单描述如下: 截止日期在周一之前,且未完成的任务(超期或待审核): 截止日期在周一至周日之间的所有任务: 开始日期在周一至周日之间的所有任务: 截止日期在周日之后,且未设置开始日期的所有任务(进

Linux集群之高可用负载均衡lvs+keepalived

LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理 LVS术语 LVS转发原理 LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求 LVS调度算法 轮询(rr):按照请求顺序轮流分发到后端RS 加权轮询(wrr):权值高的获得

Linux学习系列之lvs+keepalived

LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理 LVS术语 LVS转发原理 LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求 LVS调度算法 轮询(rr):按照请求顺序轮流分发到后端RS 加权轮询(wrr):权值高的获得

通过LVS+Keepalived实现exchagne2016访问高可用问题

最近在做一个exchange 2010升级到exchange 2016的项目,exchange2016访问高可用通过LVS+Keepalived实现,LVS采用DR模式,如下图: 具体的工作原理大家可以从网上找,有很多这方面的介绍. 具体LVS+Keepalived的配置方式,网卡的资料挺多的,大家可以去搜一下. 今天主要是把配置后遇到的问题给大家做个分享: 问题描述: 2台Centos7.5安装在VMware环境.2台exchange 2016安装在HP的刀片服务器上,它们都在同一个网段. 配

LVS+Keepalived效率最高的群集(实战)

LVS+Keepalived群集 环境准备: DR1 主:192.168.100.101---->CentOS 7-2 DR2 备:192.168.100.102---->CentOS 7-3 web1:192.168.100.111---->CentOS 7-4 web1:192.168.100.112---->CentOS 7-5 vip:192.168.100.10 客户机:192.168.100.10 提前准备在线yum源的软件安装: CentOS 7-2: [[email

MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换. 这篇文章下面要介绍如何通过LVS+Keepalived的方式来是实现MySQL的高可用性,同时解决以上问题. Keepalived和LVS介绍 Keepalived是一个基于VRRP(虚拟路由冗余协议)可用