LVS高可用负载均衡

一、项目图

二、主机规划

主机 系统 安装应用 网络 IP
client redhat 9.5 NAT 192.168.72.115/24
lvs-master redhat 9.5 ipvsadm,keepalived NAT 192.168.72.116/24 VIP 192.168.72.100/32
lvs-backup redhat 9.5 ipvsadm,keepalived NAT 192.168.72.117/24 VIP 192.168.72.100/32
rs1 redhat 9.5 nginx,nfs-utils NAT 192.168.72.118/24
rs2 redhat 9.5 nginx,nfs-utils NAT 192.168.72.119/24
nfs redhat 9.5 nfs-utils NAT 192.168.72.120/24

三、项目搭建

注意:

搭建项目前,需要将所有虚拟机的防火墙和selinux关闭

首先先修改ip地址使用nmcli命令修改和nmtui可视化修改,或者安装虚拟机时,安装了桌面的可以在虚拟机的设置里面修改。我这里就先略这个修改IP的步骤,因为本文,主要是讲述LVS高可用的具体搭建步骤,这个修改每台机子的ip只是为了更加规范。如果不想修改,也可以完成该项目,修改ip不是必须的只是为了规范项目。

每台虚拟机都需要下载相应的软件,如果没有配置本地仓库的可以先配置本地仓库,然后再进行项目搭建。在/etc/yum.repos.d下创建后缀为.repo的文件再将一下内容添加保存:

再使用mount /dev/sr0 /mnt 挂载即可

bash 复制代码
[baseos]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0

1、配置nfs服务

(1)在nfs服务器上下载nfs服务

bash 复制代码
dnf install nfs-utils -y

(2)创建共享目录

bash 复制代码
mkdir /nfs/share -p

(3)在/etc/exports下添加如下内容

bash 复制代码
[root@nfs ~]# cat /etc/exports
/nfs/share	192.168.72.118(rw,sync)  192.168.72.119(rw,sync)

(4)添加web起始页页面内容,因为有两台web服务器,为了区分开,所以起始页内容有所不同

bash 复制代码
[root@nfs share]# echo "rs1 index.html" > index1.html 
[root@nfs share]# echo "rs2 index.html" > index2.html

(5)启动nfs服务

bash 复制代码
systemctl start nfs-server

(6)暴露共享目录

bash 复制代码
[root@nfs ~]# showmount -e 192.168.72.120
Export list for 192.168.72.120:
/nfs/share 192.168.72.119,192.168.72.118

2、 配置rs

rs1

(1)安装nginx和nfs

bash 复制代码
dnf install nginx nfs-utils -y

(2)挂载共享目录到nginx的起始页

bash 复制代码
[root@rs1 ~]# mount -t nfs 192.168.72.120:/nfs/share /usr/share/nginx/html/

(3)启动nginx和nfs

bash 复制代码
root@rs1 ~]# systemctl start nginx nfs-serve

(4)功能测试

bash 复制代码
[root@rs1 ~]# showmount -e 192.168.72.120
Export list for 192.168.72.120:
/nfs/share 192.168.72.119,192.168.72.118

(5)自动挂载

使用 vim 编辑器打开/etc/fstab 将以下内容加入

bash 复制代码
192.168.72.120:/nfs/share	/usr/share/nginx/html/	nfs	defaults	0 0

使用systemctl daemon-reload重新加载

使用mount -a 重新挂载

(6)配置nginx

bash 复制代码
[root@rs1 ~]# vim /etc/nginx/conf.d/rs1.conf
[root@rs1 ~]# cat /etc/nginx/conf.d/rs1.conf 
server {
	listen	80;
	server_name	192.168.72.118;
	location / {
		root	/usr/share/nginx/html;
		index	index1.html;
	}
}

(7)功能测试

bash 复制代码
[root@rs1 ~]# curl 192.168.72.118
rs1 index.html

rs2

关闭RS1服务器,然后我们对这台服务器进行克隆,取名为 RS2,然后启动 RS2 并做如下的修改。

