nginx反向代理配置+lnmp优化+七层负载upstream+keepalived

反代服务器取得内容缓存到本地,然后加速返回给客户端。

缓存命中率高 可以极大的缓解后端服务器压力。影响nginx

一般nginx作为负载均衡器,不会让nginx反向代理去缓存。而是让缓存服务器去缓存。

1.web服务
2.反代
3.伪四层

在这里插入图片描述
nat只负责转发过去

但是代理是转述 需要修饰的

nginx既要当成服务端接受用户请求
也要当成客户端去访问互联网

可以理解用户请求的具体信息
并且可以缓存到本地

代理需要监听在套接字上,并且理解这个协议。

代理就是双面人

在这里插入图片描述
在这里插入图片描述
后端真实主机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述nginx代理服务器
在这里插入图片描述
在这里插入图片描述
这个作为反向代理服务器

在这里插入图片描述
自己配置一个虚拟主机

在这里插入图片描述

自己不是web服务器 所以不需要root
直接反代到后端主机

直接反代即可

在这里插入图片描述

注意:如果后端代理有多个虚拟主机
proxy_pass就基于ip+端口+或者主机名

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果直接访问Ip就是代理服务器本身的
在这里插入图片描述

在这里插入图片描述

本机的包是从代理服务器发送过来的

在这里插入图片描述
在启动一个新的后端服务器

在这里插入图片描述
默认发布页面

在这里插入图片描述
这个缓存图片

在这里插入图片描述
在这里插入图片描述
希望图片到第二台服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
网关联系不到后端服务器
可能是没有启动

在这里插入图片描述
在这里插入图片描述
有了这个功能 动静分离就没问题了
在这里插入图片描述在这里插入图片描述

不加/意思是只要访问/下的比如/index.html就补充到80后面192.16.10.11/index.html

在这里插入图片描述在这里插入图片描述

表示只是把/admin/和图片代理了

在这里插入图片描述
在这里插入图片描述
后端主机添加目录/admin/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
就是把整个路径传到后面去了

在这里插入图片描述
添加/
以为访问/admin/的时候会替换为后端主机/下的内容

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这种加不加没有区别

在这里插入图片描述
正则无法替换
如果在80后面加/就会nginx -t语法错误

ngx_http_proxy_module模块:
		
			The ngx_http_proxy_module module allows passing requests to another server.
			
			1、proxy_pass URL;
				Context:	location, if in location, limit_except
				
				注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
					
					server {
						...
						server_name HOSTNAME;
						location /uri/ {
							proxy http://hos[:port];
						}
						...
					}
					
					http://HOSTNAME/uri --> http://host/uri 
					
				proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
					
					server {
						...
						server_name HOSTNAME;
						location /uri/ {
							proxy http://host/new_uri/;
						}
						...
					}
					
					http://HOSTNAME/uri/ --> http://host/new_uri/
如果location定义其uri时使用了正则表达式的模式,或在if语句或limt_execept中使用proxy_pass指令,则proxy_pass之后必须不能使用uri; 用户请求时传递的uri将直接附加代理到的服务的之后;
				
					server {
						...
						server_name HOSTNAME;
						location ~|~* /uri/ {
							proxy http://host;
						}
						...
					}
					
					http://HOSTNAME/uri/ --> http://host/uri/;
意思就是请求时什么 后面就必须时补在后面的而不是替换

一般用户访问后端知识服务器  代理服务器构建后发给后端服务器 后端真实服务器不知道是客户是谁
所以代理服务器可以修改报文首部 就是发往后端服务端的首部的值  添加客户首部IP
或者响应报文发给客户端的首部

2、proxy_set_header field value;
				设定发往后端主机的请求报文的请求首部的值;Context:	http, server, location
				
				proxy_set_header X-Real-IP  $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  实际用这个

在这里插入图片描述
后端抓包看包的首部信息

在这里插入图片描述
该日志格式

在这里插入图片描述
在这里插入图片描述
本来时%h也就是代理服务器的IP值
现在更换为上面定义的变量 就是客户端的IP

