Web集群-Nginx(七)完结
今日内容:
- 高可用服务,keepalived
- 数据加密服务,https
一、HA高可用服务
1.1 概述
HA高可用的英文全称(HighAvailablity),学习使用软件keepalived实现,
它的实现机制:
- 多台服务器组成高可用集群,生成虚拟IP(Virtual IP)
- dns解析到这个VIP地址即可
高可用软件的选型:
选型 |
说明 |
keepalived |
主给备定期发数据包,判定是否活着 高可用软件,负载使用,一般不涉及数据服务。 |
heartbeat |
通过心跳判定 高可用软件,涉及数据库,存储数据相关可以用。 heartbeat + drbd |
商业高可用软件 |
RoseHA…略…. |
1.2 keepalived原理
实现原理:
- keepalived是基于VRRP协议实现高可用.
- VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用。
- 分为主、备,一般是2个节点。主备之间通过vrrp协议发送数据包沟通.
- 主给备定期发送数据包,备收到数据包表示主还活着,备无法收到数据包,表示主挂了,备胎转正了,接管用户请求流量.
- vrrp协议使用组播的ip:224.xx.xx.xx
1.3 极速上手
高可用环境准备 |
需要安装的服务 |
ip |
lb01 |
nginx + keepalived |
10.0.0.5 |
lb02 |
nginx + keepalived |
10.0.0.6 |
部署服务
keepalived配置文件/etc/keepalived/keepalived.conf
,分为三部分
配置文件结构 |
说明 |
global_defs |
全局定义部分 |
vrrp_instance ⭐ ⭐ ⭐ ⭐ ⭐ |
vrrp协议配置,vip,主备,网卡….经常改动部分. |
用于管理与配置lvs的部分 |
virtual_server部分 用于管理控制lvs的.(lvs再说) |
lb01配置如下
lb02配置对比:
测试:
hosts设置
此时10.0.0.5为主,有10.0.0.3的VIP,另一台为备,没有VIP
测试网站访问正常(走10.0.0.3 —> 10.0.0.5)
抓包信息:
关闭lb01的服务
测试网站仍可正常访问(走10.0.0.3 —> 10.0.0.6),此时备机转正,拥有VIP
抓包信息
重启lb01的服务后,主回归正常
1.4 keepalived的问题
1.4.1 脑裂故障(重要)
故障现象:主备都有vip.
原因:
- 备认为主挂了,接管资源生成VIP,实际上主并没有挂,仍有VIP。
- 有很多原因可以导致脑裂:
- 开启防火墙
- selinux
- keepalived配异常
- 物理线路异常等
解决方法:
- 监控(备节点监控),只要备节点有vip就告警。
- 更狠一点监控备节点只要有vip,远程控制主节点,只要备节点认为主挂了,那就让他真的挂了
1.4.2 keepalived基于主机的高可用软件
问题现象:
- 虽然现在测试keepalived生效了
- 但是实际上是**基于手动关闭lb01的keepalived服务**实现的
- 像这种情况只会在主机挂了、网络断开后才会进行主备切换
- 如果仅是lb01的Nginx服务挂了,并不会触发keepalived的主备机制
- 这并不符合生产环境的要求。
目标:
- 某个服务关闭了,keepalived就进行主备切换
- 这里以nginx服务为例
项目步骤:
- 书写脚本,过滤服务进程数,端口数量,检查是否运行.
- 然后进行判断如果服务没有运行,则关闭keepalived.
- 修改keepalived配置文件,通过keepalived调用这个脚本
书写脚本
keepalived配置文件监控
测试:
- lb01,lb02都开启服务,默认走lb01
- 关闭lb01的nginx,脚本生效,lb01的keepalived服务也stop
- lb02生效,改走lb02
- 手动重启lb01的nginx和keepalived服务,lb01重新上线,改走lb01
个人评价:
还是不太智能,后面lb01的nginx恢复了,但是脚本没法恢复keepalived,还是要手动启服务
1.5 进阶用法
1.5.1 非抢占模式
什么是非抢占模式?
- keepalived主备默认是抢占式:主挂了,备接管
- 非抢占模式:主恢复,不希望主重新抢回资源,继续备接管。
配置非抢占模式:
- 两个节点都改为BACKUP状态
- 配置nopreempt选项
1.5.2 双主模式
应对高并发的时候设置的双主模式:
二、HTTPS证书
2.1 概述
https是基于http的协议,在传输的时候进行加密
部署https加密的流程
- 域名 *.jd.com www.jd.com
- 根据域名申请https证书(私钥与公钥(ca证书)),自己创建
- 进行配置web/lb.
阿里云支持的SSL证书
2.2 真实证书申请
申请SSL证书需要有真实域名,freedomain域名和SSL都免费
2.2.1 freedomian申请
在freedomian:https://freedomain.one/可以申请免费的域名、DNS、SSL证书
我申请的:gsblog.work.gd
进入SSL页面申请证书
申请完成
下载证书
里面是这三个文件
2.2.2 阿里云申请
阿里云每个账户提供20个免费域名额度,申请需要个人信息验证
进入免费域名购买页面
输入域名,申请证书,需要提供个人信息
2.3 命令行创建https证书
如果实在申请不到真实证书,也可以使用命令行创建一对
这种key会触发浏览器报警,不是私密连接
2.4 HTTPS加密流程-单台
注意:
申请的https证书域名要与网站域名一致才能正常使用。否则用户访问会有警告与提示
2.4.1 部署证书
将freedomain下载的证书上传到服务器中
2.4.2 HTTPS部署流程
创建子配置文件
创建站点目录
配置DNS,重启服务,测试访问https成功,证书安全有效
2.4.3 HTTP跳转HTTPS
有人误输入了http怎么办,为了防止不能正常访问到站点,需要设置http跳转https
子配置文件如下:
测试访问
2.5 网站集群HTTPS配置
集群HTTPS分为全部加密和部分加密
全部加密:
- 用户 —-> (加密)—-> lb(监听80/443) —-> (加密)—-> web(监听443)
部分加密:
- 用户 —-> (加密)—-> lb(监听80/443) —-> web(监听80)
2.5.1 全部加密
web端加密,一心一意监听443
lb端加密,守住前线80/443端口
设置hosts,重启服务,测试访问
加配置HTTP2.0
提示:
这个选项在1.25.1之后已被弃用
参考:https://cloud.tencent.com/developer/article/2325511
2.5.2 部分加密
web端不加密,监听80,放飞自我
lb端加密,守住前线80/443端口,转发注意改为80/http
2.6 课后任务
搭建网站wordpress配置https.
给lb01,lb02配置keepalived监控nginx
三、优化与监控
3.1 优化
https == http over tls
3.2 监控证书过期时间
流程:
- 通过命令获取证书的过期日期
- 与当前日期对比(30天之前)
获取剩余时间的命令
|&
表示把管道前面标准输出(正确)和标准错误输出都传递给后面的命令。如果不加,默认传递标准输出(正确)
编写获取检查过期时间的脚本
改进版