LVS+Keeplived+dns+http备忘

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: PS : 转自kumu磊,实验还未做,先转了,一定会做一下滴! 本文主要讲解LVS结合keepalived和dns实现高可用,主要实现调度器和RealServer的高可用。主调度器如果出现宕机等情况,利用 keepalived的心跳监测会自动把VIP和router转移到备调度器,当一台RealServer出现故障的时候自动从LVS负载中剔除,恢复之 后自动加入。以下为本次实验架构

PS : 转自kumu磊,实验还未做,先转了,一定会做一下滴!

本文主要讲解LVS结合keepalived和dns实现高可用,主要实现调度器和RealServer的高可用。主调度器如果出现宕机等情况,利用 keepalived的心跳监测会自动把VIP和router转移到备调度器,当一台RealServer出现故障的时候自动从LVS负载中剔除,恢复之 后自动加入。以下为本次实验架构图


配置

系统环境:

  • Ubuntu Server 12.04 amd64
  • ESXi 5.1 虚拟机

具体的IP配置,按照图示配置即可,这里不再说明。

Router规则添加


iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.10


RealServer服务器

RealServer的配置基本类似,web和dns配置这里不作说明,以RealServer1为例


apt-get install arptables
arptables -A INPUT -d 192.168.0.10 -j DROP
arptables -A OUTPUT -s 192.168.0.10 -j --mangle-ip-s 192.168.1.11

关于arptables的用法可以参见 ​http://kb.linuxvirtualserver.org/wiki/Using_arptables_to_disable_ARP

  • arptables -A IN -d $VIP -j DROP
  • arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP


keepalived 配置

这里以主调度器为例:


apt-get install keepalived
apt-get install ipvsadm
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf


作为对比配置中同时加入了http的配置


cat /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER 
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.10/24
    }
    virtual_routes {
        via 192.168.0.100 dev eth0
    }
}

virtual_server 192.168.0.10 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR 
    protocol TCP

    real_server 192.168.0.11 80 {
        weight 1
        TCP_CHECK
        {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.0.12 80 {
        weight 1
        TCP_CHECK       
        {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.0.10 53 {
    delay_loop 6
    lb_algo rr
    lb_kind DR 
    protocol UDP 

    real_server 192.168.0.11 53 {
        weight 1
        MISC_CHECK      
        {
            connect_timeout 3
            misc_path "/etc/keepalived/dnscheck.sh -h 192.168.0.11"
        }
    }
    real_server 192.168.0.12 53 {
        weight 1
        MISC_CHECK      
        {
            connect_timeout 3
            misc_path "/etc/keepalived/dnscheck.sh -h 192.168.0.12"
        }

}



注:如果同时有http和dns服务,一定要把http配置放在dns配置之前,笔者在测试过程中一开始是把dns配置写在http配置之前,导致lvs配置失败!



如果细心的话,你会发现keepalived配置文件中http和dns的检查方式是不同的。keepalived的健康检查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK,但是自带没有UDP相关的检查方式,所以需要 自己编写DNS检测脚本,使用MISC_CHECK外部调用脚本,编写DNS脚本赋予执行权限存放在/etc/keepalived/下,内容如下:


cat /etc/keepalived/dnscheck.sh 
#!/bin/bash
# dns zone文件中加入了AaBbCcDdEeFf的txt记录
domain="txt.qq.com"
[ $# -le 1 ] && { echo "usage: ${0} -h <ip>"; exit 126; }
while getopts "h:" OPT;do
        case $OPT in 
                h)host=$OPTARG;;
                *)echo "usage: $0 -h <ip>" && exit 1;;
        esac
done

dig @${host} txt ${domain} +time=1 | grep "\<AaBbCcDdEeFf\>" >/dev/null
exit $?


完成主调度器配置之后,相应的在备调度器安装keepalived和ipvsadm,然后把主调度器keepalived配置文件、检测脚本拷贝到备调度器,修改以下两个位置:

  • state BACKUP
  • priority 99


分别启动主备keepalived

service keepalived start

检查是否配置成功


ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.10:80 rr
  -> 192.168.0.11:80              Route   1      0          0         
  -> 192.168.0.12:80              Route   1      0          0         
UDP  192.168.0.10:53 rr
  -> 192.168.0.11:53              Route   1      0          0        
  -> 192.168.0.12:53              Route   1      0          0 

ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7d:f7:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.20/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.10/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe7d:f75a/64 scope link 
       valid_lft forever preferred_lft forever


如果vip和lvs规则都已加载,表示配置已经成功,备采用类似方法查看,备调度器只有lvs规则而没有vip


测试

以上配置完成之后就可以在客户端测试,测试效果省略,以下为测试方法

1、正常测试服务是否正常

dns:

dig @10.2.0.110 domain.com

web:

elinks --dump 10.2.0.110


2、测试完成之后,停掉一台RealServer机器,主DR调度器上使用如下方法监控

watch -n 1 ipvsadm -L -n

观看lvs规则是否自动剔除停掉的RealServer,再打开停掉的RealServer,就会发现主调度器自动会加入恢复的RealServer


3、停掉主调度器,如果一切正常,备调度器就会接管vip替代主调度器的位置


参考文档:​https://gist.github.com/antonlindstrom/1099202#file-dnscheck-L11


http://blog.csdn.net/c__ilikeyouma/article/details/7983331

http://blog.csdn.net/c__ilikeyouma/article/details/7981446

目录
相关文章
|
2月前
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
75 2
|
2月前
|
Shell
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
6天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
32 3
|
25天前
|
弹性计算 安全 API
HTTP 405 Method Not Allowed:解析与解决
本文详细解析了HTTP 405 &quot;Method Not Allowed&quot; 错误,包括其定义、常见原因、示例代码及解决方案。通过检查API文档、修改请求方法或更新服务器配置,可有效解决此错误,提升Web开发效率。
http数据包抓包解析
http数据包抓包解析
|
1月前
|
缓存 前端开发 安全
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
109 0
|
2月前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
61 0
深入解析 http 协议
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
67 3
http数据包抓包解析课程笔记
http数据包抓包解析课程笔记
|
1月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
16 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多