在这里插入图片描述
在这里插入图片描述
可以看到真正的客户端IP
在这里插入图片描述
ngx_http_headers_module模块
还可以更改代理服务器响应给客户端的时候
送给客户端的

ngx_http_headers_module模块
			The ngx_http_headers_module module allows adding the “Expires” and “Cache-Control” header fields, and arbitrary fields, to a response header.
			
			向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;
			
			1、add_header name value [always];
				添加自定义首部;
				
				add_header X-Via  $server_addr;
				add_header X-Accel $server_name;

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

代理还可以启动缓存进行加速哦~~

在这里插入图片描述
在这里插入图片描述
这个是代理服务器发送客户端报文允许哪些首部是可以发送过去的

代理还可以启动缓存进行加速哦~~

到后端取回来后放在本地磁盘

直接两个网络IO变成了一个磁盘IO

在这里插入图片描述
缓存还是文件路由哈希格式 更快 从右而左截取路由编码
找文件首先哈希 然后找很快 在内存哈希表

而后端真实的服务器还是遍历根目录

缓存空间需要先定义 哪个路径proxy_pass需要缓存 直接调用即可

只有get,head才需要缓存中查看 Post,put,delete不需要

shift+F5强刷 不读取缓存

服务器端也可以发送报文说不需要缓存

缓存空间有限

后端服务器宕机 缓存不新鲜了

nginx不是高档的 只有varnish才可以缓存的很得体 高效的缓存机制

nginx varnish装载同一台主机 解决网络IO延迟


nginx启动缓存功能

3、proxy_cache_path
				定义可用于proxy功能的缓存;Context:	http			
				
				proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
				
			4、proxy_cache zone | off;
				指明要调用的缓存,或关闭缓存机制;Context:	http, server, location
				
			5、	proxy_cache_key string;
				缓存中用于“键”的内容;
				
				默认值:proxy_cache_key $scheme$proxy_host$request_uri;
				
			6、proxy_cache_valid [code ...] time;
				定义对特定响应码的响应内容的缓存时长;
				
				定义在http{...}中;
				proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
				
				定义在需要调用缓存功能的配置段,例如server{...};
				proxy_cache pxycache;
				proxy_cache_key $request_uri;
				proxy_cache_valid 200 302 301 1h;
				proxy_cache_valid any 1m;

在这里插入图片描述
放在http中 在默认配置中写

定义缓存路径(磁盘空间) levels顶级子目录级别 设置三级 每级16个 keys_zone内存分配多大空间 size 10M
max_size磁盘空间最多2g 其他默认
在这里插入图片描述
在这里插入图片描述
按需创建

调用缓存
在这里插入图片描述
调用缓存名字
定义缓存内容类型
以及定义缓存参数
proxy_cache_key定义缓存的Key 有默认的值
对那种方法调用缓存
最少时间缓存项访问次数
use_stale 对于后端服务器处于什么问题下缓存哪些内容什么情况下还可以使用

在这里插入图片描述

在这里插入图片描述
网页访问主页
这就是文件路由
在这里插入图片描述可以看到相应信息
在这里插入图片描述

nginx也需要处理动态服务请求

nginx无法内建php模块
处理动态的页面只有fpm-server
找一台主机运行fpm nginx反代给后端 基于fastcgi_module反代给后端fastcgi模块 作为客户端
而fast_proxy_pass则是作为http客户端

所以构建lnmp

在这里插入图片描述
所以这就是三级结构

本地 只要不是.php结尾

.php就是用fastcg协议i反代给后端 fpm-server
加载完毕运行结果响应给前端主机

需要基于驱动访问数据 基于mysql协议去访问Mysql server

lnmp

在这里插入图片描述

fcgi server 需要接受请求还要处理并发 还要运行压力很大
所以不如使用AP 代替 aapche工作模式 event preforx worker

