编程技术分享平台

网站首页 > 技术教程 正文

lvs+keepalived+nginx环境搭建补充双机热备

xnh888 2024-10-17 17:42:14 技术教程 15 ℃ 0 评论

准备

各种虚拟机准备克隆等
nginx-1.22.1在linux服务器上的安装和使用
keepalived+nginx实现高可用实战(双机主备,双主热备)
LVS+Nginx环境搭建(DR模式)

只需要对keepalived的配置文件进行修改即可,毕竟keepalived和lvs完美兼容

搭建lvs+keepalived+nginx跟lvs+nginx还是有点区别的,不需要在LVS服务器(DR)构建虚拟IP。keepalived会帮忙搞定。但是还是需要在在两台nginx(SR)构建虚拟IP。

主lvs

! Configuration File for keepalived

global_defs {
   router_id LVS_15
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 17
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.17
    }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.17 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}

备lvs

! Configuration File for keepalived

global_defs {
   router_id LVS_16
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 17
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.17
    }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.17 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}

重启测试

先把之前lvs+nginx的配置清除

ipvsadm -C

启动keepalived

systemctl start keepalived

查看效果

[root@localhost etc]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.192.17:80 rr persistent 5
  -> 192.168.192.11:80            Route   1      0          0         
  -> 192.168.192.12:80            Route   1      0          0

双机热备

其实就是跟keepalived的双机热备差不多,只不过RS(两台Nginx)需要多加个虚拟IP,这里假设用的是192.168.192.18,则在两台nginx(11,12)进行如下操作

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo:1 ifcfg-lo:2
vi ifcfg-lo:2

输入如下内容

DEVICE=lo:2
IPADDR=192.168.192.18
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

进行刷新

ifup lo

依然需要添加路由

route add -host 192.168.192.18 dev lo:2

两台lvs的配置文件
lvs01

! Configuration File for keepalived

global_defs {
   router_id LVS_15
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 17
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.17
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 18
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.18
    }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.17 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}
#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.18 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}

lvs02

! Configuration File for keepalived

global_defs {
   router_id LVS_16
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 17
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.17
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 18
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.18
    }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.17 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
virtual_server 192.168.192.18 80 {
    #健康检查的时间,单位:秒
    delay_loop 6
    #配置负载均衡的算法:rr(轮询)
    lb_algo rr
    #设置lvs的模式:NAT/TUN/DR 我们用的是DR
    lb_kind DR
    #设置会话持久化时间
    persistence_timeout 5
    #协议,其实就是-t
    protocol TCP
    #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
    real_server 192.168.192.11 80 {
        #轮询默认权重为1
        weight 1
    #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }
    }
    real_server 192.168.192.12 80 {
        weight 1
        #设置健康检查
               TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间:秒
                        connect_timeout 2
            #重试次数
                        nb_get_retry 2
            #间隔时间:秒
                        delay_before_retry 3
        }   
    }
}

然后重启keepalived即可

systemctl restart keepalived

查看目前的lvs配置

[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.192.17:80 rr persistent 5
  -> 192.168.192.11:80            Route   1      2          0         
  -> 192.168.192.12:80            Route   1      0          0         
TCP  192.168.192.18:80 rr persistent 5
  -> 192.168.192.11:80            Route   1      0          0         
  -> 192.168.192.12:80            Route   1      0          0

可以看到有两组了。

然后在浏览器访问VIP:http://192.168.192.17/和http://192.168.192.18/分别渠道了11和12.
完美!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表