WEB集群实现LVS负载均衡+域名解析 经典案例——详解
实现WEB上线并实现负载均衡+域名解析
- 项目介绍
- 项目流程图
- 项目实际操作
- FTP协议
- 断点续传功能
- 先安装FTP
- docker介绍
- 安装docker-ce构建lnmp
- LVS负载均衡
- lvs负载均衡DR模式 部署
- DNS域名解析
- DNS域名解析 实操
- Mail邮件报警
项目介绍
在linux平台上模拟企业级的应用部署环境,建立FTP,DNS,WEB,Mail等服务器,实现WEB服务器的负载均衡,总体架构的分析以及搭建的详细过程。
(1)DNS服务器用来给用户提供域名与IP的解析功能,使用户可以直接通过域名来访问服务器。
(2)Mail服务器用来实现邮件的收发等功能。
(3)Web服务器来提供网站服务,网站的服务器独立,存储用SAN来搭建,更好的控制了数据的维护、备份等功能。
(4)Web的负载均衡用lvs来实现,使两台服务器可以同时对外提供服务,减少了服务器的压力,也可以防止其中一台出现故障的时候导致的web服务不可用问题。
(5)FTP给用户提供文件的下载,以及上传等功能,使用户可以匿名登录、上传、下载,也可以充当服务器的yum源。
项目流程图
项目实际操作
记得要关掉防火墙和SELINUX
FTP协议
FTP协议的定义:
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
FTP的主要特征:
1.控制连接是建立在客户协议解释器和服务器协议解释器之间用于交换命令与应答的通信链路。
2.数据连接是传输数据的全双工连接。传输数据可以发生在服务器数据传输过程DTP和客户DTP之间,也可以发生在两个服务器的DTP之间。
连接模式 | 简介 |
---|---|
控制连接 | 控制连接为ftp交互最主要的连接。从客户端登录到ftp服务器开始,到登出服务器的整个生命周期里面是始终存在的一条连接。规律来看,服务器和客户端都是一应一答的消息模式,这是单纯的控制。直到连接被断开,ftp客户端和ftp服务器的交互结束。 |
数据连接 | ftp数据连接有多种模式,其中最常见的模式有两种,一种是主动模式,另外一种是被动模式。 |
主动模式 | 在控制连接需要发送数据的时候,ftp客户端会告诉ftp服务器将数据发送到地址和端口信息,之后然后ftp服务器会用自身的20端口将数据发送到ftp客户端,发送完成后,此条数据连接销毁,控制连接会响应一条发送完成的消息给ftp客户端。 |
被动模式 | 上图抓包就是采用了被动模式来发送数据的,从抓包看,ftp客户端发送给ftp服务器一条pasv的信令,ftp服务器响应了227,后面跟随着ip和端口信息,ftp客户端解析这些信息,并连接到指定的ip和端口,接收或者发送数据,进行相应的业务处理。 |
断点续传功能
简单说下断点续传功能,断点续传功能其实就是在发送的过程中,记录下发送的进度,当出现包括网络中断等发送出错的情况下,断开连接。等下次网络好的情况下,继续发送剩余文件的过程。
对于ftp的断点续传上传的功能实现,FTP协议中提供了一条APPE的控制命令用来追加文件,我们所实现的断点续传的命令就是围绕着这个命令进行的。
- 在正常上传的过程中,记录下已经发送的文件的长度
- 当网络发送异常时,记录当前发送文件长度,并关闭当前ftp连接,结束ftp的发送过程
- 当网络正常后,重新开始建立ftp的连接,此时由上传文件改为APPE命令,并在数据连接上发送剩余的数据到ftp服务器。
先安装FTP
注意这里要创建一个普通用户并设置密码,通常来讲我们root用户是个运维人员操作的,防止程序员和访客误操作!!
yum -y install vsftpd
systemctl start vsftpd
vim /etc/vsftpd/vsftpd.confanon_mkdir_write_enable=YES #允许匿名登入者有新增目录的权限(33行修改)anon_other_write_enable=YES #允许匿名登入者更多于上传或者建立目录之外的权限(34行修改)max_clients=100 #最大用户在线数量(130行,也就是最后一行)max_per_ip=2 #每ip最大线程(131行,也就是最后一行)anon_max_rate=30000 #匿名用户最大传输速度(132行,也就是最后一行)local_max_rate=50000 #本地用户最大传输速度(133行,也就是最后一行)
chmod -R 777 /var/ftp/pub/ #授权
systemctl restart vsftpd
docker介绍
1.docker定义:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2.docker运行模式:
docker仅需要自身的应用和依赖库,直接运行在宿主主机上,不需要宿主主机提供虚拟的物理资源。且更加的轻量,一个小的镜像仅需要小几百MB。中间Docker引擎是否有点像java的虚拟机,docker镜像也支持跨平台,同一个镜像直接可以在Linux、Windows、mac宿主主机上运行。
3.docker优势:
主机资源利用率高(直接运行在宿主机内核,不需要硬件虚拟化)
启动时间快(docker秒级比虚拟机快太多,虚拟机自身加载操作系统)
运行环境一致性(将应用同依赖环境打包成一个镜像,避免多处部署不一致)
部署简单(作为开发人员,学一个新东西就要去搭一个环境,而官方提供了很多镜像可以直接使用,非常方便)
4.docker网络模式:
网络模式 | 简介 |
---|---|
Host | 相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 |
Container | 在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。 |
None | 该模式将容器放置在它自己的网络栈中,但是并不进行任何配置。实际上,该模式关闭了容器的网络功能,在以下两种情况下是有用的:容器并不需要网络(例如只需要写磁盘卷的批处理任务)。overlay在docker1.7代码进行了重构,单独把网络部分独立出来编写,所以在docker1.8新加入的一个overlay网络模式。Docker对于网络访问的控制也是在逐渐完善的。 |
Bridge | 相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。 |
自定义网络 | 略 |
安装docker-ce构建lnmp
这里我使用的是离线安装,也可以导入阿里或清华的docker源。
tar xzf docker-19.03.9.tgz
cp docker/* /usr/bin/
cp docker.service /etc/systemd/system
systemctl start docker
systemctl stop firewalld #为防止遗漏,这里在关一遍
setenforce 0 #为防止遗漏,这里在关一遍
cp daemon.json /etc/docker
systemctl restart docker
mkdir /lnmp #创建我们更好的整理
ls nginx.conf #这是我们之前源码安装时提取的配置文件
vim Dockerfile #构建镜像FROM centos:7ADD nginx-1.12.2.tar.gz /root/RUN yum -y install gcc pcre-devel zlib-devel make php php-mysql php-fpm php-gd \&& cd /root/nginx-1.12.2 \&& ./configure \&& make \&& make install \&& yum clean all \&& echo "<?php phpinfo();?>" > /usr/local/nginx/html/index.phpCOPY start_lnmp.sh /usr/local/sbin/COPY nginx.conf /usr/local/nginx/conf/nginx.confCMD ["start_lnmp.sh"]
vim start_lnmp.sh #开启的配置文件#!/bin/bash/usr/local/nginx/sbin/nginxexec php-fpm -F
chmod +x start_lnmp.sh #给文件授权
docker build -t lnmp:1.1 ./ #构建镜像
docker imgaes #查看是否构建镜像
docker run --name lnmp -d -p 80:80 -v /opt/html:/usr/local/nginx/html lnmp:1.1 #开启并创建lnmp容器
ls mysql5.7_utf8.tar.gz #上传的之前构建好的mysql镜像
tar xzf mysql5.7_utf8.tar.gz #这一步必须解压,才能上传
docker load -i mysql5.7_utf8.tar #上传镜像
docker images #查看镜像
docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=lnmp -e MYSQL_USER=zrj -e MYSQL_PASSWORD=123 mysql:5.7 #开启并创建mysql容器
docker ps #查看容器
cd /opt/html/ #这是我们挂在的路径
ls /opt/html/Discuz_X3.4_SC_UTF8【20191201】.zip #上传的论坛
yum -y install unzip
unzip Discuz_X3.4_SC_UTF8【20191201】.zip(210服务器)
ls /opt/html/tinyshopV2.5_data.zip #上床的电商
unzip tinyshopV2.5_data.zip(211服务器)
chmod -R 777 /opt/html/upload/ #授权
我们代码布置好后进行测试。
LVS负载均衡
LVS的定义:
负载均衡集群是 Load Balance 集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端提供服务的一种方式。常用开源负载均衡软件有Nginx、LVS、Haproxy(ngnix和haproxy是七层负载均衡,LVS是四层负载均衡);商业的硬件负载均衡设备F5、Netscale。
四层就是基于IP和端口的负载均衡,七层就是基于URL等应用信息的负载均衡。所以简单的说四层负载均衡就是通过IP和端口接收请求再分发至真实的服务器,七层是通过URL或主机名接收请求,然后分发至真实的服务器。
创建一个vip实现负载均衡
lvs实现原理:
(1)首先,客户端向调度器(Director Server)发起一个请求,调度器将这个请求发送至内核
(2)PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。
(3)当请求达到INPUT链上,调度器判断报文中的目标端口来确定这个访问是不是要访问集群服务(因为还有可能只是ssh想单纯的远程登录主机这个主机),如果是访问的集群服务,那么就会强制修改这个包的目标IP
(4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
lvs负载均衡DR模式 部署
#DR模式(服务器那台机器)
yum -y install ipvsadm
ifconfig ens33:0 192.168.182.100 broadcast 192.168.182.100 netmask 255.255.255.255 up
route add -host 192.168.182.100 dev ens33:0
ipvsadm -C
ipvsadm -A -t 192.168.182.100:80 -s rr
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.210:80 -g
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.211:80 -g
#RS模式(web那台机器)
ifconfig lo:0 192.168.182.100 broadcast 192.168.182.100 netmask 255.255.255.255 up
route add -host 192.168.182.100 dev lo:0
systemctl stop firewalld
setenforce 0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
DNS域名解析
域名解析的定义:
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
域名到IP地址的解析过程的要点如下:
- 当某一个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,并称为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。
- 本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信。
- 若本地域名服务器不能回答该请求,则此域名服务器就暂时称为DNS的另一个客户,并向其他域名服务器发出查询请求。
DNS域名解析 实操
这里我解析的是VIP所以ip是192.168.182.100
yum -y install bind bind-chroot bind-utils
vim /etc/named.conflisten-on port 53 { any; };(13行,ip修改为any)llow-query { any; };(21行,ip修改为any)
vim /etc/named.rfc1912.zoneszone "wg.com" IN {type master;file "wg.com.zone";allow-update { none; };};
cp -p /var/named/named.localhost /var/named/wg.com.zone
vim wg.com.zone$TTL 1D@ IN SOA @ admin.wg.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS @A 127.0.0.1AAAA ::1www IN A 192.168.182.100
vim /etc/resolv.confnameserver 192.168.182.100(第2行)
systemctl restart named
nslookup www.wg.com(测试工具)
dig www.wg.com(测试工具)
注意:这里我们其实是实现DNS解析为什么是不出界面,原因是我们在内网搭建的,用自己的虚拟机浏览器(CentOS7)访问是没有问题,但是用真实机器(Windows)访问是访问不到的,这块其实没有问题的不要疑问自己!!!。
Mail邮件报警
vim /etc/mail.rcset from=**自己QQ号**@qq.com(最后一行自己添加的)set smtp=smtp.qq.comset smtp-auth-user=**自己QQ号**set smtp-auth-password=uyrvrioansrxdhhc(这是邮箱密码)set smtp-auth=login
#这里我用到的是VIP掉的情况下我们进行报警
vim mail.sh #!/bin/bash a=`ifconfig | grep -w "ens33:0" | awk '{print $2}' | wc -l`if [ $a -ne 0 ];thenecho "你的lvs正常,vip没有掉"elseecho "你的VIP发生故障,请及时处理,检查自己的LVS负载均衡。" | mail -s "警告" **自己QQ号**@qq.comfi
WEB集群实现LVS负载均衡+域名解析 经典案例——详解相关推荐
- WEB集群与各种负载均衡简介 (资源)
2019独角兽企业重金招聘Python工程师标准>>> 负载均衡构架图 集群(Cluster):是一组独立的计 ...
- Nginx+memcached+tomcat配置集群session共享负载均衡
Nginx+memcached+tomcat配置集群session共享负载均衡 配置环境: windows xp下 jdk1.7.0_10 nginx-1.2.6 (附下载) m ...
- centos7 rabbitmq 单机部署 集群部署 HAProxy 负载均衡搭建
准备工作 搭建 RabbitMQ Server 单机版 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 一.准备工作 节点 系统 版本 ip node1 centos ...
- Nginx以及通过Nginx实现tomcat集群配置与负载均衡
Nginx简介 启动,停止,和重新加载配置文件命令 Nginx功能 正向代理和反向代理的区别 反向代理 负载均衡 1.RR(默认) 2.权重 3.ip_hash 4.fair(第三方) 5.url_h ...
- Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)
文章目录 Pre 需求 工程 Code 继承AbstractLoadBalancerRule实现自定义Rule 随机权重策略 配置 验证 源码 Pre Spring Cloud Alibaba - 0 ...
- 高可用集群下的负载均衡(8):pacemaker + corosync + haproxy 实现高可用
实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 [1]调度器server1 server2 关闭 keepalived 和 httpd,并打开pc ...
- mysql 高并发 集群架构_一种高并发的GPU集群架构及其负载均衡方法技术
[技术实现步骤摘要] 一种高并发的GPU集群架构及其负载均衡方法 本专利技术属于GPU集群架构及其负载均衡方法 ,特别是涉及一种高并发的GPU集群架构及其负载均衡方法. 技术介绍 GPU因其高性能的并 ...
- Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)
Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...
- 负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负 ...
最新文章
- linux定时任务定向到空,Linux 定时任务下 /dev/null 21 相关知识说明
- 论推荐系统与精细化运营
- JS 设计模式四 -- 模块模式
- Office无法打开超链接地址问题
- gcc / -L 和 -Wl,-rpath 区别
- FreeSql (四)实体特性 Fluent Api
- 情怀再次输给现实!中国式星巴克,如今亏到连租金都交不起
- 最小生成树(Prim算法+Kruskal算法)
- 为什么摄像头模块功耗和EMI需要求助SerDes?
- 为什么我们需要更注重源代码安全?
- android 文件保存到应用和sd卡中
- 纵横iGoogle工具世界的程序发明王
- 一款简洁的 image-crop.js图片裁剪工具
- xilinx ip video
- X86/X64汇编语言基础
- guest用户计算机管理中没有,guest账户开启与关闭
- 软件工程课程实践-项目开发总结报告
- Odoo tree视图使用js添加按钮(以及跳转页面)
- 读取html到超级列表框,超级列表框读取TXT文本配置内容
- openh264 Windows 平台x64版本编译