在这里插入图片描述
但是Mysql读取数据很慢
也可以给数据库缓存 memcache 专门的缓存服务器 内存级别
基于内存缓存 支持的数据结构太简单 所以被redis碾压 还支持数据存储

在这里插入图片描述
在这里插入图片描述
还可以搞个动静分离 静态的专门去处理静态的页面

搭建lnmp

一台主机nginx 处理静态内容

php内容发送给fpm-server
一台主机安装apahce + php
在这里插入图片描述
php-fpm server + mysql

但是phpMY 有静态有动态 所以放在动态的主机也不容易配置

在这里插入图片描述
配置fpm-server

在这里插入图片描述

在这里插入图片描述
不然别的主机连接不进来了

在这里插入图片描述
允许所有连接

在这里插入图片描述
定义进程数

在这里插入图片描述
健康状态检测也启动

在这里插入图片描述
因为进程属组是apache

在这里插入图片描述
php需要文件保存会话 用户信息等

所以该文件用户也应该是apache

在这里插入图片描述
在这里插入图片描述
n1主机设置作为前端nginx

前面已经设置了很多

在这里插入图片描述
为了避免冲突
在这里插入图片描述
新建一个
在这里插入图片描述
index设置主页

需要fastcgi_module作为客户端进行反代

在这里插入图片描述
前面说到作为代理服务器 代理服务器会隐藏很多客户端信息
但是[php服务器需要用户信息 生成对应的内容
所以有一文件用来可以展示给php的客户端信息
定义把什么参数传输给后端主机
在这里插入图片描述
在这里插入图片描述
脚本名称
当客户端请求一个脚本时候需要把脚本名称传递到后端
在这里插入图片描述
但是用户访问的脚本名字 fastcgi如何获取到该脚本呢 ?

所以需要有绝对路径 但是一般不在这个 文件中修改

在这里插入图片描述
分别是fastcgi自己的主页
脚本名称对应再fastcgi服务器下的脚本所在位置
Include表示其他的变量从xx文件获取

在这里插入图片描述第一个location就是静态内容
第二个location就是动态内容 表示.php都转发

在这里插入图片描述
在这里插入图片描述
fpm主机p
在这里插入图片描述
献给nginx配置静态页面
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过php连接mysql

php主机
vim /etc/my.cnf.d/server.cnf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述随机数

在这里插入图片描述
不是.php结尾
所以访问index.php 就是主页 但是没有图片 因为是静态内容
所以拷贝到nginx主机上
在这里插入图片描述
在这里插入图片描述
同样放到默认的根页面下

在这里插入图片描述
所以正常 这也就意味着资源包括静态和动态的话都需要一份
在这里插入图片描述
因为动静分离了 数据库用户root 密码就是安全设置设置的那个
在这里插入图片描述

继续优化 nginx不处理静态内容 全部proxy_pass给一个专门处理静态页面的服务器
继续添加主机

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
更改默认的根

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
报错了 查看进程发现httpd服务启动着

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前端主机配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到请求了各种各样的图片文件
在这里插入图片描述
当然了fastcgi还可以启动缓存优化

在这里插入图片描述
指定路径下 几级优化

客户端压测一下 随便找一个另外的主机 172.16.0.67
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

压测非常慢非常慢
因为是动态页面

所以尝试fastcgi的缓存功能

在这里插入图片描述
在http上下文添加

在这里插入图片描述需要进行调用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
先curl生成缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看还是没有缓存生成内容

可能生成私有信息
先注释掉缓存

在这里插入图片描述

在这里插入图片描述
对默认页面缓存
在这里插入图片描述
启动缓存

在这里插入图片描述
在这里插入图片描述
速度大大提高

10、fastcgi_keep_conn on | off;
请求的时候保持连接打开

在这里插入图片描述
在这里插入图片描述
可以发现速度还是提升了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为http协议和fastcgi协议并不完全兼容,所以很多变量的值向后方传递需要重新赋值
都可以实现缓存 1.定义缓存 2.调用缓存

在这里插入图片描述
主要就是讲解了两个反代模块

nginx实现七层负载upstream实战

nginx工作在strem模块下就可以负载均衡四层的 其实就是stream下的upstream负载均衡tcp.udp协议请求的
nginx七层是工作在http的upstream模块 http的upstream负载http请求 上有主机的方式
stream本身是反代 想要负载均衡就需要upsteam

haproxy既可以负载均衡也可以代理

在这里插入图片描述

如果后端是两台动态服务器
用户请求分发到另外一台主机之前的会话也没有了
所以可以会话粘性:

根据用户自身浏览行为 动态服务器本身可以会话缓存
一旦负载均衡
同一用户轮询 之前的会话信息就没有了

解决
1.会话粘性 lvs: sh算法 或者persistence 基于源地址实现的
2.对应应用层可以基于cookie绑定
但是一台服务器宕机了,session丢失
3.应该客户端无状态请求 会话集群 所有后端主机额外做集群
高性能的存储专门存储session 最好是内存级别的(memcache,redis)
连接后端存储主机实现数据的增删改查

memcache一旦宕机数据就没有了
redis可以持久
但是还是单点

在这里插入图片描述

nginx是虚拟主机 访问不同的资源去后端不同的主机 静态资源去静态资源服务器 动态资源去动态资源服务器
但是如果后端有2个静态/动态资源服务器呢???? 可以在nginx的upstream定义为一组服务器
所以反向代理的时候可以指向一组 组自己有自己的挑选算法(类似于lvs)

在这里插入图片描述
一个虚拟主机的不同的location对应不同的组

web负载均衡集群

在这里插入图片描述
nginx的upstrem模块自带健康检查功能,后端主机故障可以自动摘除~

但是nginx又单点了 所以可以加上keepalibed

server在http中是虚拟主机,在upstream中是后端真实主机
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前端主机

在这里插入图片描述
在这里插入图片描述
先前的配置先备份一下,先配置简单的

在这里插入图片描述
在这里插入图片描述
这是虚拟主机

在默认配置页定义upstream
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是负载均衡集群

还可以定义权重等等
在这里插入图片描述

在这里插入图片描述
先轮询 至少都一边 然后再加权

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
意思就是超时1次认为失败 最多失败三次就干掉

当两个服务器都down
设置去访问默认主页

在这里插入图片描述

在这里插入图片描述
两个都挂了就上

在这里插入图片描述
两台主机都停止服务

在这里插入图片描述
再次开启服务
还可以伪装down了实际并没有 类似于灰度测试下
在这里插入图片描述
在这里插入图片描述
再次去掉down恢复正常

也支持sh会话粘性

在这里插入图片描述
添加ip_hash
下面的backup需要注释

在这里插入图片描述
在这里插入图片描述
hash cookie就会把cookie当键

haproxy还支持很多种 讲haproxy会讲

在这里插入图片描述
吧来自同一个用户发往同一个请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一致性哈希!!

uri一定 适应与反代服务器

用uri的哈希值模2^32次方 范围就在0~ 2^32-1

同理对服务器ip地址做哈希计算 也取模

顺时针找离他近的服务器

在这里插入图片描述
当一个服务器宕机了
只影响一小段

但是如果服务器计算哈希离得很近很近

在这里插入图片描述
所以虚拟节点解决哈希环偏离
加盐 一个加五十个盐 那么3个节点150个点

在这里插入图片描述
在这里插入图片描述

这个就是自带虚拟节点的一致性哈希

在这里插入图片描述
多生成页面

在这里插入图片描述
在这里插入图片描述

分别生成20个页面

对于同一个uri第一次绑定后面肯定都在一个服务器

在这里插入图片描述
在这里插入图片描述

ngx_http_upstream_module模块 
		The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass directives.
			
		1、upstream name { ... }
			定义后端服务器组,会引入一个新的上下文;Context: http
			
			upstream httpdsrvs {
				server ...
				server...
				...
			}
			
		2、server address [parameters];
			在upstream上下文中server成员,以及相关的参数;Context:	upstream
			
			address的表示格式:
				unix:/PATH/TO/SOME_SOCK_FILE
				IP[:PORT]
				HOSTNAME[:PORT]
				
			parameters:
				weight=number
					权重,默认为1;
				max_fails=number
					失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用;
				fail_timeout=time
					设置将服务器标记为不可用状态的超时时长;
				max_conns
					当前的服务器的最大并发连接数;
				backup
					将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用;
				down
					标记为“不可用”;
					
		3、least_conn;
			最少连接调度算法,当server拥有不同的权重时其为wlc;
			
		4、	ip_hash;
			源地址hash调度方法;
			
		5、hash key [consistent];
			基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组合;
			
			作用:将请求分类,同一类请求将发往同一个upstream server;
			
			If the consistent parameter is specified the ketama consistent hashing method will be used instead.
				
			示例:
				hash $request_uri consistent;
				hash $remote_addr;
				
		6、keepalive connections;
			为每个worker进程保留的空闲的长连接数量;

在这里插入图片描述前面http服务的负载均衡都在http{}里面写的 只能用来负载http服务

其余所有四层的代理都应该放在stream模块中

自己无法处理四层服务 所以server必须都有真实的代理

包括http服务本身也可以在四层调度

在这里插入图片描述
举了例子ssh服务

在这里插入图片描述
吧http的都删除了
在这里插入图片描述
监听ssh服务 首先监听在22922
监听用户发过来的ssh服务

在这里插入图片描述

在这里插入图片描述
这个时候就是四层反向代理
在这里插入图片描述
当然也可以代理web服务

在这里插入图片描述在这里插入图片描述
定义负载均衡

在这里插入图片描述在这里插入图片描述在这里插入图片描述
web好验证
轮询的

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述只给一个数据库创建mydb

在这里插入图片描述
可以发现也是轮询的

关闭一个数据库服务
发现也是有健康检查功能哦


keepalived

在这里插入图片描述

一般需要奇数个 通过选举选出新的leader

怎么把A干掉
ABC在电源交换机上
这个电源交换机可以通过网络交换信号

多数的方可以干掉节点

BC选择谁是Leader 向电源交换机发信号 切断A的电源 或者闪一下A的电源

让故障节点不要去访问资源–FENCE

在这里插入图片描述
共享存储前面添加一个信号 A要是干掉
共享存储的需要屏蔽A的信号 不让A去访问资源
在这里插入图片描述
只有一方才可以代表集群工作称为quorum机制

投票选举是否大于半数

在这里插入图片描述在这里插入图片描述

N个节点 M个服务
每个资源的倾向不同 x资源首先倾向于A。y资源倾向于B

在资源节点定义

A服务出问题优先到C

在这里插入图片描述
以上是heartbeat
和keepalived不同

在这里插入图片描述

每个内网主机网关都指向虚拟VIP
多个路由器虚拟为一个虚拟路由器,通过VIP向外提供服务
这就是vrrp协议

路由网卡有优先级高低,谁高Vip就在谁身上的

keepalived实现了软件上就可以支持vrrp协议
vip配置在优先级高的主机上
keepalied进程在用户空间上,有几个主机就有几个keepalived进程。还支持健康检查

在这里插入图片描述IPVS wrapper生成规则 删除宕掉的机器

核心组件:
	vrrp stack  实现vrrp协议的
    ipvs wrapper 生成ipvs规则的
	checkers  健康状态检测工具
	控制组件:配置文件分析器
    IO复用器
	内存管理组件

keepalived监控进程状态 但是万一自己的vrrp stack进程和checkers进程都挂了
所以有watchdog  用来监控进程的进程				
通常是个硬件设备 在主板上
内核驱动这个设备金控内核级进程

在这里插入图片描述

真正的通信是mac地址
VIP飘逸了 客户端缓存的都是已经宕机的mac
所以不会再次发起解析请求 还是发给原来的主机
所以就需要虚拟MAC地址

再次广播 自己问VIP的MAC地址是什么
免费ARP
其他主机自动更新本地MAC 就是新的路由!!!!
在这里插入图片描述
优先级高的如果正常了 是否需要抢回VIP
在这里插入图片描述
可以配置不同的虚拟路由支持不同的服务的优先级主机不同

在这里插入图片描述
如果又来了一个keepalive说自己是最高优先级
但是不可信的
所以需要认证 组播的

在这里插入图片描述

keepalived:
			vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务:
				基于vrrp协议完成地址流动;
				为vip地址集群的节点生成ipvs规则(在配置文件中预先定义);
				为ipvs集群的各RS做健康状态检测;
				基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;(nginx,haproxy等需要)
				
			组件:
				核心组件:
					vrrp stack
					ipvs wrapper
					checkers
				控制组件:配置文件分析器
				IO复用器
				内存管理组件
HA Cluster的配置前提:
			(1) 各节点时间必须同步;
				ntp, chrony
			(2) 确保iptables及selinux不会成为阻碍;
			(3) 各节点之间可通过主机名互相通信(对KA并非必须);
				建议使用/etc/hosts文件实现; 
			(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
				D类:224-239

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

关闭iptabels

关闭firewalld服务

放行多播信息即可

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
多播功能需要打开

在这里插入图片描述

keepalived安装配置:
			CentOS 6.4+ 随base仓库提供;	
			
			程序环境:
				主配置文件:/etc/keepalived/keepalived.conf
				主程序文件:/usr/sbin/keepalived
				Unit File:keepalived.service
				Unit File的环境配置文件:/etc/sysconfig/keepalived
				

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
分别是全局配置
VRRP配置
LVS配置

配置文件组件部分:
				TOP HIERACHY
					GLOBAL CONFIGURATION
						Global definitions
						Static routes/addresses
					VRRPD CONFIGURATION
						VRRP synchronization group(s):vrrp同步组;确保吧VIP放在同一个节点的主机上
						VRRP instance(s):每个vrrp instance即一个vrrp路由器;
					LVS CONFIGURATION
						Virtual server group(s)
						Virtual server(s):ipvs集群的vs和rs;

在这里插入图片描述

在这里插入图片描述

组播地址

在这里插入图片描述

默认smtp是开启的

配置语法:
				配置虚拟路由器:
					vrrp_instance <STRING> {
						....
					}
					
					专用参数:
						 state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP;
						 interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口;
						 virtual_router_id VRID:当前虚拟路由器的惟一标识,范围是0-255;
						 priority 100:当前主机在此虚拟路径器中的优先级;范围1-254;
						advert_int 1:vrrp通告的时间间隔;
						authentication {
							auth_type AH|PASS
							auth_pass <PASSWORD>
						}
						virtual_ipaddress {
							<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
							192.168.200.17/24 dev eth1
							192.168.200.18/24 dev eth2 label eth2:1
						}
						 track_interface {
							eth0
							eth1
							...
						}
						配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;
						nopreempt:定义工作模式为非抢占模式;
						preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;

在这里插入图片描述VIP 配置绑定在哪个接口上interface
同一个虚拟路由器的id需要一样
默认1秒向外通告一次 自己的优先级和心跳信息等
pass只要是一样的即可

虚拟VIP格式
ip 指明在eno16xxx设备上 别名
在这里插入图片描述

在这里插入图片描述

多个地址的多播地址一样 就在一个域内
只要一样的即可
在这里插入图片描述
默认抢占式
在这里插入图片描述
在这里插入图片描述
node1优先级高 所以会抢占
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
同理 主节点关闭服务 VIP又飘逸回去

可以看到多播信息 一秒钟发送一个

在这里插入图片描述通过查看多播地址的信息查看抓包情况

在这里插入图片描述1秒一个 host指定主机地址
备用节点也可以收到

在这里插入图片描述
关闭node1

在这里插入图片描述
node2自己通告 可以看到优先级

再次开启node1 的服务

在这里插入图片描述

这就是vRRp

双主模型—主备和备主

再高一个虚拟路由器

不同的密码

这个虚拟路由器配置node2的优先级高,优先级低

在这里插入图片描述

给node2复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到两组都在通报
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

都变成优先级高的了
在这里插入图片描述
man keepalived.conf

配置和演练

通知脚本的使用方式:
			示例通知脚本:
				#!/bin/bash
				#
				contact='root@localhost'

				notify() {
					local mailsubject="$(hostname) to be $1, vip floating"
					local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
					echo "$mailbody" | mail -s "$mailsubject" $contact
				}

				case $1 in
				master)
					notify master
					;;
				backup)
					notify backup
					;;
				fault)
					notify fault
					;;
				*)
					echo "Usage: $(basename $0) {master|backup|fault}"
					exit 1
					;;
				esac			
				