(1)修改ip地址以及主机名

bash 复制代码
[root@rs1 ~]# hostnamectl hostname rs2
[root@rs1 ~]# nmcli c modify ens160 ipv4.addresses 192.168.72.119/24
[root@rs1 ~]# nmcli c up ens160 

再将rs1启动

(2)自动挂载,将rs1上的/etc/fstab 使用scp命令拷贝到rs2中

bash 复制代码
[root@rs1 ~]# scp /etc/fstab 192.168.72.119:/etc/

使用systemctl daemon-reload重新加载

使用mount -a 重新挂载

(3)配置nginx

bash 复制代码
[root@rs2 ~]# vim /etc/nginx/conf.d/rs2.conf
server {
        listen  80;
        server_name     192.168.72.119;
        location / {
                root    /usr/share/nginx/html;
                index   index2.html;
        }
}

(4)功能测试

bash 复制代码
[root@rs2 ~]# systemctl restart nginx
[root@rs2 ~]# curl 192.168.72.119
rs2 index.html

3、配置LVS+keepalived

(1)安装ipvsadm和keepalived

bash 复制代码
dnf install ipvsadm keepalived -y

(2)修改配置文件

使用vim 编辑器打开/etc/keepalived/keepalived.conf

bash 复制代码
[root@lvs-master ~]# vim /etc/keepalived/keepalived.conf 
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.250.100
    }
}
virtual_server 192.168.250.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.250.118 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.250.119 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

使用scp命令将lvs-master上的配置文件拷贝到lvs-backup上

bash 复制代码
scp /etc/keepalived/keepalived.conf root@192.168.250.117:/etc

(3)在lvs-backup上需改配置文件如下

bash 复制代码
[root@lvs-backup ~]# vim /etc/keepalived/keepalived.conf 
[root@lvs-backup ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.250.100
    }
}
virtual_server 192.168.250.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.250.118 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.250.119 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

(4)启动ipvsadm服务

bash 复制代码
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

(5)启动keepalived服务查看LVS规则是否添加

bash 复制代码
[root@lvs-master ~]# systemctl start keepalived 
[root@lvs-master ~]# 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.72.100:80 wrr
  -> 192.168.72.118:80           Route   1      0          0 
  -> 192.168.72.119:80           Route   1      0          0         

(6)在rs1在rs2上加上虚拟ip

bash 复制代码
ifconfig lo 192.168.72.100 netmask 255.255.255.255 up

(7)在rs上配置核心参数

bash 复制代码
[root@rs1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@rs1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
bash 复制代码
[root@rs2 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@rs2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

4、测试

bash 复制代码
[root@client ~]# curl 192.168.72.100
rs1 index.html
[root@client ~]# curl 192.168.72.100
rs2 index.html

测试成功!!!项目搭建完成

6、总结

(1)需要在rs服务器上配置核心参数

(2)启动ipvsadm服务时需要先ipvsadm-save > /etc/sysconfig/ipvsadm 再启动

(3)需要在rs上添加虚拟ip

相关推荐
一只小阿乐1 小时前
window 服务器上部署前端静态资源以及nginx 配置
运维·服务器·nginx
bjzhang751 小时前
docker部署tomcat网站服务器
服务器·docker·tomcat
Jay Kay2 小时前
brpc中后端server挂在同一个命名服务和不同命名服务的区别详解
运维·服务器·brpc
落笔画忧愁e8 小时前
扣子Coze飞书多维表插件添加数据记录
java·服务器·飞书
Code Warrior11 小时前
【Linux】基础开发工具(3)
linux·服务器
夕泠爱吃糖13 小时前
Linux中的静态库和动态库
linux·运维·服务器
Vic1010113 小时前
Java 开发笔记:多线程查询逻辑的抽象与优化
java·服务器·笔记
moppol15 小时前
探索下一代云存储技术:对象存储、文件存储与块存储的区别与选择
服务器
ZeroNews内网穿透16 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
神的孩子都在歌唱16 小时前
常见的网络攻击方式及防御措施
运维·服务器·网络