阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS+Keepalived使用总结

160次阅读
没有评论

共计 17337 个字符,预计需要花费 44 分钟才能阅读完成。

一、lvs 简介和推荐阅读的资料 二、lvs 和 keepalived 的安装 三、LVS VS/DR 模式搭建 四、LVS VS/TUN 模式搭建 五、LVS VS/NAT 模式搭建 六、keepalived 多种 real server 健康检测实例 七、lvs 持久性工作原理和配置 八、lvs 数据监控 九、lvs+keepalived 故障排除

一、LVS 简介和推荐阅读的资料

      学习 LVS+Keepalived 必须阅读的三个文档。

1、《Keepalived 权威指南》下载见 http://www.linuxidc.com/Linux/2012-05/60951.htm

2、《LVS 手册》http://www.linuxidc.com/Linux/2016-03/129233.htm

3、《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》http://www.linuxidc.com/Linux/2016-03/129234.htm

这三个文档是官方文档,介绍了大部分原理和基础知识。下面我主要记录一些使用的案例,方便查阅。

LVS/DR + Keepalived 搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived 实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived 高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS 构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建 LVS 负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对 LVS 的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

      他们负责什么工作?

在 LVS+Keepalived 环境里面,lvs 主要的工作是提供调度算法,把客户端请求按照需求调度在 real 服务器,keepalived 主要的工作是提供 lvs 控制器的一个冗余,并且对 real 服务器做健康检查,发现不健康的 real 服务器,就把它从 lvs 集群中剔除,real 服务器只负责提供服务。

二、lvs 和 keepalived 的安装

      环境规划

      2*(lvs+keepalived 服务器)+n*real-server,一般 lvs+keepalived 是这样的架构。

      开始安装

1、下载软件包

在 http://www.linuxvirtualserver.org/ 下载 lvs 的软件包

在 http://www.keepalived.org/ 下载 keepalived 软件包

2、先编译安装 lvs,再安装 keepalived,安装 lvs 需要内核源码

下载 lvs 源码的时候,一定要选择你内核版本对应的源码包。

# uname  -r
2.6.18-164.el5PAE
#yum install kernel-devel -y  // 安装内核源码包
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  //ipvsadm 包就是 lvs 软件包,别觉得名字不一样
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install

检查 lvs 是否安装成功:

#ipvsadm // 查看是否有输出

#lsmod | grep ip_vs  // 如果 ipvsadm 有输出,那么使用这个命令查看是否加载 ip_vs 模块,如果加载,那么 lvs 算安装成功。

2、编译安装 keepalived,一定在安装完 lvs 以后在安装 keepalive

#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz // 不建议选择最新的版本
#tar -zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure --prefix=/  --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/linux/
Keepalived version       : 1.1.15
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use LinkWatch            : No
Use Debug flags          : Nod

 

看见如上输入,注意 yes 和 no 的值,如果一样,证明配置成功,如果 lvs 为 no,那么证明你的 lvs 没有安装成功,需要从新安装 lvs 再安装 keepalived。

#make && make install

如果没有报错,那么就安装成功了,检查一下是否生成了 keepalived 命令。

三、LVS VS/DR 模式搭建

环境介绍

主机 IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

122.225.32.136

Real server

Lvs_real 脚本

122.225.32.137

Real server

Lvs_real 脚本

122.225.32.142

VIP

 

注意:所有机器都在一个交换机,并且在一个网段。

1、在 134 和 135 上安装 ipvsadm 和 keepalived 软件。

2、修改 keepalived 的配置文件

122.225.32.134

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {lr@isadba.com}
   notification_email_from lvs@isadba.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {122.225.32.142}
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0             // 此值为 0,主要是为了方便测试,每次刷新页面结果会不一样
    protocol TCP
    real_server 122.225.32.136 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 122.225.32.137 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

122.225.32.135

和 122.225.32.134 相比,值需要删除 state MASTER 和 修改priority 的值小于 master 的。

real server

在所有 real server 上添加下面脚本,名执行# cat  /sbin/lvs_real

#!/bin/bash
#description:start realserver
vip=122.225.32.157
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start 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)
        echo "Stop Realserver"
        /sbin/ifconfig lo:0 down
        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

执行脚本以后,使用 ip add 命令查看 lo 接口是否添加了虚拟 ip 地址。

当然,real server 上面需要安装 http 服务,并启动,在 index.html 里面添加自己的 IP 地址,方便客户端访问时候辨别访问的是哪个主机。

3、配置完成以后,开始测试:

在 122.225.32.134 和 122.225.32.135 上使用 ip add 检查,虚拟 IP 应该配置在 134 上面。

测试 1{主要测试 lvs}:访问虚拟 IP 是否可以访问真实服务器,是否轮询 real server

在 master 上使用 ipvsadm 命令查看 lvs 状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          0        
  -> 122.225.32.136:http          Route   1      0          0

