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 [email protected]:/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

相关推荐
conkl22 分钟前
Apache网页优化实战指南 - 让网站加载速度提升
linux·运维·服务器·开发语言·阿里云·apache
huangyuchi.1 小时前
【Linux】初见,进程概念
linux·服务器·操作系统·进程·进程管理·pcb·fork
搬码临时工1 小时前
域名访问内网网站知多少?通过自定义域名访问本地Web 服务
服务器·网络·tcp/ip
五阿哥爱跳舞2 小时前
【环境配置】解决linux每次打开终端都需要source .bashrc文件的问题
linux·运维·服务器
网易独家音乐人Mike Zhou2 小时前
【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
linux·运维·服务器·mcu·物联网·嵌入式·iot
liang89994 小时前
负载均衡器:Ribbon和LoadBalance
运维·ribbon·负载均衡
陶然同学4 小时前
从零开始:VMware上的Linux与Java开发环境配置
linux·运维·服务器·vmware·虚拟机
盛满暮色 风止何安4 小时前
BGP基础
运维·服务器·网络·网络协议·tcp/ip·网络安全·智能路由器
阿拉丁的梦4 小时前
ue5的blender4.1groom毛发插件v012安装和使用方法(排除了冲突错误)
linux·运维·服务器
成工小白12 小时前
【Linux】C语言模拟实现shell命令行(程序替换原理)
linux·运维·服务器