脚本的调用方法:
				notify_master "/etc/keepalived/notify.sh master"
				notify_backup "/etc/keepalived/notify.sh backup"
				notify_fault "/etc/keepalived/notify.sh fault"	

在这里插入图片描述

文本粘贴进去

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

-p保留权限
在这里插入图片描述

Node1 和node2都先保留一份keepalved双主模型的

然后把keepalived只保留一个虚拟路由

:.,$d

在这里插入图片描述在这里插入图片描述

man keepalived.conf

添加几条新参数

在这里插入图片描述

脚本的调用方法:
				notify_master "/etc/keepalived/notify.sh master"
				notify_backup "/etc/keepalived/notify.sh backup"
				notify_fault "/etc/keepalived/notify.sh fault"	

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开启一个节点
在这里插入图片描述
在这里插入图片描述发现没有发送邮件

在这里插入图片描述

在这里插入图片描述
node1抢占
在这里插入图片描述
但是纳闷的是邮件没有发送出来

在这里插入图片描述
都加上双引号

停止服务 开启服务(node2)

在这里插入图片描述
node1开启
在这里插入图片描述
就是因为引号的问题 没有把后面的参数识别 所以需要加上

后续可以把这个通知脚本 使用python写等等 网上有多种

默认keepalived是为lvs设计的

