一、架构图
客户端:centos7,ip:192.168.41.42
LVS:centos7,ip:ens33为192.168.41.43,ens33:0为192.168.41.100(VIP地址(虚拟IP))
apache:centos7,ip:ens33为192.168.41.44,lo:0为192.168.41.100
apache:centos7,ip:ens33为192.168.41.45,lo:0为192.168.41.100
NFS:centos7,ip:192.168.41.46
二、工作原理分析
请求:客户端➡LVS➡Web集群
回复:Web集群中的某一Web服务器➡路由器➡客户端
具体分析:客户端发送请求到LVS的VIP(虚拟地址),LVS通过负载均衡策略将数据包转发到web服务器集群;Web服务器集群收到LVS转发过来的请求,通过分析数据包中的源IP地址,将包通过路由器直接回给客户端。也就是说,LVS只承担了访问的流量,并不承担回包的流量。
注:LVS必须和web集群在同一内部网络;在回包过程中,web集群的服务器会以VIP为源地址进行回包;如果客户端与服务器集群是跨网段的(客户端通过外网访问),则集群服务器回通过路由器中的路由策略进行回包。
三、实践
1.NFS服务器搭建
NFS服务器在192.168.41.46上搭建
mkdir /share #创建共享目录
mkdir -p /share/apache #创建apache服务访问路径
mkdir -p /share/nginx #创建nginx访问路径
echo "this is apache server" > /share/apache/index.html #创建apache访问文件
echo "this is nginx server" > /share/nginx/index.html #创建nginx访问文件
vim /etc/exports #编辑exports文件进行共享目录配置
/share/nginx 192.168.41.0/24(rw,no_root_squash,sync)
/share/apache 192.168.41.0/24(rw,no_root_squash,sync)
#编辑完毕,:wq保存退出
systemctl start nfs #开启nfs服务
systemctl start rpcbind #开启rpcbind服务
showmount -e 192.168.41.46 #查看共享文件信息
2.Web服务器搭建
nginx服务器在192.168.41.45运行
--------------------45服务器搭建nginx-------------------------
注:nginx服务器搭建有多种方式,我们既可以通过yum源的方式进行搭建,也
可以通过安装包编译安装;二者的区别在于:1.安装位置可能不同,yum安装是
在/usr/share/nginx目录下,而编译安装需要我们自己手动设定安装目录;2.
安装模块可能不同,yum安装的模块是官方给定的,而编译安装可以手动设定安
装哪些模块;3.yum安装直接会帮助我们解决依赖关系的安装,而编译安装需要
我们在安装nginx前将依赖安装完毕,但是centos的官方源中并没有nginx服务,
需要我们先安装epel额外源。
本次实验采用yum安装
yum install -y epel-release #安装epel额外源
yum install -y nginx #安装nginx
showmount -e 192.168.41.46 #查看共享目录
mount 192.168.41.46:/share/nginx /usr/share/nginx/html #nginx服务器挂载nginx的访问文件
df #查看挂载信息
ls /usr/share/nginx/html/ #查看html目录下有无index文件,不出意外是有的
cat /usr/share/nginx/html/index.html #查看index文件
systemctl start nginx #开启nginx服务
浏览器访问测试
apache服务器在192.168.41.44运行
--------------------------46服务器搭建apache-------------------------------
yum install -y httpd #yum安装apache服务器
showmount -e 192.168.41.46 #查看共享目录
mount 192.168.41.46:/share/apache /var/www/html #apache服务器挂载apache的访问文件
df #查看挂载信息
ls /var/www/html/ #查看html目录下有无index文件,不出意外是有的
cat /var/www/html/index.html #查看index文件
systemctl start httpd #开启apache服务
浏览器访问测试
3.apache服务器网络设置
nginx服务器同理
cd /etc/sysconfig/network-scripts/ #切换到网卡配置存放目录
cp ifcfg-lo ifcfg-lo:0 #拷贝一份lo:0的网卡配置文件,方便该虚拟网卡持久化的配置,不会因为重启而需要重新设置
vim ifcfg-lo:0 #编辑虚拟网卡的配置文件
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.41.100
NETMASK=255.255.255.255
#其他的都可以删除,更改完毕后:wq保存退出
systemctl restart network #重启网络服务
ifconfig #查看网络信息
------------------------------------------------------
同时,我们还需要修改内核文件,因为客户端访问的是VIP,
而按照我们的配置,LVS、apache、nginx都有VIP,而且
是同一地址,这样就会引起ARP冲突,所以需要修改内核文件,
来抑制apache和nginx服务器的arp冲突问题
vim /etc/sysctl.conf #修改内核文件
net.ipv4.conf.lo.arp_ignore = 1 #使本机只响应目的IP为本地物理网卡IP的ARP请求
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2 #使本机系统采用发送接口的IP作为ARP请求报文源地址
net.ipv4.conf.all.arp_announce = 2
#:wq保存退出
sysctl -p #刷新内核文件
route add -host 192.168.41.100 dev lo:0 #添加路由信息,指定地址为VIP地址,指定出站网卡为lo:0
route -n #查看路由信息
ifup lo:0 #启动lo:0接口
vim /etc/rc.local #route add 是临时添加的路由信息,如果想要持久化的设置,我们可以将路由添加命令写入rc.local文件,并赋予该文件可执行权限,每次我们开机的时候,就会自动执行rc.local文件中的命令
route add -host 192.168.41.100 dev lo:0
#:wq保存退出
chmod +x /etc/rc.local #赋予rc.local文件可执行权限
这样,apache服务器的配置就全部完成了(nginx服务器操作一模一样,就不再罗列)
4.LVS配置
yum install -y ipvsadm #yum安装ipvsadm
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.41.100
NETMASK=255.255.255.255
#:wq保存退出
systemctl restart network
ifconfig
modprobe ip_vs #加载ip_vs模块
ifup ens33:0 #开启ens33:0网卡
vim /etc/sysctl.conf #由于LVS负载调度器和各节点需要共用VIP地址,需要关闭icmp的重定向,不充当路由器。
net.ipv4.ip_forward = 0 #关闭路由转发功能
net.ipv4.conf.all.send_redirects = 0 #以下三条配置都是关闭icmp的重定向的功能
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#:wq保存退出
sysctl -p
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.41.100:80 -s rr
ipvsadm -a -t 192.168.41.100:80 -r 192.168.41.44:80 -g
ipvsadm -a -t 192.168.41.100:80 -r 192.168.41.45:80 -g
ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
客户端测试访问
四、总结
- 注意各服务器的内核文件的配置
- 注意各服务器的文件配置
- 防火墙一定要关闭(firewalld和selinux)