LVS/DR + keepalived搭建负载均衡集群

前面的lvs虽然已经配置成功也实现了负载均衡,但是我们测试的时候发现,当某台real server把nginx进程停掉,那么director照样会把请求转发过去,这样就造成了某些请求不正常。所以需要有一种机制用来检测real server的状态,这就是keepalived。它的作用除了可以检测rs状态外,还可以检测备用director的状态,也就是说keepalived可以实现ha集群的功能,当然了也需要一台备用director。

备用director也需要安装一下keepalived软件、ipvsadm;

keepalived调用lvs来实现自己的规则;

yum install -y keepalived ipvsadm


环境搭建工作:

主director    192.168.11.30    eth1网卡

从director    192.168.11.40    eth1网卡

real server1:    192.168.11.100    eth0网卡

real server2:    192.168.11.101    eth0网卡

用来curl测试的linux主机 192.168.11.0 网段即可;

主dr和备用dr都需要安装keepalived,ipvsadm;

两台rs安装nginx;


安装好后,主director的配置文件

vim /etc/keepalived/keepalived.conf   //加入如下:

vrrp_instance VI_1 {
    state MASTER   #备用服务器上为 BACKUP
    interface eth1
    virtual_router_id 51
    priority 100  #优先级,数值越大优先级越高;备用服务器上为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.11.110
    }
}
virtual_server 192.168.11.110 80 {
    delay_loop 6                  #(每隔6秒查询realserver状态,是否存活)
    lb_algo wlc                  #(轮询算法)
    lb_kind DR                  #(Direct Route)
    persistence_timeout 0    #(同一IP的连接多少秒内被分配到同一台realserver,0表示不连接)
    protocol TCP                #(用TCP协议检查realserver状态)
    real_server 192.168.11.100 80 {
        weight 100               #(权重)
        TCP_CHECK {
        connect_timeout 10       #(10秒无响应超时)
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
real_server 192.168.11.101 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

从director的配置文件只需要修改下面两项:

state MASTER  -> state BACKUP

priority 100 -> priority 90

配置完keepalived后,需要开启端口转发(主从dr都要做):

echo 1 > /proc/sys/net/ipv4/ip_forward

然后,两个rs上执行 /usr/local/sbin/lvs_dr_rs.sh 脚本,启动nginx服务

# /etc/init.d/nginx start

最后,两个director上启动keepalived服务(先主后从):

# /etc/init.d/keepalived start

另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则.

使用命令#ip addr    查看dr的虚拟ip地址;直接使用ifconfig不显示虚拟ip;

[[email protected] keepalived]# ip addr
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:97:c3:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.30/24 brd 192.168.11.255 scope global eth1
  
    inet 192.168.11.110/32 scope global eth1
    inet6 fe80::20c:29ff:fe97:c3f6/64 scope link 
    valid_lft forever preferred_lft forever

在其他机器curl测试,请求rs1和rs2次数相当;

[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs2rs2
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs2rs2

rs2上面stop nginx,然后curl测试,发现所有的请求都到rs1上面了;

日志里面也会记录remove rs2;日志文件:/var/log/messages

[[email protected] ~]# /etc/init.d/nginx stop
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# tail -2 /var/log/messages
Jun  9 23:27:19 localhost Keepalived_healthcheckers[1572]: TCP connection to [192.168.11.101]:80 failed !!!
Jun  9 23:27:19 localhost Keepalived_healthcheckers[1572]: Removing service [192.168.11.101]:80 from VS [192.168.11.110]:80

rs2启动nginx,日志文件记录adding rs2;curl测试,发现请求平均分配到rs1和rs2上面了;

[[email protected] ~]# /etc/init.d/nginx start
[[email protected] ~]# tail -2 /var/log/messages
Jun  9 23:31:38 localhost Keepalived_healthcheckers[1572]: TCP connection to [192.168.11.101]:80 success.
Jun  9 23:31:38 localhost Keepalived_healthcheckers[1572]: Adding service [192.168.11.101]:80 to VS [192.168.11.110]:80
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected] ~]# curl 192.168.11.110
rs2rs2
[[email protected] ~]# curl 192.168.11.110
rs1rs1
[[email protected]alhost ~]# curl 192.168.11.110
rs2rs2


加入dr2 备用dircetor机器;

主上停止keepalive服务;stop之后,在从上ip addr查看绑定虚拟ip,说明从接管了服务;切换速度很快;

主上启动keepalived服务后,主绑定虚拟ip,接管服务;

[[email protected] keepalived]# ip addr
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:af:73:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.40/24 brd 192.168.11.255 scope global eth1
    inet 192.168.11.110/32 scope global eth1

nc命令可以扫描端口是否打开:

在其他机器上扫描,11.100 和11.101,11.110的80端口是否打开;

#nc -z -w2 192.168.11.110 80

[[email protected] ~]# nc -z -w2 192.168.11.100 80
Connection to 192.168.11.100 80 port [tcp/http] succeeded!
[[email protected] ~]# nc -z -w2 192.168.11.101 80
Connection to 192.168.11.101 80 port [tcp/http] succeeded!
[[email protected] ~]# nc -z -w2 192.168.11.110 80
Connection to 192.168.11.110 80 port [tcp/http] succeeded!
时间: 2024-10-07 04:14:49

LVS/DR + keepalived搭建负载均衡集群的相关文章

Keepalived+LVS(dr)高可用负载均衡集群的实现

一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2.13-7.el7.x86_64ipvsadm-1.27-7.el7.x86_64httpd-2.4.6-45.el7.centos.x86_64mariadb-5.5.52-1.el7.x86_64php-5.4.16-42.el7.x86_64 二 原理及拓扑图 1.vrrp协议vrrp(Vir

DNS+keepalived+lvs实现高可用负载均衡集群

1.目的: 部署两台lvs调度器并利用keepalived实现主主模型,DNS添加两条A记录指向lvs调度器实现轮询,最终实现高可用负载均衡集群效果 2.拓扑规划: 3.配置实践 (1)同步所有机器时间 在每台机器实行ntp同步: [[email protected] ~]# ntpdate 10.1.0.1 26 Oct 20:10:57 ntpdate[5533]: step time server 10.1.0.1 offset -32408.643564 sec (2)先配置RS,在RS

实战:ansible自动化部署nginx+keepalived+mysql负载均衡集群

一.目的 使用ansible自动化部署nginx+keepalived+mysql负载均衡集群. 二.拓扑规划 三.详细步骤 1.环境的搭建 (1).安装ansible,同时配置私钥免密码进行通信 [[email protected] ~]# ssh-keygen  -t rsa #-t表示使用的加密类型,其中rsa1表示version1版本,rsa.dsa.ecdsa的加密对于的是version2版本 Generating public/private rsa key pair. #这里询问你

linux下lvs搭建负载均衡集群

常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat 常用商业集群硬件有:F5,Netscaler,Radware,A10等 一.LVS介绍 LVS是linux virtual server的简写linux虚拟服务器,是一个虚拟的服务器集群系统,可以再unix/linux平台下实现负载均衡集群功能.该项目在1998年5月由章文嵩博士组织成立. LVS的三种工作模式:1.VS/NAT模式(Network address translatio

使用lvs搭建负载均衡集群

有时候,单台服务器的性能可能无法应付大规模的服务请求,且其一旦出现故障,就会造成用户在一段时间内无法访问.通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益. 集群是一组相互独立的.通过网络互联的计算机组,并以单一系统的模式加以管理,或用于分摊负载,或用于增强可靠性,或用于高速计算. 一.集群类型 LB:Load Balancing,负载均衡集群,用于消除单点故障,当一个节点出现故障而无法正常提供服务时,自动.快速地切换到另外的节点上去:常见软件或实现方式有l

LVS搭建负载均衡集群

1.集群的概念: 服务器集群就是将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器 2.集群的分类: 高可用集群(HA) 主要用于高可用解决方案的实现,节点间以主备形式,实现容灾:在大型故障的情况下实现快速恢复,快速提供服务 工作方式: 主从方式:主机工作,备机监控 互为主从:两服务器同时在线,一台服务器故障可切换到另一台上.有效的利用服务器资源,但当服务器故障时候,将可能导致服务器负载过大 多台服务器主从:大部分服务器在线使用,小部分监控:若有部分服务器故障,可切换到指定

LVS-DR模式的配置及Heartbeat+Ldirectord+DR高可用负载均衡集群的搭建

主机环境 redhat6.5 64位 实验环境 服务端1 ip172.25.25.113   主机名:server3.example.com         服务端2 ip 172.25.25.114   主机名:server4.example.com          调度端2 ip 172.25.25.112   主机名:server2.example.com         调度端1 ip 172.25.25.111   主机名:server1.example.com 防火墙状态:关闭 虚

Linux集群:搭建负载均衡集群(一)

一.负载均衡介绍 主流开源软件LVS.keepalived.haproxy.Nginx等: 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,可以当做7层使用: keepalived的负载均衡功能其实就是lvs: lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而Nginx仅仅支持HTTP,HTTPS,mail,haproxy也支持MySQL这种: 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7

Linux集群:LVS搭建负载均衡集群(二)

一.DR模式LVS搭建 1.准备工作 调度器dir:192.168.242.128 真实服务器rs1:192.168.242.129,网关恢复为之前的原始网关 真实服务器rs2:192.168.242.130,网关恢复为之前的原始网关 VIP:192.168.242.110 2.dir上编写脚本 [[email protected] ~]# vim /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forw