lvs规则在两个keepalived上都有

再次开启两个RS 172.16.0.6 和172.16.0.7

在这里插入图片描述

在这里插入图片描述
时间同步

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
 x
都开启
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定义虚拟服务器

配置后端主机都down了访问页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虚拟服务器:
		配置参数:
			virtual_server IP port |
			virtual_server fwmark int 
			{
				...
				real_server {
					...
				}
				...
			}
			
			常用参数:
				 delay_loop <INT>:服务轮询的时间间隔;
				 lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法;
				 lb_kind NAT|DR|TUN:集群的类型;
				 persistence_timeout <INT>:持久连接时长;
				 protocol TCP:服务协议,仅支持TCP;
				sorry_server <IPADDR> <PORT>:备用服务器地址;
				real_server <IPADDR> <PORT>
				{
					 weight <INT>
					 notify_up <STRING>|<QUOTED-STRING>
					 notify_down <STRING>|<QUOTED-STRING>
					 HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }:定义当前主机的健康状态检测方法;
				}

在这里插入图片描述
判断后端主页校验码是否一样 这种要求更严格

在这里插入图片描述
nb_get_retry 3 重试3次
delay_before_retry :重试之前的延迟时长;
connect_timeout :连接请求的超时时长;

在这里插入图片描述
在这里插入图片描述
node2配置也是一样的