在客户端访问虚拟 IP 122.225.32.142,看是否可以访问。每次刷新,应该会换一个 real server。访问数次后,通过 ipvsadm 观察 lvs 状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          6        
  -> 122.225.32.136:http          Route   1      0          6

测试 2{主要测试 keepalived}:lvs 服务器的 HA,当 keepalived master 挂掉后,keepalived backup 会不会接管虚拟 IP。

关闭 master 主机上的 keepalived 进程。

在 backup 上 ip add 查看是否添加虚拟 IP,通过 /var/log/message 查看相关转换日志。

 

测试 3{测试 backup 的 lvs}:使用客户端访问现在虚拟 ip,查看是否一切正常

      测试完成后,开启 master 的 keepalived 进程,等虚拟 ip 转移到 master 以后,在从客户端访问,查看是否存在问题。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-03/129232p2.htm

四、LVS VS/TUN 模式搭建

环境介绍

主机 IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

122.225.32.155

Real server

 

122.225.32.156

Real server

 

122.225.32.142

VIP

 

注意:虚拟 ip,master 和 backup 在同意网段和交换机,realserver 在不同网段,但是同属于外网 IP

1、在 134 和 135 上安装 ipvsadm 和 keepalived 软件。

2、修改 keepalived 的配置文件

122.225.32.134

 # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {lr@isadba.com}
   notification_email_from lvs@isadba.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {122.225.32.142}
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind TUN
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 122.225.32.155 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 122.225.32.156 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

122.225.32.135

和 122.225.32.134 相比,值需要删除 state MASTER 和 修改priority 的值小于 master 的。

 

real server

在所有 real server 上添加下面脚本,名执行。

# cat /sbin/lvs_real_tun
#!/bin/sh
# description: Config realserver tunl port and apply arp patch
VIP=122.225.32.142
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "Tunl port starting"
ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "Tunl port closing"
ifconfig tunl0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0" {start|stop}
exit 1
esac

3、配置完成以后,开始测试:

测试方法和 DR 方法一样。

 

五、LVS VS/NAT 模式搭建

环境介绍

主机 IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

10.1.1.9

Real server

Lvs_real 脚本

10.1.1.10

Real server

Lvs_real 脚本

122.225.32.142

VIP eth0

外网虚拟 IP

10.1.1.118

VIP eth1

内网虚拟 IP

注意:所有机器都在一个交换机,并且在一个网段,LVS 服务器端最好开启数据包转发 net.ipv4.ip_forward。

1、在 134 和 135 上安装 ipvsadm 和 keepalived 软件。

2、修改 keepalived 的配置文件

注意:这里由于需要内外网 IP 的同时漂移,所以需要用到 vrrp 同步组,并且需要同时开启两个 vrrp 实例。

122.225.32.134

经过上面的配置,大家应该比较熟悉了,相对于 TUN 和 DR 模式,NAT 的配置文件主需要做一下修改。

