Keepalived+Lvs DR模式搭建

发布于:2024-12-18 ⋅ 阅读:(169) ⋅ 点赞:(0)

负载均衡集群搭建

DR模式lvs搭建

一.节点规划

DR模式需要三台虚拟机,三台虚拟机只需要有“公网”IP,但在这种模式下又多了一个VIP。对应的机器和IP如下:

IP

主机名

节点

192.168.77.170

Dir

调度器dir

192.168.77.171

Rs1

真实服务器rs1

192.168.77.172

Rs2

真实服务器rs2

192.168.77.128

Vip地址

二.基础准备

1.修改主机名

调度器dir节点:

Hostnamectl set-hostname dir

bash

真实服务器rs1节点:

Hostnamectl set-hostname rs1

bash

真实服务器rs2节点:

Hostnamectl set-hostname rs2

bash

2.关闭防火墙和selinux服务

Systemctl stop firewalld

Systemctl disable firewalld

Setenforce 0

3.配置网卡

三个节点都需要配置

Vi /etc/sysconfig/network-scripts/ifcfg-ens33

Dir节点:

Rs1节点:

Rs2节点:

三.搭建dr模式lvs

1.把三台服务器上的iptables规则清空并保存

iptables -F;iptables -t nat -F;service iptables save

#若弹出错误需要安装iptables-services

Yum -y install iptables-services

2.在dir服务器上安装ipvsadm

安装ipvsadm服务

Yum -y install ipvsadm

启动ipvsadm服务

Systemctl start ipvsadm

#弹出错误需创建一个文件

Touch /etc/sysconfig/ipvsadm

3.在rs1、rs2节点上安装nginx

安装nginx服务

Yum -y install nginx

给rs1,rs2设置默认主页,方便区分

[root@rs1 ~]#echo “rs1” > /usr/share/nginx/html/index.html

[root@rs2 ~]#echo “rs2” > /usr/share/nginx/html/index.html

启动nginx服务

Systemctl start nginx

Systemctl enable nginx #设置自启动

4.在dir上编写shell脚本,内容如下:

[root@dir ~]# cat /usr/local/sbin/lvs_dr.sh

#! /bin/bash

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

ipv=/usr/sbin/ipvsadm

vip=192.168.77.128

rs1=192.168.77.171

rs2=192.168.77.172

·  ipv:指向 ipvsadm 命令的路径,用于管理 LVS 配置。

·  vip:虚拟 IP 地址(VIP),即访问者访问的公共 IP 地址。

·  rs1rs2:代表后端的两台真实服务器(Real Server),它们负责处理客户端请求

#注意这里的网卡名字

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

#清空当前的 IPVS 配置表,确保新的配置生效

$ipv -C

#添加一个监听在 VIP:80 端口上的虚拟服务,使用加权轮询调度算法

$ipv -A -t $vip:80 -s wrr

#将两台真实服务器添加到虚拟服务中,设置为 LVS 负载均衡调度

$ipv -a -t $vip:80 -r $rs1 -g -w 1

$ipv -a -t $vip:80 -r $rs2 -g -w 1

5.在两台rs上编写shell脚本,内容如下:

[root@rs1 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

6.分别在三台机器上执行各自脚本

[root@dir ~]# bash /usr/local/sbin/lvs_dr.sh

[root@rs1 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@rs2 ~]# bash /usr/local/sbin/lvs_rs.sh

#可能会提示找不到命令

这种情况需要安装net-tools

Yum -y install net-tools

7.测试

可以先用ip a命令查看vip是否存在

Dir节点:

Rs1节点:

Rs2节点:

执行完三个脚本后,就可以测试了。但这次不可以直接在dir上用curl命令直接测试了,因为VIP在三台机器上都有设置。所以只能用浏览器来测试结果,如下图所示:

Keepalived+Lvs DR模式搭建

一.节点规划

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。在调度器上只要安装了keepalived,就不用再安装ipvsadm了,也不用去编写LVS相关的脚本了,也就是说keepalived已经嵌人了LVS功能。完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度服务的只需要一台,另外一台作为备用。

IP

主机名

节点

192.168.77.180

Master

Keepalived(调度器)主节点

192.168.77.181

Slave

Keepalived从节点

192.168.77.182

Web1

真实服务器rs1

192.168.77.183

Web2

真实服务器rs2

192.168.77.128

Vip地址

二.基础准备

1.修改主机名

master节点:

Hostnamectl set-hostname master

bash

slave节点:

Hostnamectl set-hostname slave

bash

Web1节点:

Hostnamectl set-hostname web1

Bash

Web2节点:

Hostnamectl set-hostname web2

bash

2.关闭防火墙和selinux服务

Systemctl stop firewalld

Systemctl disable firewalld

Setenforce 0

三.搭建keepalived+lvs DR模式

1.在主从节点上安装keepalived和ipvsadm

[root@master ~]# yum -y install keepalived

[root@master ~]# yum -y install ipvsadm

[root@slave ~]# yum -y install keepalived

[root@slave ~]# yum -y install ipvsadm

2.修改主备服务器配置

主服务器配置:

[root@master ~]# cat /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.77.128

    }

}