在这里插入图片描述
两边都先关闭服务
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ipvs规则两边都有
只是谁有VIP谁提供服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
curl就是默认主页了

在这里插入图片描述
在这里插入图片描述
服务都开启就又成功了

都关闭keepalived服务 配置双主模型

在这里插入图片描述
之前备份的文件

在这里插入图片描述
.,$ w >> /etc/xx

在这里插入图片描述
成功追加了

在这里插入图片描述
node2同样追加进去

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
没有98是因为98没有使用别名
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
是nginx主页

在这里插入图片描述
因为没有定义98是VIP 也没有定义98 是集群服务
在这里插入图片描述

后端RS需要给lo:1上添加98为vip
配置文件再添加一组98

比较麻烦 先不定义了

使用TCP检测
在这里插入图片描述
在这里插入图片描述
开启服务

在这里插入图片描述
在这里插入图片描述
0.7主机是TCP检测方式

在这里插入图片描述

健康状态检测成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TCP方法也很简单

real_server可以通过notify_up 或者down发邮件去检测

当然可以使用zabbix监控更好

keepalived与nginx实现高可用故障转移实战

使用keepalived高可用nginx

在这里插入图片描述

lvs比较麻烦
所以多使用Nginx或者haproxy工作在四层代理

nginx代理
外部网卡做成流动地址,通过VIP接受用户请求

