精华内容
下载资源
问答
  • Nginx+LVS+DNS 负载均衡

    2020-12-18 17:43:37
    1.Nginx的负载均衡属于七层负载均衡,会建立TCP链接,产生流量的那种 1.轮训法 2.随机 3.加权轮训 4.加权随机 5.原地址哈希法(能保证每次请求都打在同一台机器上) 6.最少连接数 最小连接数算法比较灵活和智能...

    1.Nginx的负载均衡属于七层负载均衡,会建立TCP链接,产生流量的那种

    1.轮训法

    2.随机

    3.加权轮训

    4.加权随机

    5.原地址哈希法(能保证每次请求都打在同一台机器上)

    6.最少连接数

    最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢。

    ==》它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,

    尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

     

     

    2.LVS的负载均衡(主要用来做四层负载均衡)

     

    二层负载均衡 负载均衡服务器对外依然提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但是机器的MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

     

    三层负载均衡 和二层负载均衡类似,负载均衡服务器对外依然提供一个VIP(虚IP),但是集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。

     

    四层负载均衡 四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

     

    七层负载均衡 七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡

     

     

    3.DNS的负载均衡

    DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址

    在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,

    将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。 

     

     

     

     

     

    展开全文
  • 负载均衡

    2018-11-16 11:50:06
    负载均衡硬件负载均衡软件负载均衡负载均衡的算法轮训DNS负载均衡Nginx负载均衡其他负载均衡测试表格对齐方式设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学...

    硬件负载均衡

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    软件负载均衡

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    负载均衡的算法

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    轮训

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    DNS负载均衡

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    Nginx负载均衡

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    其他负载均衡

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    测试

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    对齐方式设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 新加:下面代码编码识别可以用第三方模块chardet 以及使用urlopen.info().get_content_charset()获得。 很多大型网站为了减轻压力,避免单点故障,使用了多个服务器(IP)地址...其中包括使用DNS轮训来实现负载



    新加:下面代码编码识别可以用第三方模块chardet 以及使用urlopen.info().get_content_charset()获得。


    很多大型网站为了减轻压力,避免单点故障,使用了多个服务器(IP)地址来为单一网站提供服务。

    其中包括使用DNS轮训来实现负载。

    但是对于管理员而言,如何可以监控这些服务器那些是ok那些是有问题的呢?

    下面脚本可以帮你实现。



    
    import socket,urllib.parse,configparser,re,sys,http.client,time
    
    #coding:gbk
    
    #域名转换IP地址函数
    def dom2ip(dname):
        iplist=socket.gethostbyname_ex(dname)[2]
        return iplist
    
    #字典数据生成函数
    def parse(url,key):
        zhlist[key]={}
        zhlist[key]['host']=a.hostname
        zhlist[key]['path']=a.path
        zhlist[key]['port']=a.port
        zhlist[key]['query']=a.query
        zhlist[key]['url']=a.geturl()
        try:
            zhlist[key]['ips']=dom2ip(a.hostname)
        except Exception as err:
            print('你的配置文件格式有错误,\n错误信息:',err,'\n程序已退出')
            sys.exit(1)
            
    
    
    #headers
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko)'
    }
    
    
    
    
    def getinfo(domain,ip,path='/',port=80):
        try:
            headers['Host']=domain
            h=http.client.HTTPConnection(ip,port,timeout=8)
            h.request('GET',path,headers=headers)
            r=h.getresponse()
            print('服务器返回状态',r.status)
            print('服务器返回结果',r.reason)
            if not r.getheader('Date') == None:
                print('目标时间:',r.getheader('Date'))
            if not r.getheader('Server') == None:
                print('目标Web端:',r.getheader('Server'))
            if not r.getheader('Last-Modified') == None:
                print('目标网页上次修改时间:',r.getheader('Last-Modified'))
            if not r.getheader('Expries') == None:
                print('目标网页过期时间:',r.getheader('Expries'))
            if not r.getheader('Content-Length') == None:
                print('目标头内容返回:',r.getheader('Content-Length'),'字节')
            if not r.getheader('Content-Encoding') == None:
                print('目标返回编码:',r.getheader('Content-Encoding'))
            if not r.getheader('Set-Cookie') == None:
                print('目标返回Cookie:',r.getheader('Set-Cookie'))
    
    
            #分析网页的字符集
            a=r.getheader('Content-Type')
            b=re.findall('charset=(.*)$',a,re.I)
            for i in b:
                charset=i
            try:
                charset
                res=res.decode(charset,'ignore')
            except:
                res=r.read(2048)
                strset=re.findall(b'charset=(.*?)"',res,re.I)
                for i in strset:
                    charset=i.decode()
                try:
                    charset
                    res=res.decode(charset,'ignore')
                except:
                    strset=re.findall(b'charset="(.*?)',res,re.I)
                    for i in strset:
                        charset=i.decode()
                    try:
                        charset
                        res=res.decode(charset,'ignore')
                    except:
                        charset='utf8'#设置默认charset
                        res=res.decode(charset,'ignore')
    
    
    
                
            print('目标脚本编码:',charset)
    
            #显示Title
            data=re.findall('(.*)',res,re.I)
            for i in data:
                i=i.strip()
                type(i)
                print ('目标返回Title为',':',i)
            try:
                i
            except:
                print ('目标网页有问题,未返回Title')
                #print('目标错误原因:',res)
    
            #判断不同情况的返回
            if r.status==302:
                Location=r.getheader('Location')
                print('注意:目标网页有转向,请修改配置文件从新定义监控页面,\n转向地址:',Location)
            elif r.status==404:
                print('注意:目标网页被删除,请修改配置文件从新定义监控页面')
            else:
                if r.status !=200:
                    print('网站其他问题,参考返回状态,适当修改配置文件后尝试')
    
                
        except Exception as err:
            print ('连接错误,详细信息:',err)
    
            
    
    
    #创建配置实例
    ini=configparser.ConfigParser()
    #读配置文件
    ini.read(sys.path[0]+'\yatere.ini')
    #监控主机列表
    host=ini.get('webserver','servers').split(';')
    
    #删除对象
    del ini
    
    #对应列表
    zhlist={}
    
    #填充字典数据
    print ('\n你设置的监控网址有',len(host),'个,分别是:\n')
    for i in host:
        a=urllib.parse.urlparse(i)
        parse(i,a.hostname)
        print (a.geturl())
    print('\n','--'*20)
    
    
    
    for i in zhlist:
        print (i,'有',len(zhlist[i]['ips']),'个IP地址:')
        for l in zhlist[i]['ips']:
            print (l,end='\t')
    
        print ('\n')
    
    a=input('按回车键继续...')
    
    #删除对象
    del a,i,l,host
    
    
    
    
    
    
    while True:
        for domk in zhlist:
            c=0
            print('现在是',domk,'域的信息','---'*8,'\n\n')
            for ipadd in zhlist[domk]['ips']:
                c=c+1
                print (domk,'的第',c,'台IP为',ipadd,'的服务器信息如下:')
                getinfo(domk,ipadd,zhlist[domk]['path']+'?'+zhlist[domk]['query'])
                print('\r')
                time.sleep(5)
            
        
    del domk,ipadd,c
    
    
    
    
    
    
    
    
    


    ini文件:

    ;可以修改本配置文件实现相关自定义参数设置
    ;
    ;需要监控多网站,用;号隔开就可以了
    
    [webserver]
    servers = http://www.google.com;http://www.jjj.com/index.html


    监控结果:


    展开全文
  • 负载均衡之三

    2017-11-09 18:59:00
    6.3 cdn缓存服务器的负载均衡(lvs+keepalived) 作者:田逸(sery@163.com) 在cdn的某个区域,需要部署多个缓存服务器,以集群方式来应对大量用户的访问请求,提高系统的高可用性。在机器数量较少的时候,我曾用...
    6.3 cdn缓存服务器的负载均衡(lvs+keepalived
          作者:田逸(sery@163.com
    在cdn的某个区域,需要部署多个缓存服务器,以集群方式来应对大量用户的访问请求,提高系统的高可用性。在机器数量较少的时候,我曾用dns轮训的方式把访问负载分担给服务器,效果不佳,因为DNS不会做健康检查。后来增加机器,做成lvs集群,就很安心了。
    6.3.1 cdn缓存服务器集群场景
    6个服务器,2个服务器为lvs负载均衡器,4个服务器为真实服务器。另外为了方便远程管理,还购置了一个KVM OVER IP设备。
    申请到8个公网ip地址,6个服务器用去6个,KVM OVER IP设备用掉1个,剩下1个作为VIP.
    4个真实服务器已经部署好应用(Varnish),并且只要修改本地windows的hosts文件,把域名指向这些ip,就可以通过这些缓存服务器访问到网站内容。关于缓存服务器的具体部署,请参照本书第7章“简单cdn”。
    为了方便阅读和理解,我把上述信息做成一个汇总表,如表6-2。
    角色
    所需ip
    实现负载所需软件
    操作
    负载均衡器(MASTER)
    接口ip、VIP
    ipvsadm,keepalived
    安装ipvsadm及keepalived
    负载均衡器(BACKUP)
    接口ip、VIP
    ipvsadm,keepalived
    安装ipvsadm及keepalived
    真实服务器(server pool)
    接口ip、VIP
    Lvs 客户端配置脚本
    按“6.1.2”节内容编写配置脚本
    表6-2 缓存服务器集群信息汇总
    6.3.2 cdn缓存服务器集群部署
    尽管部署cdn缓存服务器集群没有先后顺序之分,但为了部署顺利进行,我们可以先从简单的部分开始,即先从lvs客户端开始,然后再到负载均衡器这边。
    ● 真实服务器上的操作(每个服务器都是一样的操作)
    1、 照“6.1.2节”的格式编写lvs客户端配置脚本,保存后给予执行权限。其完整的内容如下:
    [root@huludao-2 ~]# more /usr/local/bin/lvs_real
    #!/bin/bash
    #description : start realserver
    VIP=125.38.38.64
    /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of REALServer"
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    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
    ;;
    stop)
    /sbin/ifconfig lo:0 down
    echo "close LVS Directorserver"
    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 "Usage: $0 {start|stop}"
    exit 1
    esac
    2、 运行和验证这个配置脚本,其具体方法如前所叙,不再赘述。
    ● 负载均衡器上的操作
    MASTER和BACKUP上安装ipvsadm及keepalived的方法都是一样的(具体步骤参见“6.1.1”及“6.2.2”两节的内容),两者之间的主要差异在于其配置文件keepalived.conf 。
    1、 MASTER的配置文件/etc/keepalived/keepalived.conf.
    #writed by sery , contact sery@163.com
    #guration File for keepalived
    #global define
    global_defs {
    router_id LVS_CNC_1
    }
    vrrp_sync_group VGM {
    group {
    VI_CACHE
    }
    }
    ################################################################
    # vvrp_instance define #
    ################################################################
    vrrp_instance VI_CACHE {
    state MASTER
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 180
    advert_int 5
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    125.38.38.64
    }
    }
    ##############################################################
    # virtual machine setting #
    ##############################################################
    # setting port 80 forward
    virtual_server 125.38.38.64 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    # persistence_timeout 20
    protocol TCP
    real_server 125.38.38.101 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.102 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.104 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.99 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }
    2、 BACKUP配置文件/etc/keepalived/keepalived.conf
    #writed by sery , contact sery@163.com
    #guration File for keepalived
    #global define
    global_defs {
    router_id LVS_CNC_2
    }
    vrrp_sync_group VGM {
    group {
    VI_CACHE
    }
    }
    ################################################################
    # vrrp_instance setting #
    ################################################################
    vrrp_instance VI_CACHE {
    state BACKUP
    interface eth1
    lvs_sync_daemon_inteface eth1
    virtual_router_id 51
    priority 150
    advert_int 5
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    125.38.38.64
    }
    }
    ##############################################################
    # virtual server setting #
    ##############################################################
    # setting port 80 forward
    virtual_server 125.38.28.64 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    # persistence_timeout 50
    protocol TCP
    real_server 125.38.38.101 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.102 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.104 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 125.38.38.99 80 {
    weight 100
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }
    在这样只有一个vrrp_instance 的环境里,主负载均衡器(MASTER)与备份负载均衡器(BACKUP)配置文件的差异一共只有3处: 全局定义的route_id、vrrp_instance state已经vrrp_instance的优先级priority。
    6.3.3 负载均衡服务的启用和验证
    Lvs客户端的启用和验证在前面的“6.1.3”一节有过详细的说明,此处略过。前面我们也提过,keepalived启动过程不会检查配置文件的语法,因此在启动keepalived以前,需要人工对/etc/keepalived/keepalived.conf文件做全面的语法检查。一个比较容易犯的错误就是把花括号“}”写漏了,不成对!
    当lvs客户端都正常启动并且配置文件经检查无误后(当然有错误也无妨,随时可以修改嘛!),执行命令 /usr/local/keepalived/sbin/keepalived –D ,然后我们查看系统进程,看是否是3个keepalived进程。如果配置文件的路径不是/etc/keepalived/keepalived.conf则需要在启动时用选项-f指定。
    最能反映keepalived启动情况的地方当属系统日志。手动执行启动操作后,使用命令 tail –f /var/log/messages 滚动查看输出,就能详细了解其运行情况。图6-3为某个lvs环境的keepalived启动输出:
    clip_image002
    图6-3 启动keepalived时系统日志的输出(截取)
    另外一个反映keepalived正常运行状态的地方是网络接口vip的启用。通过执行ip add 即可看见vip已经被绑定在制定的网络接口(注意:ifconfig 不能显示 vip)。需要注意的是,BACKUP的vip暂时不绑定。图6-4显示了这种比较。
    clip_image004
    图6-4 主负载均衡器(MASTER) 与备份负载均衡器(BACKUP)输出对比
    主负载均衡器(MASTER)和备份负载均衡器(BACKUP)的keepalived 都把它运行起来,然后我们进行功能测试。
    ● 测试前的准备
    1、 保证所有服务器的网络服务正常。这可以通过ping 所有机器的ip地址已经ping vip 来检查。
    2、 修改本地计算机的hosts文件,把域名跟vip绑定起来。然后再 ping 一下域名,看是否正常。如 125.38.38.64 www.sery.com
    ● 转发功能测试
    1、 在本地机器执行命令 telnet www.sery.com 80 ,检查访问是否正常。
    2、 在本地计算机的浏览器地址栏输入 http://www.sery.com ,看网站默认页是否能正常访问。
    3、 登录主负载均衡器,察看转发情况。Lvs的转发情况,是不能通过netstat –an这样的方式来察看的。这时,前面我们安装的ipvsadm终于上场了。执行不带任何选项的 ipvsadm指令,即可察看tcp连接情况。图6-5为主负载均衡器的转发情况:
    clip_image006
    图6-5 负载均衡器转发状态
    如果想知道当前测试机的访问请求被转发到那个服务器去了,可以在ipvsadm命令后带一个选项,其完整形式为:ipvsadm –lcn | grep 159.226.240.63 。
    [root@hld081028-mk ~]# ipvsadm -lcn | grep 159.226.240.63
    TCP 14:56 ESTABLISHED 159.226.240.63:39783 125.38.38.64:80 125.38.38.99:80
    ● 健康检查功能(故障隔离)测试
    通过手工的方法,使真实服务器提供的服务实效,然后再从客户端发起访问请求,检验lvs提供的服务是否可用。这种测试,有两种方式:停止某个真实服务器的服务(本例为varnish)、关闭网络服务。
    1、 关闭真实服务器125.38.38.99的varnish服务。先 telnet 125.38.38.99 80 ,不能访问为正常。然后再从本地计算机执行 telnet 125.38.38.64 80,如访问正常,再检查负载均衡器的输出。这时停止服务的机器125.38.38.99 将被lvs从转发列表中删除,系统日志也会有被删除的消息打印出来,如图6-6所示:
    clip_image008
    图6-6 服务停止,真实服务器从转发队列删除
    2、 关闭主机的网络。可以关闭网络接口或关闭服务器,然后再按第“1”步的方法测试,检查客户端的访问请求是否不受影响;转发队列是否把关闭网络服务的对象删除。图6-7为某个真实服务器网络启停时ipvsadm输出对比。
    clip_image010
    图6-7 关闭服务器前后ipvsadm输出对比
    3、 关闭lvs的客户端配置脚本/usr/local/bin/lvs_real。这个测试不会成功,关闭真实机器的vip以后,负载均衡器依然会把用户请求转发过来,可是tcp连接却不能成功,部分用户的访问失败。因此在部署和运维lvs环境时,要特别注意这一点
    从上面的测试可知,关闭或停止服务,负载均衡器通过健康检查自动把实效的机器从转发队列删除掉,实现故障隔离,保证用户的访问不受影响。
    ● 失败切换(FailOver)测试
    关闭主负载均衡器(MASTER)的keepalived进程,然后从客户端访问vip地址及本地绑定的域名。方法是telnet 125.38.38.64 80 及用浏览器访问 http://www.sery.com . 检查访问是否正常。这是最直观的表现方法。
    正常情况下,当主负载均衡器(MASTER)实效时,备份负载均衡器(BACKUP)能立即接替转发任务(接替时间由keepalived.conf文件的advert_int指定)。在确认主负载均衡器(MASTER)的keepalived进程关闭后,我们来看看备份负载均衡器的运行情况。这里我们观察两个地方:ipvsadm的输出及系统日志的输出。
    1、 ipvsadm输出变化。未接替转发任务前,ipvsadm的输出字段ActionConn、InActionConn对应的值皆为“0”(因为没有请求转发);接替转发任务后,这两个字段的值立即发生变化。
    2、 系统输出日志将记录备份负载均衡器从BACKUP向MASTER切换过程,下面截取系统日志关于keepalived输出的部分:
    Jul 6 21:04:32 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Transition to MASTER STATE
    Jul 6 21:04:32 telcom-dl-1 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state
    Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Entering MASTER STATE
    Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) setting protocol VIPs.
    Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Sending gratuitous ARPs on eth1 for 218.24.35.105
    Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: Netlink reflector reports IP 125.38.38.64 added
    Jul 6 21:04:37 telcom-dl-1 Keepalived_healthcheckers: Netlink reflector reports IP 125.38.38.64 added
    Jul 6 21:04:42 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Sending gratuitous ARPs on eth1 for 125.38.36.64
    现在再回来启动主负载均衡器(MASTER)的keepalived进程,接着察看辅助负载均衡器(BACKUP)的系统日志,截取一段输出如下:
    Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Received higher prio advert
    Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CAHCE) Entering BACKUP STATE
    Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) removing protocol VIPs.
    Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to BACKUP state
    Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: Netlink reflector reports IP 125.38.38.64 removed
    Jul 6 21:18:12 telcom-dl-1 Keepalived_healthcheckers: Netlink reflector reports IP 125.38.38.64 removed
    这段输出显示,备份服务器尽管曾经行使了一段MASTER的职权,一旦原来的MASTER复活,它就得把控制权乖乖地交给原MASTER,自己打回原形BACKUP。是什么东西在起作用呢?是配置文件里设置的那个优先级“priority”。为了保证FailOver正常发挥作用,应确保主负载均衡器的“priority”值大于备份负载均衡器的“priority”值。同样,辅助负载均衡器的ipvsadm的输出也会发生变化,这里不再多做说明。





















    本文转自sery51CTO博客,原文链接: http://blog.51cto.com/sery/207574,如需转载请自行联系原作者




    展开全文
  • LVS负载均衡入门

    2020-06-02 16:26:58
    如下图所示,用户通过浏览器发起请求,先经过DNS解析,然后到达服务器的LVS,LVS根据轮训算法把请求发送到后端的服务器。通过使用这个负载均衡的集群,可以提高服务的性能。LVS和Nginx类似的,如果把图中的LVS换成...
  • Exchange 2010边缘传输服务器的负载均衡:在边缘传输服务器之间对入站的Internet邮件进行负载均衡。1.默认情况下,边缘传输服务器跟集线器传输服务器一样,无需部署负载平衡解决方案即可将负载均匀分布到各个边缘...
  • 并且实现健康状态检查2、使用keepalived高可用Haproxy,避免LVS单点故障3、集群中分别在HK-01和HK-02运行一个VIP地址,实现Haproxy双主4、用户通过DNS轮训的方式实现访问集群的负载均衡(不演示)实验拓扑环境...
  • 并且实现健康状态检查2、使用keepalived高可用LVS,避免LVS单点故障3、集群中分别在LK-01和LK-02运行一个VIP地址,实现LVS双主4、用户通过DNS轮训的方式实现访问集群的负载均衡(不演示)环境拓扑环境介绍IP地址功能...
  • 前言: 正常情况下一个IP对应一个域名,但是可以通过dns轮训的方式将一个域名对应多个ip,这样就可以达到一种负载均衡的效果,那么当用户访问网站的 时候,有可能被解析到不同的ip上去,如果这个ip的服务器出现异常...
  • 项目说明 1,使用 LVS 负载均衡用户请求到后端 web 服务器,并且实现健康状态检查  2,使用 keepalived 高可用 LVS ,避免 LVS 单...4,用户通过 DNS 轮训的方式实现访问集群的负载均衡(不演示) 
  • 网络笔记整理

    2020-01-18 16:07:59
    文章目录1 应用层1.1.1 http与https的区别1.1.2 http请求1.1.3 响应报文1.1.4 ssl工作流程...1.2 DNS1.2.3 DNS轮训负载均衡的优缺点tcp53端口什么时候会用到1.3 FTP1.3.1 主被动模式主动模式FTP:被动模式FTP2 传...
  • WEB架构图

    2018-01-10 17:30:46
    方案1:DNS轮训方案2:负载均衡方案3:功能服务化方案4:多地灾备 动静分离 转载于:https://blog.51cto.com/13491150/2059509
  • 初期:单台服务器部署、 WEB与数据库独立部署、动静分离-初期、数据库主从与查询缓存、七层负载均衡与共享存储 中期:、数据库架构扩展、SOA面向服务架构、DNS轮训与数据库全文、检索引擎、静态缓存服务器、分布式...
  • MySQL架构篇(一)

    2018-03-04 18:27:00
    MySQL复制解决了什么问题? 1、实现在不同服务器上的数据分布 ...6、实现数据读取的负载均衡、需要其它组件配合完成、使用DNS轮训的方式把程序的读连接到不同的备份数据库 7、使用LVS,Haproxy这样的代理...
  • 可以绕过代理,直接访问实际的服务器,通过web负载均衡轮训算法 2 通过DNS重定向 一个域名对应多个IP地址,DNS解析域名的时候返回其中一个IP地址 负载均算法,轮训算法,物理路径最短算法 3 通过IP,MAC地址,...
  • 高并发实战

    2020-03-08 15:00:40
    近期由于疫情的原因,口罩紧缺,各地政府紧急上线了口罩预约系统。...2台负载均衡服务器 20台ecs虚拟机 2. 提高网络带宽 达到5G 3。dns ip轮训 二 中间件、nigix服务限流 每台虚拟机限流1000 三软...
  • 资料课时内容: 0001-蚂蚁课堂(每特学院)-2期-多线程快速入门 第01节、线程与进程的区别 第02节、为什么要用到多线程 第03节、多线程应用场景 第04节、使用继承方式创建线程 ...第03节、搭建负载均衡项目...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

dns轮训负载均衡