! Configuration File for keepalived
global_defs {
   notification_email {lr@isadba.com}
   notification_email_from lvs@isadba.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_sync_group G1 {
  group {
    VI_1
    VI_2
  }
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {122.225.32.142}
}
vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {10.1.1.118}
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 10.1.1.251 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.1.1.8 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

122.225.32.135

和 122.225.32.134 相比,值需要删除 state MASTER 和 修改priority 的值小于 master 的。

real server

10.1.1.9 和 10.1.1.10 的网关需要指定的 lvs 的内网虚拟 IP 也就是 10.1.1.118,不需要其他设置。

 

六、keepalived 多种 real server 健康检测实例

keepalived 对 lvs 的 real server 检测方式主要有以下几种,HTTP_GET,SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK.

其中 TCP_CHECK 是最常用的方式,一般内容在 keepalived 手册中都可以查到,值得提一下的就是关于 digest 和 genhash 的用法。

HTTP_GET | SSL_GET {
url {
path /
digest <string> ##genssh 工具算出的。status_code 200
}
connect_port 80
bindto <IPADD>
connect_timeout 10
nb_get_retry 3
delay_before_retry 2
}

 

这里需要注意的就是 digest 的值如何算,一般在安装 keepalived 后,会生成一个 genhash 的工具。

可以使用

#genhash -h 查看帮助

常见的使用方法如下

# genhash  -s 10.1.1.8 -p 80 -u index.html 如果你是 ssl 连接,需要加 -S 参数,算出的值贴到配置文件中就可以了。

 

七、lvs 持久性工作原理和配置

一、LVS 持久连接技术

lvs 的持久性连接有两方面。

1、把同一个 client 的请求信息记录到 lvs 的 hash 表里,保存时间使用 persistence_timeout 控制,单位为秒。persistence_granularity 参数是配合 persistence_timeout 的,在某些情况特别有用,他的值是子网掩码,表示持久连接的粒度,默认是 255.255.255.255,也就是单独的 client ip,如果改成,255.255.255.0 就是 client ip 一个网段的都会被分配到同一个 real server。

2、一个连接创建后空闲时的超时时间,这个时间为 3 种

a、tcp 的空闲超时时间

b、lvs 收到客户端 tcp fin 的超时时间

c、udp 的超时时间

如何查看这些值?

# ipvsadm  // 可以查看连接空闲的超时时间,红色标记。

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port          Forward Weight ActiveConn InActConn

TCP  122.225.32.142:http rr persistent 10

-> 122.225.32.137:http          Route  1      0          1

-> 122.225.32.136:http          Route  1      0          0

# ipvsadm -l –timeout  // 查看 tcp tcpfin udp 的超时时间

Timeout (tcp tcpfin udp): 900 120 300

他们是如何工作的?

我们通过

# ipvsadm -Lcn

IPVS connection entries

pro expire state      source            virtual            destination

TCP 00:57  NONE        110.184.96.173:0  122.225.32.142:80  122.225.32.136:80

TCP 01:57  FIN_WAIT    110.184.96.173:54568 122.225.32.142:80  122.225.32.136:80

当一个 client 访问 vip 的时候,ipvs 或记录一条状态为 NONE 的信息,红色的值的初始值是 persistence_timeout 的值,然后根据时钟主键变小,在以下记录存在期间,同一 client ip 连接上来,都会被分配到同一个后端。

FIN_WAIT 的值就是 tcp tcpfin udp 的超时时间,当 NONE 的值为 0 时,如果 FIN_WAIT 还存在,那么 NONE 的值会从新变成 60 秒,再减少,直到 FIN_WAIT 消失以后,NONE 才会消失,只要 NONE 存在,同一 client 的访问,都会分配到统一 real server。

 

如何设置这些值?

persistence_timeout 可以通过以下两种方法设置

1、ipvsadm -A -t 192.168.20.154:80 -s rr -p 60

注意:上面命令中红色标记的 80 端口,表示同一客户端访问服务器的 80 端口,会被定义到同一个 real server,如果把 80 端口改为 0,那么同一客户端访问服务器的任何服务都会被转发到同一 real server。

2、修改 keepalived 配置文件在虚拟服务器配置下面加入 persistence_timeout 60

 

tcp tcpfin udp 的配置

#ipvsadm –set tcp tcpfin udp

# ipvsadm –set 120 50 50 // 实例

建议:tcpfin 的值最好小于 persistence_timeout 的值,这样比较方便计算。

lvs 持久性参考资料:

http://www.linuxvirtualserver.org/docs/persistence.html

二、防火墙标记

http://www.linuxidc.com/Linux/2016-03/129235.htm

三、conn_syncd

lvs 负载调度器在进行切换的时候,还是会影响服务的,因为备用的调度器上没有已经建立的连接信息,当这些已经建立的连接通过备用的调度器的时候,连接会被 reset 掉,从而导致连接中断,这个时候就该 conn_syncd 上场了。详细信息请参见(http://www.linuxvirtualserver.org/docs/sync.html),lvs 中文手册也提到过这个问题。

解决方案:

Here is simple intructions to use IPVS connection synchronization. On the primary load balancer, run
#ipvsadm --start-daemon=master --mcast-interface=eth0
On the backup load balancers, run
#ipvsadm --start-daemon=backup --mcast-interface=eth0
To stop the daemon, run
#ipvsadm --stop-daemon

注意:这个命令需要手工启用,并且如果主 lvs 挂掉,切换到备用的时候,连接信息是同步的,但是主恢复,抢占 vip 后,连接信息是不会被反同步回去的。配置不抢占是使用 nopreempt,只能配置在 backup 状态的主机,并且优先级必须比另外一台高,也就是配置在主 lvs 上,但是主 lvs 不能配置 state master 值。

八、lvs 数据监控

可以使用 lvs-rrd 工具和 cacti 来监控,具体请 google。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-03/129232.htm

一、lvs 简介和推荐阅读的资料 二、lvs 和 keepalived 的安装 三、LVS VS/DR 模式搭建 四、LVS VS/TUN 模式搭建 五、LVS VS/NAT 模式搭建 六、keepalived 多种 real server 健康检测实例 七、lvs 持久性工作原理和配置 八、lvs 数据监控 九、lvs+keepalived 故障排除

一、LVS 简介和推荐阅读的资料

      学习 LVS+Keepalived 必须阅读的三个文档。

1、《Keepalived 权威指南》下载见 http://www.linuxidc.com/Linux/2012-05/60951.htm

2、《LVS 手册》http://www.linuxidc.com/Linux/2016-03/129233.htm

3、《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》http://www.linuxidc.com/Linux/2016-03/129234.htm

这三个文档是官方文档,介绍了大部分原理和基础知识。下面我主要记录一些使用的案例,方便查阅。

LVS/DR + Keepalived 搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived 实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived 高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS 构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建 LVS 负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对 LVS 的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

      他们负责什么工作?

在 LVS+Keepalived 环境里面,lvs 主要的工作是提供调度算法,把客户端请求按照需求调度在 real 服务器,keepalived 主要的工作是提供 lvs 控制器的一个冗余,并且对 real 服务器做健康检查,发现不健康的 real 服务器,就把它从 lvs 集群中剔除,real 服务器只负责提供服务。

二、lvs 和 keepalived 的安装

      环境规划

      2*(lvs+keepalived 服务器)+n*real-server,一般 lvs+keepalived 是这样的架构。

      开始安装

1、下载软件包

在 http://www.linuxvirtualserver.org/ 下载 lvs 的软件包

在 http://www.keepalived.org/ 下载 keepalived 软件包

2、先编译安装 lvs,再安装 keepalived,安装 lvs 需要内核源码

下载 lvs 源码的时候,一定要选择你内核版本对应的源码包。

# uname  -r
2.6.18-164.el5PAE
#yum install kernel-devel -y  // 安装内核源码包
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  //ipvsadm 包就是 lvs 软件包,别觉得名字不一样
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install

检查 lvs 是否安装成功:

#ipvsadm // 查看是否有输出

#lsmod | grep ip_vs  // 如果 ipvsadm 有输出,那么使用这个命令查看是否加载 ip_vs 模块,如果加载,那么 lvs 算安装成功。

2、编译安装 keepalived,一定在安装完 lvs 以后在安装 keepalive

#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz // 不建议选择最新的版本
#tar -zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure --prefix=/  --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/linux/
Keepalived version       : 1.1.15
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use LinkWatch            : No
Use Debug flags          : Nod

 

看见如上输入,注意 yes 和 no 的值,如果一样,证明配置成功,如果 lvs 为 no,那么证明你的 lvs 没有安装成功,需要从新安装 lvs 再安装 keepalived。

#make && make install

如果没有报错,那么就安装成功了,检查一下是否生成了 keepalived 命令。

三、LVS VS/DR 模式搭建

环境介绍

主机 IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

122.225.32.136

Real server

Lvs_real 脚本

122.225.32.137

Real server

Lvs_real 脚本

122.225.32.142

VIP

 

注意:所有机器都在一个交换机,并且在一个网段。

1、在 134 和 135 上安装 ipvsadm 和 keepalived 软件。

2、修改 keepalived 的配置文件

122.225.32.134

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {lr@isadba.com}
   notification_email_from lvs@isadba.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {122.225.32.142}
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0             // 此值为 0,主要是为了方便测试,每次刷新页面结果会不一样
    protocol TCP
    real_server 122.225.32.136 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 122.225.32.137 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

122.225.32.135

和 122.225.32.134 相比,值需要删除 state MASTER 和 修改priority 的值小于 master 的。

real server

在所有 real server 上添加下面脚本,名执行# cat  /sbin/lvs_real

#!/bin/bash
#description:start realserver
vip=122.225.32.157
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start 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)
        echo "Stop Realserver"
        /sbin/ifconfig lo:0 down
        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

执行脚本以后,使用 ip add 命令查看 lo 接口是否添加了虚拟 ip 地址。

当然,real server 上面需要安装 http 服务,并启动,在 index.html 里面添加自己的 IP 地址,方便客户端访问时候辨别访问的是哪个主机。

3、配置完成以后,开始测试:

在 122.225.32.134 和 122.225.32.135 上使用 ip add 检查,虚拟 IP 应该配置在 134 上面。

测试 1{主要测试 lvs}:访问虚拟 IP 是否可以访问真实服务器,是否轮询 real server

在 master 上使用 ipvsadm 命令查看 lvs 状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          0        
  -> 122.225.32.136:http          Route   1      0          0

在客户端访问虚拟 IP 122.225.32.142,看是否可以访问。每次刷新,应该会换一个 real server。访问数次后,通过 ipvsadm 观察 lvs 状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          6        
  -> 122.225.32.136:http          Route   1      0          6

测试 2{主要测试 keepalived}:lvs 服务器的 HA,当 keepalived master 挂掉后,keepalived backup 会不会接管虚拟 IP。

关闭 master 主机上的 keepalived 进程。

在 backup 上 ip add 查看是否添加虚拟 IP,通过 /var/log/message 查看相关转换日志。

 

测试 3{测试 backup 的 lvs}:使用客户端访问现在虚拟 ip,查看是否一切正常

      测试完成后,开启 master 的 keepalived 进程,等虚拟 ip 转移到 master 以后,在从客户端访问,查看是否存在问题。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-03/129232p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计17337字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中