后端请求也只响应给nginx的内网地址即可

在这里插入图片描述

后端主机使用私网地址
nginx两个接口
keepalived在Nginx主机做

重新开始配置
两台nginx主机 都是 一个对外接口 一个对内Ip

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
内部的RS 使用一台主机即可 虚拟为多台
所以需要添加多个IP

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编辑默认主页

在这里插入图片描述
三个一样

在这里插入图片描述
测试虚拟主机

在这里插入图片描述
只要确保俩个nginx服务启动着(类似于lvs的规则) VIP飘逸过来即可使用

	keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;
		分两步:(1) 先定义一个脚本;(2) 调用此脚本;
			vrrp_script <SCRIPT_NAME> {
				script ""
				interval INT 
				weight -INT 
			}
			
			track_script {
				SCRIPT_NAME_1
				SCRIPT_NAME_2
				...
			}
			

检测脚本检测
如果检测失败了 立刻减去权重

通过脚本监控完成资源转移

主不下线 降权 就可以把VIP给备节点了

在这里插入图片描述
在这里插入图片描述
两个节点都安装

嫌麻烦,可以把上面的keepalived文件复制过来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把地址修改下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本也复制过去

期待通过脚本完成VIP转移 而不是直接停掉服务 比如生产中主节点需要更新临时下线

