jjzjj

负载均衡之keepalived

casheww 2023-03-28 原文

DR实验存在的隐患

  1. DR可能会挂,单点故障
  2. RS可能会挂

解决方案:

  • 解决单点故障

    • 主备:准备多个DR备用机,做好配置,主机挂掉备用机顶上
    • 主主
  • 解决RS会挂的问题

    给RS发送请求,如果收到200 ok回复则说明RS正常

keepalived

keepalived就是实现了上述解决方法的工具,检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

主要用途:

  • 高可用:监控主机,主动替换备用机
  • RS的健康检测

只需要给主机DR和备用机装keepalived监控DR,并且向RS发送请求检测RS。

keepalived的使用:

  1. 安装

    yum install keepalived ipvsadm -y
    
  2. 备份和修改keepalived配置文件

    DR配置文件:

    cp keepalive.conf keepalived.conf.bak
    cat /etc/keepalived.conf
    global_defs {
    
      notification_email {  #设置报警邮件地址,可多行每行一个。
      xxxxxxx@qq.com
       }
    
      notification_email_from keepalived@localhost  #设置邮件的发送地址
    
      smtp_server 127.0.0.1                         #设置SMTP server地址
    
      smtp_connect_timeout 30                       #设置SMTP 超时时间
    
      router_id LVS_DEVEL                           #运行keepalived机器的一个标识
    
    }
    
    vrrp_instance VI_1 {                      #定义一个vrrp实例,不同实例的实例编号不一样。
    
       state MASTER        #定义在keepalived的角色MASTER表示为主服务器,BACKUP为备服务器。
    
       interface eth0      #指定HA检测的网络接口
    
       virtual_router_id 50     #虚拟路由标示,同一个实例里的路由标示相同,且唯一。MASTER和BACKUP的路由标识一样,且唯一。
    
       priority 100        #定义此服务器在此虚拟路由器中的优先级,优先级大权限高
    
       advert_int 1        #检测时间间隔
    
       authentication {    #设置验证类型和密码,主从的密码必须相同,要不两者不通讯。
    
           auth_type PASS
    
           auth_pass 1111
    
       }
    
       virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址。
    
           192.168.233.100/24 dev ens33 label  ens33:3
    
       }
    
    }
    //配置DR主机lvs,代替使用ipvsadm配置lvs
    virtual_server 192.168.233.100 80 {
        delay_loop 6  
        lb_algo rr
        lb_kind DR //模式,NAT,DR,TUN
        nat_mask 255.255.255.0  //子网掩码
        persistence_timeout 0  //
        protocol TCP
    
        real_server 192.168.150.12 80 {//负载机配置
            weight 1
            HTTP_GET {//对后端机进行健康检查的配置
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }   
    	}
        //配置RS
        real_server 192.168.233.129 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    

    备用DR配置:

    global_defs {
    
      notification_email {
      xxxxxx@qq.com
       }
    
      notification_email_from keepalive@localhost
    
      smtp_server 127.0.0.1
    
      smtp_connect_timeout 30
    
      router_id LVS_DEVEL
    
    }
    
    vrrp_instance VI_1 {
    
       state BACKUP
    
       interface eth0
    
       virtual_router_id 51
    
       priority 50
    
       advert_int 1
    
       authentication {
    
           auth_type PASS
    
           auth_pass 1111
    
       }
    
       virtual_ipaddress {
    
           192.168.233.100
    
       }
    
    }
    //配置DR主机lvs,代替使用ipvsadm配置lvs
    virtual_server 192.168.233.100 80 {
        delay_loop 6  
        lb_algo rr
        lb_kind DR //模式,NAT,DR,TUN
        nat_mask 255.255.255.0  //子网掩码
        persistence_timeout 0  //
        protocol TCP
    
        real_server 192.168.150.12 80 {//负载机配置
            weight 1
            HTTP_GET {//对后端机进行健康检查的配置
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }   
    	}
        //配置RS
        real_server 192.168.233.129 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
  3. 启动keepalived服务

    service keepalived start
    

最后,如果keepalived进程挂掉呢?

使用zookper集群解决这个问题。

有关负载均衡之keepalived的更多相关文章

  1. ruby-on-rails - EC2 实例在负载均衡器中停止服务 - 2

    我有一个EC2实例正在运行。我有一个负载均衡器,它与EC2实例相关联。PingTarget:HTTP:3001/healthCheckTimeout:5secondsInterval:24secondsUnhealthythreshold:2Healthythreshold:10现在该实例显示为OutofService。我什至尝试更改监听端口等等。一切正常,直到重新启动我的EC2实例。任何帮助将不胜感激。仅供引用:我有一个在端口3001上运行的Rails应用程序,我有一个用于HTTP:80(loadbalancer)到HTTP:3001的监听器。我还在终端中通过ssh检查了正在运行的应

  2. ruby-on-rails - 负载测试期间 Unicorn CPU 使用率激增,优化方法 - 2

    我对为我的RubyonRails3.1.3应用优化我的Unicorn设置的方法很感兴趣。我目前正在高CPU超大实例上生成14个工作进程,因为我的应用程序在负载测试期间似乎受CPU限制。在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个内核都达到峰值,盒子负载飙升至7-8个。每个unicorn实例使用大约56-60%的CPU。我很好奇可以通过哪些方式对其进行优化?我希望能够每秒将更多请求汇集到这种大小的实例上。内存和所有其他I/O一样完全正常。在我的测试过程中,CPU越来越低。 最佳答案 如果您受CPU限制,您希望使用

  3. ruby - 解析 100mb JSON 负载的有效方法 - 2

    我每12小时在我的亚马逊EC2微型实例上运行一次cron作业。它下载118MB的文件并使用json库解析它。这当然会使实例内存不足。我的实例有416MB的可用内存,但随后我运行脚本,它下降到6MB,然后被操作系统杀死。我想知道我在这里有什么选择?是否可以通过Ruby有效地解析它,或者我是否必须下降到像C这样的低级东西?我可以获得一个功能更强大的亚马逊实例,但我真的很想知道是否可以通过Ruby做到这一点。更新:我看过yajl。它可以在解析时为您提供json对象,但问题是,如果您的JSON文件仅包含1个根对象,那么它将被迫解析所有文件。我的JSON看起来像这样:--Root-Obj1-Ob

  4. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  5. Nginx的6种负载均衡策略 - 2

    Nginx的6种负载均衡策略【轮询/加权轮询weight/ip_hash/least_conn/urlhash/fair】总结:nginx负载均衡策略1、轮询策略轮询策略其实是一个特殊的加权策略,不同的是,服务器组中的各个服务器的权重都是1upstreambackend{server192.168.136.136weight=1;server192.168.136.136:81weight=1;server192.168.136.136:82weight=1;server192.168.136.136:83weight=1;}server{listen80;server_namelocalho

  6. Angular 4懒负载模块与名称的儿童插座无效 - 2

    我正在尝试为模块实现懒惰加载。该模块有一堆儿童路线独特的出口名称。当我尝试访问路线时,这似乎不起作用。从我保存的这个示例中,这似乎可以:https://plnkr.co/edit/nnxaozitm00riixzemts?p=preview您可以看到我有孩子的路线{path:'list',component:HeroListComponent,outlet:'abc'},在hero-routing.module.ts和路由器出口:在hero.com.ponent.ts当我在本地运行时,我应该能够访问Localhost:3000/Heroes/(ABC:List),但似乎不起作用。注意:您可以通

  7. ruby-on-rails - 网站负载过重+ROR - 2

    我们在CentOS6上使用2个Web服务器和1个数据库服务器运行一个具有ROR的网站。有时它会显示消息“网站负载过重”...请帮忙检查一下。我们将Passenger4.0.21与Ruby1.8.7和Apache2.2.15一起使用。Web服务器以默认设置运行。下面是passenger-status的一些输出:#乘客状态Version:4.0.21Date:ThuDec1202:02:44-05002013Instance:20126-----------Generalinformation-----------Maxpoolsize:6Processes:6Requestsintop-

  8. javascript - 隐藏的 JavaScript 负载 - 2

    我发现这个javascript很奇怪,当我在我的控制台浏览器上运行时,它会给我一个带有以下消息的警告'AlwaysbewaryofJavascriptcontainingquotes.Noquotes=safe!'我很好奇(真的不知道这是不是一个东西,有什么用吗?)如果你们中有人愿意分享关于这种“技术”的知识,我将不胜感激!:)for(Ain{A????????????????????????????????????????????????????????????????:0}){alert(unescape(escape(A).replace(/u.{8}/g,[])))};

  9. javascript - 如果指定了多个类型和有效负载选项,为什么 Redux Promise 会返回 Unresolved promise ? - 2

    我很难弄清楚为什么会这样,但基本上ReduxPromise在返回类似内容时对我来说工作正常:return{type:STORY_ACTIONS.STORY_SPOTIFY_REQUEST,payload:request}但是,我现在需要像这样传递另一个信息return{order:0,//Newfieldtype:STORY_ACTIONS.STORY_SPOTIFY_REQUEST,payload:request}这导致Unresolvedpromise而不是数据。我尝试将order重命名为position或index之类的东西......仍然没有。 最佳

  10. 恒模盲均衡算法(CMA)及修正MCMA算法 - 2

    提供源代码及说明文档伸手党走远点儿。上来就口吐莲花的请自重,注意自己的素质和境界。恒模盲均衡算法(CMA)    在各种盲均衡算法中,恒模算法(CMA)是一种重要的盲信道均衡方法,广泛地应用在了数字通信系统中,这种算法隐含地利用了接收信号的高阶统计量。结构框图可由下图所示。误差函数可定义为:其中R2是一个依赖于信源序列高阶统计量的一个实常数,可定义如下式,p由信源序列决定:(目前见到的QAM信号,P=2)抽头系数更新可由下式表示: 系统均衡输出可表示为:修正MCMA算法MCMA针对CMA的代价函数进行改进,将其分为实部和虚部两部分,通过对实部和虚部同时进行信道均衡实现对载波相位恢复。MCMA的

随机推荐