一、项目图
二、主机规划
主机 | 系统 | 安装应用 | 网络 | 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 挂载即可
[baseos]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
1、配置nfs服务
(1)在nfs服务器上下载nfs服务
dnf install nfs-utils -y
(2)创建共享目录
mkdir /nfs/share -p
(3)在/etc/exports下添加如下内容
[root@nfs ~]# cat /etc/exports
/nfs/share 192.168.72.118(rw,sync) 192.168.72.119(rw,sync)
(4)添加web起始页页面内容,因为有两台web服务器,为了区分开,所以起始页内容有所不同
[root@nfs share]# echo "rs1 index.html" > index1.html
[root@nfs share]# echo "rs2 index.html" > index2.html
(5)启动nfs服务
systemctl start nfs-server
(6)暴露共享目录
[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
dnf install nginx nfs-utils -y
(2)挂载共享目录到nginx的起始页
[root@rs1 ~]# mount -t nfs 192.168.72.120:/nfs/share /usr/share/nginx/html/
(3)启动nginx和nfs
root@rs1 ~]# systemctl start nginx nfs-serve
(4)功能测试
[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 将以下内容加入
192.168.72.120:/nfs/share /usr/share/nginx/html/ nfs defaults 0 0
使用systemctl daemon-reload重新加载
使用mount -a 重新挂载
(6)配置nginx
[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)功能测试
[root@rs1 ~]# curl 192.168.72.118
rs1 index.html
rs2
关闭RS1服务器,然后我们对这台服务器进行克隆,取名为 RS2,然后启动 RS2 并做如下的修改。
(1)修改ip地址以及主机名
[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中
[root@rs1 ~]# scp /etc/fstab 192.168.72.119:/etc/
使用systemctl daemon-reload重新加载
使用mount -a 重新挂载
(3)配置nginx
[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)功能测试
[root@rs2 ~]# systemctl restart nginx
[root@rs2 ~]# curl 192.168.72.119
rs2 index.html
3、配置LVS+keepalived
(1)安装ipvsadm和keepalived
dnf install ipvsadm keepalived -y
(2)修改配置文件
使用vim 编辑器打开/etc/keepalived/keepalived.conf
[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 MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}
}
virtual_server 192.168.250.100 80 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
使用scp命令将lvs-master上的配置文件拷贝到lvs-backup上
scp /etc/keepalived/keepalived.conf root@192.168.250.117:/etc
(3)在lvs-backup上需改配置文件如下
[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 BACKUPinterface ens160virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}
}
virtual_server 192.168.250.100 80 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
(4)启动ipvsadm服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
(5)启动keepalived服务查看LVS规则是否添加
[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
ifconfig lo 192.168.72.100 netmask 255.255.255.255 up
(7)在rs上配置核心参数
[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
[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、测试
[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