脚本先定义后调用

调用在vrrp_instance里面

判断down文件是否存在 存在错误退出 不存在正确退出

脚本失败了 降权 -10 小于备用节点即可

1秒检测一次

跟踪脚本结果 tract_script

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
删除脚本又回来了

在这里插入图片描述
在这里插入图片描述
可以借助脚本监控Nginx服务

在这里插入图片描述

在这里插入图片描述
nginx做反代服务

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
先手动测试下能否成功

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

现在定义谁是主节点谁就开启nginx服务
备用节点就把Nginx服务关闭
就在notify.sh脚本中添加
在这里插入图片描述
在这里插入图片描述

现在查看Ip发现Node1 是keepalived节点 VIP在

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以通过外部的通知脚本完成辅助功能

删除down

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以这个就是通知脚本的作用

通过通知脚本的建立来降低优先级权重实现VIP漂移到备节点
备节点成为主节点后执行notify master 激活 开启nginx服务 并且发送邮件

但是一般别让nginx服务停掉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
nginx会自动状态检测

添加脚本监控Nginx进程完成降级

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
干掉nginx 或者开启http冲突

看能否转走VIP

两边都修改
在这里插入图片描述
多失败几次

都停掉keepalived服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
地址转移

在这里插入图片描述
在这里插入图片描述
nginx

在这里插入图片描述
可以发现启动不起来nginx服务
因为转成备用节点 已经触发了

需要手动开启

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先关闭 确保80端口没有倍监听

在这里插入图片描述
优先级也降低了

在这里插入图片描述
在这里插入图片描述
删除down也回不来 因为自己是96 对方是100了

在这里插入图片描述
高可用nginx

双主模型

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
node1拿到77的地址 node2拿到78的地址

在这里插入图片描述

尝试dns主机名解析到这两个VIP即可

检测健康

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
x

这就是keepalived高可用Nginx 生产中常用
还可以高可用haproxy哦
或者mysql的高可用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值