virtual_server 192.168.77.128 80 {             #VIP

    delay_loop 3         #每隔10秒查询realserver状态

    lb_algo wlc                                 #lvs算法

    lb_kind DR                                 #DR模式

    persistence_timeout 60            #(同一IP的连接60秒内被分配到同一台realserver)

    protocol TCP        #用TCP协议检查realserver状态

    real_server 192.168.77.182 80 {          #真实服务器ip

        weight 100            #权重

        TCP_CHECK {

            connect_timeout 10             # 10秒无响应超时(连接超时时间)

            nb_get_retry 3                     #失败重试次数

            delay_before_retry 3     #失败重试的间隔时间

            connect_port 80           #连接的后端端口

        }

}

     real_server 192.168.77.183 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

备服务器配置:

[root@slave ~]# cat /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.77.128             

    }

}

virtual_server 192.168.77.128 80 {             #VIP

    delay_loop 3         #每隔10秒查询realserver状态

    lb_algo wlc                                 #lvs算法

    lb_kind DR                                 #DR模式

    persistence_timeout 60            #(同一IP的连接60秒内被分配到同一台realserver)

    protocol TCP        #用TCP协议检查realserver状态

    real_server 192.168.77.182 80 {          #真实服务器ip

        weight 100            #权重

        TCP_CHECK {

            connect_timeout 10             # 10秒无响应超时(连接超时时间)

            nb_get_retry 3                     #失败重试次数

            delay_before_retry 3     #失败重试的间隔时间

            connect_port 80           #连接的后端端口

        }

}

     real_server 192.168.77.183 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

主备配置完成后启动keepalived服务,设置开机自启,查看下运行状态:

Systemctl start keepalived

Systemctl enable keepalived

Systemctl status keepalived

查看ip地址是否有vip

可见master机器上的ens33网卡上面已经出现了我们配置的虚拟ip:192.168.77.128,在slave机器上查看,并未发现虚拟ip说明配置正确,否则两台机器都有虚拟ip的话就出现了脑裂现象。

3.web服务器配置

Web1和web2节点安装nginx:

[root@web1 ~]# yum -y install nginx

[root@web2 ~]# yum -y install nginx

设置nginx网页访问界面,方便测试:

[root@web1 ~]# echo "rs1" > /usr/share/nginx/html/index.html

[root@web2 ~]# echo "rs2" > /usr/share/nginx/html/index.html

启动nginx服务并设置自启动:

[root@web1 ~]# systemctl start nginx

[root@web1 ~]# systemctl enable nginx

[root@web2 ~]# systemctl start nginx

[root@web2 ~]# systemctl enable nginx

查看是否有80端口

Netstat -ntpl

编写执行脚本:

Web1节点:

[root@web1 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

Web2节点:

[root@web2 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

编写完成后执行脚本:

[root@web1 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@web2 ~]# bash /usr/local/sbin/lvs_rs.sh

查看IP地址:

可以看到vip地址已经绑定到网卡上。

4.测试
(1).观察vip地址在哪台机器上:

可以看到此时vip也就是我们的虚拟ip在master上

(2).客户端浏览器访问vip:

连续刷新几次:

由此可见负载均衡效果已经实现

(3).关闭master上的keepalived服务,再次访问vip

可见,再次访问vip仍能访问,负载均衡仍能实现

此时查看slave上的ip:

我们发现此时vip已经自动跳到了slave机器上

(4).关闭web1站点服务,再次访问VIP

web01站点关闭后,再次访问vip我们发现仍能访问到业务。说明我们的高可用集群试验成功。

到此实验完毕!

然而在真实工作场景下,这两台web服务器里面的资源是一致的,我们这里为了能够更好的展示lvs负载均衡的效果,就将两台服务器的内容进行了修改。