LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡

LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡

    前言

    LVS专题写到第三篇了, 前两篇我们对LVS的基础使用也有了一些了解, 这篇我们将做一个比较复杂的实验, 话不多说, 开始吧!

    什么是KeepAlived

    What is Keepalived ? 
    Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures. Loadbalancing framework relies on well-known and widely used Linux Virtual Server (IPVS) kernel module providing Layer4 loadbalancing. Keepalived implements a set of checkers to dynamically and adaptively maintain and manage loadbalanced server pool according their health. On the other hand high-availability is achieved by VRRP protocol. VRRP is a fundamental brick for router failover. In addition, Keepalived implements a set of hooks to the VRRP finite state machine providing low-level and high-speed protocol interactions. Keepalived frameworks can be used independently or all together to provide resilient infrastructures. ##转自官方文档

    大体的意思就是keepalived是一个由C语言编写的项目, 主要目标是提供负载均衡和高可用的Linux服务. keepalived依赖于Linux Virtual Server(IPVS)内核提供的四层负载均衡, keepalived实现了动态自适应和维护, 能够检测负载均衡池中的主机的健康状态, 而keepalived的高可用是通过VRRP(virtual route redundancy protocol)实现的.

    关于VRRP协议参考文档H3C技术白皮书: VRRPRFC 3768:Virtual Router Redundancy Protocol (VRRP)

    实验介绍

    大家都知道LVS虽然性能很强劲但是功能上有很多不足, 例如: 不能提供后端健康状态检查功能, director容易成为单点故障…, 而这些功能我们都可以通过第三方软件keepalived来提供, 而本次实验我们就要使用keepalived提供lvs-director的高可用, 并让两台director分别互为主从都能接受客户端通过dns对A记录的轮询请求从而转发至后端主机. 实现Director的高可用和负载均衡

    实验拓扑

    图画的不够形象, 实验中我们使用DR模型来进行实验

    实验环境

    VIP1为172.16.1.8、VIP2为172.16.1.9

    主机 IP地址 功用
    director1.anyisalin.com VIP1,VIP2, DIP: 172.16.1.2 Director1
    director2.anyisalin.com VIP1,VIP2, DIP: 172.16.1.3 Director2
    rs1.anyisalin.com VIP, RIP: 172.16.1.4 RealServer 1
    rs2.anyisalin.com VIP, RIP: 172.16.1.5 RealServer 2
    ns.anyisalin.com IP: 172.16.1.10 DNS

    注意: 本文实验中所有主机SElinux和iptables都是关闭的

    实验步骤

    配置KeepAlived(1)

    实现Director 的VIP互为主从

    下面的操作都在director1上执行

    [[email protected] ~]# ntpdate 0.centos.pool.ntp.org  #同步时间
    [[email protected] ~]# yum install keepalived &> /dev/null && echo success    #安装keepalived 
    success
    
    [[email protected] ~]# vim /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 {
        172.16.1.8 dev eth0 label eth0:0
        }
    }
    
    vrrp_instance VI_2 {
       state BACKUP
       interface eth0
       virtual_router_id 52
       priority  99
       advert_int 1
       authentication {
        auth_type PASS
        auth_pass 2222
       }
    
       virtual_ipaddress {
         172.16.1.9 dev eth0 label eth0:1
       }
    }

    下面的操作都在director1上执行

    [[email protected] ~]# ntpdate 0.centos.pool.ntp.org  #同步时间
    [[email protected] ~]# yum install keepalived &> /dev/null && echo success    #安装keepalived 
    success
    
    [[email protected] ~]# vim /etc/keepalived/keepalived.conf    #修改配置文件的部分配置如下
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
        172.16.1.8 dev eth0 label eth0:0
        }
    }
    
    vrrp_instance VI_2 {
       state MASTER
       interface eth0
       virtual_router_id 52
       priority  100
       advert_int 1
       authentication {
        auth_type PASS
        auth_pass 2222
       }
    
       virtual_ipaddress {
         172.16.1.9 dev eth0 label eth0:1
       }
    }

    同时在director1和director2上启动keepalived

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

    测试

    默认情况director1director2的ip如下

    我们将director1keepalived服务停止, 效果如下, IP自动转移到director2

    我们将director1keepalived服务再次启动, 效果如下, IP地址转回director1

    配置LVS

    配置KeepAlived(2)

    这里我们使用DR模型进行实验, 因为keepalived可以通过调用ipvs的接口来自动生成规则, 所以我们这里无需ipvsadm, 但是我们要通过ipvsadm命令来查看一下ipvs规则

    下面的操作在director1和director2都要执行, 由于篇幅过长, 遂不演示director2的操作

    [[email protected] ~]# yum install ipvsadm httpd &> /dev/null && echo success
    success
    [[email protected] ~]# echo "<h1>Sorry, Service is Unavailable </h1>" > /var/www/html/index.html #配置sorry页面
    
    [[email protected] ~]# vim /etc/keepalived/keepalived.conf    #修改keepalived配置文件, 添加以下段落
    virtual_server 172.16.1.8 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.255.0
       # persistence_timeout 50
        protocol TCP
        sorry_server 127.0.0.1 80
    
        real_server 172.16.1.4 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
            status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 172.16.1.5 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
            status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 172.16.1.9 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.255.0
       # persistence_timeout 50
        protocol TCP
        sorry_server 127.0.0.1 80
    
        real_server 172.16.1.4 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
            status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 172.16.1.5 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
            status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }

    同时在director1和director2上重启keepalived

    [[email protected] ~]# service keepalived restart[[email protected] ~]# service keepalived restart

    查看ipvs规则

    [[email protected] ~]# ipvsadm -L -n  #正常IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  172.16.1.8:80 rr  -> 172.16.1.4:80                Route   1      0          0           -> 172.16.1.5:80                Route   1      0          0         TCP  172.16.1.9:80 rr  -> 172.16.1.4:80                Route   1      0          0           -> 172.16.1.5:80                Route   1      0          0

    配置RS的IP和web服务

    下面的操作都在rs1上执行

    [[email protected] ~]# yum install httpd -y &> /dev/null && echo success    #安装httpd
    success
    [[email protected] ~]# echo "<h1>This is 172.16.1.4</h1>" > /var/www/html/index.html    #创建网页文件
    
    [[email protected] ~]# service httpd start    #启动httpd服务
    Starting httpd: httpd: apr_sockaddr_info_get() failed for director1.anyisalin.com
    
    httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
                                                               [  OK  ]
    [[email protected] ~]# vim setup.sh #编写脚本配置相关内核参数和IP, 对这里不了解的看我上篇文章
    #!/bin/bash
    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 172.16.1.8/32 broadcast 172.16.1.8 up
            ifconfig lo:1 172.16.1.9/32 broadcast 172.16.1.9 up
            ;;
    stop)
            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 down
            ifconfig lo:1 down
    esac
    
    [[email protected] ~]# bash setup.sh start  #运行脚本
    [[email protected] ~]# scp setup.sh 172.16.1.5:/root        #将脚本传给rs2

    下面的操作都在rs1上执行

    [[email protected] ~]# yum install httpd -y &> /dev/null && echo success    #安httpd
    success
    [[email protected] ~]# echo "<h1>This is 172.16.1.4</h1>" > /var/www/html/index.html    #创建网页文件[[email protected] ~]# bash setup.sh start  #运行脚本

    测试LVS

    测试director1director2

    当我们关闭rs1的web服务, 会自动检查健康状态并删除

    当我们同时关闭rs1rs2的web服务, 会自动启用sorry server

    配置DNS

    配置dns的过程没什么好说的, 有兴趣可以看我的博客DNS and BIND 配置指南

    下面的操作都在ns上执行

    [[email protected] /]# yum install bind bind-utils -y --nogpgcheck &> /dev/null && echo success #安装bind
    success 
    
    [[email protected] /]# vim /etc/named.conf    #修改主配置文件如下
    options {
            directory       "/var/named";
    
    };
    zone "." IN {
            type hint;
            file "named.ca";
    };
    
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    
    [[email protected] /]# vim /etc/named.rfc1912.zones   #在文件尾部加上下列字段
    zone "anyisalin.com" IN {
            type master;
            file "anyisalin.com.zone";
    };
    
    [[email protected] /]# vim /var/named/anyisalin.com.zone  #创建区域配置文件
    
    $TTL 600
    $ORIGIN anyisalin.com.
    @  IN   SOA  ns.anyisalin.com.  admin.anyisalin.com. (
            20160409
            1D
            5M
            1W
            1D
    )
    
            IN   NS  ns
    ns      IN   A   172.16.1.10
    www     IN   A   172.16.1.8
    www     IN   A   172.16.1.9
    
    [[email protected] /]# service named start    #启动named
    Generating /etc/rndc.key:                                  [  OK  ]
    Starting named:                                            [  OK  ]

    测试DNS轮询效果

    已经实现DNS轮询效果

    最终测试

    做了那么实验, 结合前面实验的效果, 来一次最终测试, 我将本机的DNS server指向了172.16.1.10以便测试

    默认情况如下

    我们将director2keepalived强制关闭,依然不会影响访问

    此时我们的director1的IP地址如下, 接管了director2的IP

    总结

    我们通过DNS轮询实现LVS-Director的负载均衡, KeepAlived实现Director的高可用, 而Director本身就可以为后端的RS进行负载均衡, 这一套架构还是很完整的. 其实本文还有很多不完善的地方, 但是由于我时间较紧, 遂不对其进行叙述, 希望大家多多谅解, LVS专题到这里可能结束了, 也可能会不定期的更新, 希望大家多多关注我的博客! 
    作者: AnyISalIn QQ:1449472454 
    感谢:MageEdu

    时间: 2024-11-01 19:51:48

    LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡的相关文章

    基于DNS轮询和NFS实现简单的网站负载均衡

    试验简述:分别在host1和host2上安装php和httpd服务器,并部署Discuz站点,在host2上安装DNS服务,用于通过轮询,向客户提供站点bbs.test.com网站的IP地址.在host3上分别提供mysql数据库用于存放站点数据.,部署LFS服务用于向用户提供附件头像等上传的空间. 1. 在各服务器上分别安装对应服务器程序 Host1: yum -y install httpd php php-mysql Host2: yum -y install httpd php php-

    利用lvs keepalived配置redis高可用及负载均衡

    需求 我们用ES做日志服务,架构是 上游数据来源=>redis=>logstash=>ES redis目前还是单点, 没有做高可用, 现在数据量越来越多, 如果下游消费不出问题还好, redis里面数据来了就走,但是下游一旦出问题, 分给redis的内存半小时就撑满了. 看到redis3.0 beta版本已经提供了集群功能, 但是需要client以集群模式接入, 我们这么多上游用户, 不太可能统一要求他们改造. 公司也有硬件的LB, 同事在E公司的时候就是用的硬件LB. 但接入还要申请,

    高可用集群技术之keepalived实现lvs高可用并负载均衡web服务

    Keepalived概述: Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器. keepalived实现lvs高可用并负载均衡web服务: 准备工作: 2台keepalived节点为: node1.samlee.com

    Centos7+Lvs+keeplived实现Apache高可用的负载均衡

    近期一直在练习Linux相关的服务部署,前面文章也介绍了一部分Linux的相关日常服务,今天我们就介绍Centos7+Lvs+keeplived实现Apache高可用的负载均衡,其实该功能对于一个企业运维人员来说是必须要掌握的技能,而且要熟悉相关负载均衡及高可用的相关参数,这样才可以部署出一个属于特殊环境的配置应用,我们都知道lvs.nginx.haproxy可以实现应用的负载均衡,但是不能实现单点故障,所以我们还需要借助一个应用就是keepalived,当然我们见的最多的就是lvs+keepa

    Haproxy+keepalived高可用、负载均衡安装部署方案

    1     环境说明 前端两台haproxy+keepalived互为主从,提供高可用:另外基于不同域名访问不同的虚拟ip实现负载均衡 1.1     环境描述 服务器A(主.从):eth0:10.241.51.245   eth1:192.168.1.9 服务器B(从.主):eth2:10.241.51.246   eth1:192.168.1.10 服务器C(web01):eth0:10.241.51.247 服务器D(web02):eth0:10.241.51.248 VIP1:10.24

    (tengine+keepalived)+(apache+tomcat)+memcached+mysql实现高可用、负载均衡、可扩展架构

    目录 1.高可用.负载均衡.可扩展架构的需要背景 2.系统架构 3.系统规划及说明 4.系统部署及测试 5.总结 1.高可用.负载均衡.可扩展架构的需要背景 从互联网诞生以来,网站架构随着互联网的快速发展发生着巨大的变化,现今,数据每天都在以爆炸式的增长,大数据.云计算等概念被业内炒得沸沸扬扬,这些前沿技术也在各行各业落地开花.每一种新技术的提出几乎都会或多或少影响着IT的基础架构,面对数据的快速增长.我们急需一套高可用.负载均衡.可扩展的架构来作为支撑. 2.系统架构 此次博文介绍一套高可用.

    keepalived实现nginx的高可用 + nginx负载均衡

    前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力.通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈. 摘自<大型网站技术架构_核心原理与案例分析>

    搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡

    环境准备: 192.168.193.80  node1 192.168.193.81 node2 关闭防火墙 [[email protected] ~]# systemctl stop firewalld #两台都关闭 [[email protected] ~]# setenforce 0 setenforce: SELinux is disabled host文件 [[email protected] ~]# vim /etc/hosts 127.0.0.1 localhost localho

    keepalived+nginx实现高可用and负载均衡集群

    keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work