文章目录
前言
一:LVS负载均衡原理
二:实验详情
2.1:实验环境
- VMware软件
- 一台centos7作为LVS网关,双网卡
- 两台centos7作为Apache服务器
- 一台centos7作为NFS存储
- 一台win10作为客户端
2.2:实验拓扑图
2.3:实验目的
- win10客户机访问12.0.0.1的网址,通过nat地址转换,轮询的访问到Apache1和Apache2主机
- 搭建出nfs网络文件存储服务
2.4:实验过程
2.4.1:配置NFS服务器
-
添加两块硬盘,作为erbao和sanbao的挂载点
-
格式化磁盘,创建挂载点
[root@nfs ~]# fdisk -l '//重启后,查看两块硬盘是否被加载出来' [root@nfs ~]# fdisk /dev/sdb 命令(输入 m 获取帮助):n'//选择创建磁盘' Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): '//直接回车,选择默认' Using default response p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048):'//直接回车,选择默认' 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):'//直接回车,选择默认' 将使用默认值 41943039 分区 1 已设置为 Linux 类型,大小设为 20 GiB 命令(输入 m 获取帮助):w'//保存退出' The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 '//同样方法新建磁盘/dev/sdc' [root@nfs ~]# fdisk /dev/sdb '//省略内容' [root@nfs ~]# mkdir /opt/erbao /opt/sanbao '//创建挂载目录' [root@nfs ~]# vim /etc/fstab '//...省略内容,添加一下两段自动挂载的设置' /dev/sdb1 /opt/erbao xfs defaults 0 0 /dev/sdc1 /opt/sanbao xfs defaults 0 0 [root@nfs ~]# mount -a '//全部挂载' [root@nfs ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 ...省里内容 /dev/sdb1 20G 33M 20G 1% /opt/erbao /dev/sdc1 20G 33M 20G 1% /opt/sanbao
-
关闭防火墙,安装NFS相关软件
[root@nfs ~]# systemctl stop firewalld.service [root@nfs ~]# setenforce 0 [root@nfs ~]# rpm -q nfs-utils nfs-utils-1.3.0-0.48.el7.x86_64 '//已经安装nfs-utils(nfs组件)' [root@nfs ~]# rpm -q rpcbind rpcbind-0.2.0-42.el7.x86_64 //已经安装rpcbind(远端过程调用组件)' [root@nfs ~]# vim /etc/exports '//编辑共享配置文件' /opt/erbao 192.168.79.0/24(rw,sync,no_root_squash) /opt/sanbao 192.168.79.0/24(rw,sync,no_root_squash) '//添加上述两个配置'
-
开启服务并测试
[root@nfs ~]# systemctl start nfs [root@nfs ~]# systemctl start rpcbind [root@nfs ~]# netstat -ntap |grep rpc tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 25719/rpc.mountd tcp 0 0 0.0.0.0:42599 0.0.0.0:* LISTEN 25705/rpc.statd tcp6 0 0 :::20048 :::* LISTEN 25719/rpc.mountd tcp6 0 0 :::53299 :::* LISTEN 25705/rpc.statd [root@nfs ~]# showmount -e Export list for nfs: /opt/sanbao 192.168.79.0/24 /opt/erbao 192.168.79.0/24
-
选择仅主机模式,修改IP地址
-
修改IP地址
[root@nfs ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 '//...省略内容,修改为static' BOOTPROTO=static '//...省略内容,尾行添加内容' IPADDR=192.168.79.136 NETMASK=255.255.255.0 GATEWAY=192.168.79.1 [root@nfs ~]# systemctl restart network [root@nfs ~]# ifconfig '//修改成功' ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.79.136 netmask 255.255.255.0 broadcast 192.168.79.255
2.4.2:配置两台Apache服务器
-
两台Apache服务器安装httpd并关闭防火墙
[root@apache1 ~]# yum install httpd -y [root@apache1 ~]# systemctl stop firewalld.service [root@apache1 ~]# setenforce 0 [root@apache2 ~]# yum install httpd -y [root@apache2 ~]# systemctl stop firewalld.service [root@apache2 ~]# setenforce 0
-
选择仅主机模式
-
修改两台Apache服务器的IP地址
[root@apache1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 '//...省略内容,修改为static' BOOTPROTO=static '//...省略内容,尾行添加内容' IPADDR=192.168.79.134 NETMASK=255.255.255.0 GATEWAY=192.168.79.1 [root@apache1 ~]# systemctl restart network [root@apache1 ~]# ifconfig [root@apache1 ~]# showmount -e 192.168.79.136 '//验证nfs服务没有问题' Export list for 192.168.79.136: /opt/sanbao 192.168.79.0/24 /opt/erbao 192.168.79.0/24 '//相同方法修改Apache2'
-
自动挂载nfs共享目录
[root@apache1 ~]# vim /etc/fstab '//尾行添加挂载配置' 192.168.79.136:/opt/erbao /var/www/html nfs defaults,_netdev 0 0 [root@apache1 ~]# mount -a [root@apache1 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 ...省略内容 192.168.79.136:/opt/erbao 20G 32M 20G 1% /var/www/html '//相同方法配置Apache2服务器'
-
编辑首页文件
[root@apache1 ~]# vim /var/www/html/index.html <h1>this is erbao web</h1> [root@apache1 ~]# systemctl start httpd.service [root@apache1 ~]# netstat -ntap |grep 80 tcp6 0 0 :::80 :::* LISTEN 62305/httpd '//相同方法配置Apache2服务器'
2.4.3:加载ip_vs模块,安装ipvsadm工具并设置LVS网卡
-
加载ip_vs模块
[root@lvs~]# modprobe ip_vs [root@lvs~]# cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
-
安装ipvsadm工具
-
[root@lvs ~]# yum install ipvsadm -y
-
设置双网卡
[root@lvs ~]# cd /etc/sysconfig/network-scripts [root@lvs network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36 [root@lvs network-scripts]# vim ifcfg-ens33 '//...省略内容,修改为static' BOOTPROTO=static '//...省略内容,尾行添加内容' IPADDR=12.0.0.1 NETMASK=255.255.255.0 [root@lvs network-scripts]# vim ifcfg-ens36 '//...省略内容,修改为static' BOOTPROTO=static '//..省略内容,原本的33改为36' NAME=ens36 UUID=6ba4ac2f-cb59-454f-9274-b48a6ecadeda '//删除此行 UUID' DEVICE=ens36 '//原本的33改为36' ONBOOT=yes IPADDR=192.168.79.1 NETMASK=255.255.255.0
-
开启路由转发功能
[root@lvs network-scripts]# vim /etc/sysctl.conf net.ipv4.ip_forward=1 '//尾行插入,注意不要有#号' [root@lvs network-scripts]# sysctl -p '//重载路由转发功能' net.ipv4.ip_forward = 1
-
清空防火墙表规则,并这种NAT地址转换
[root@lvs network-scripts]# iptables -F '//情况转发表' [root@lvs network-scripts]# iptables -t nat -F '//情况nat地址转换表' oot@lvs network-scripts]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.79.0/24 -j SNAT --to-source 12.0.0.1
2.4.4:修改win10IP地址
-
设置为仅主机模式
2.4.5:保存规则并测试
[root@lvs network-scripts]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@lvs network-scripts]# systemctl start ipvsadm.service
[root@lvs network-scripts]# cd /opt
[root@lvs opt]# vim nat.sh
#!/bin/bash
ipvsadm -C '//情况内核虚拟服务器表中的所有记录'
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.79.134:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.79.135:80 -m
ipvsadm
[root@lvs opt]# chmod +x nat.sh
[root@lvs opt]# ./nat.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs:http rr
-> 192.168.79.134:http Masq 1 0 0
-> 192.168.79.135:http Masq 1 0 0
2.5:实验验证
-
打开win10主机,访问12.0.0.1
-
已经成功,采用了轮询算法访问两个网站
-
若不成功,则需要情况缓存再次尝试