WEB集群-集群收尾-高可用服务

一、HA高可用服务

1、概述

高可用:HA(HighAvailablity) ------》Keepalived

选型 说明
keepalived 活着 高可用软件,负载使用,一些不涉及数据服务.
heartbeat 心跳 高可用软件,涉及数据库,存储数据相关可以用。heartbeat + drbd
商业高可用软件 RoseHA

2、原理

keepalived是基于VRRP协议实现高可用.

VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用.目前keepalive实现vrrp协议,通过vrrp实现高可用.

分为主,备一般是2个节点.主备之间通过vrrp协议发送数据包沟通.

主给备定期发送数据包,备收到数据包表示主还活着,备无法收到数据包,表示主挂了,备胎转正了,接管用户请求流量.

vrrp协议使用组播的ip. 224.xx.xx.xx

3、极速上手指南

高可用环境准备 需要安装的服务
Lb01 nginx + keepalived
Lb02 nginx + keepalived

部署服务

复制代码
yum install -y keepalived

keepalived配置文件分类(分为3个部分)

/etc/keepalived/keepalived.conf配置文件结构 说明
global_defs 全局定义部分
vrrp_instance vrrp协议配置,vip,主备,网卡....经常改动部分
用于管理与配置lvs的部分 virtual_server部分 用于管理控制lvs的.(lvs再说)
perl 复制代码
! Configuration File for keepalived
​
 global_defs {
   router_id lb01 
   #每一个keepalived的名字,当前网络中唯一
} 
​
#vrrp实例配置部分 用于配置VIP virtual_ipaddress
​
vrrp_instance vip_3 { 
#vrrp实例名字,设置在1对主备之间使用的名字.注意在同一对主备之间这个名字要一致.
​
   state MASTER #主/备 MASTER主 BACKUP备 注意大写
   interface eth0  #指定网卡网卡
   virtual_router_id 51   #1对主备之间id号同一即可. 
   priority 100  #优先级 数字越大优先级越高 设置建议: 主>备 100 50 相差50
   advert_int 1  #心跳间隔 多久发送一次vrrp数据 
   authentication {
    #授权与认证,保持默认即可. 对数据包进行加密
        auth_type PASS
        auth_pass 1111
   }
   virtual_ipaddress { #设置vip(虚拟IP),不能与内网IP重复。保证lb的心跳IP唯一
   10.0.0.3 dev eth0 label eth0:0 
} 

lb01

csharp 复制代码
[root@clb1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
​
 global_defs {
​
   router_id lb01
} 
 vrrp_instance vip_3 {
   state MASTER
   interface eth0
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
     auth_type PASS
     auth_pass 1111
   }
   virtual_ipaddress {
   10.0.0.3 dev eth0 label eth0:0
   }
 }

lb02

csharp 复制代码
[root@clb2 ~]# cat /etc/keepalived/keepalived.conf
 ! Configuration File for keepalived
​
 global_defs {
​
   router_id lb02
} 
 vrrp_instance vip_3 {
   state BACKUP
   interface eth0
   virtual_router_id 51
   priority 50
   advert_int 1
   authentication {
     auth_type PASS
     auth_pass 1111
   }
   virtual_ipaddress {
   10.0.0.3 dev eth0 label eth0:0
   }
 }

4、抓包查看

5、问题

1)脑裂故障

现象:主备都有vip.

原因:

  • 备认为主挂了,接管资源生成VIP.实际上主并没有挂,仍有VIP.
  • 有很多原因可以导致脑裂,开启防火墙,selinux,keepalived配置,物理线路.

解决:

  • 监控(备节点监控),只要备节点有vip就告警.

2)keepalived基于主机高可用软件

keepalived只会在主机挂了,网络断开后,才会进行主备切换. 默认情况下keepalived不会监控某个服务.

项目步骤:

  • 书写脚本,过滤服务进程数,端口数量,检查是否运行.
  • 然后进行判断如果服务没有运行,则关闭keepalived.
  • 修改keepalived配置文件,通过keepalived调用这个脚本.

书写脚本

注意给脚本执行权限. 脚本名字中不要包含服务名字.

bash 复制代码
#!/bin/bash
#author: lidao996
#desc: 监控 nginx 端口数量
​
port_cnt=`ss -lntup |grep nginx  |wc -l`
​
if [  $port_cnt -eq 0  ];then
   systemctl stop keepalived
fi

书写keepalived配置文件

csharp 复制代码
[root@clb1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
​
 global_defs {
​
   router_id lb01
} 
​
#定义监控脚本
vrrp_script keep_lb.sh {
   script /server/scripts/keep_lb.sh
   interval 2
   weight  1
   user root
}
​
 vrrp_instance vip_3 {
   state MASTER
   interface eth0
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
     auth_type PASS
     auth_pass 1111
   }
   virtual_ipaddress {
   10.0.0.3 dev eth0 label eth0:0
   }
 }

6、进阶用法

1)非抢占模式

keepalived 主备默认是抢占式,主挂了,备接管.主恢复,不希望主重新抢回资源.

配置非抢占式模式即可.

2个节点状态是备,并且配置nopreempt选项

2)双主模式

应对高并发的时候设置的双主模式.

二、Https证书

1、Https概述

基于http协议,传输的时候进行加密.

如果不使用https,数据传输都是明文的.

应用场景:

  • 目前大部分的业务都是使用https加密.
  • 企业想使用http 2.0 基于https.

部署https加密的流程

  • 域名 *.jd.com www.jd.com
  • 根据域名申请https证书(私钥与公钥(ca证书)),自己创建.
  • 进行配置web/lb.

2、Https加密流程(单台)

申请的https证书的域名与网站域名一致,才能正常使用. 否则用户访问会有警告与提示.

ini 复制代码
[root@web01 ]# mkdir -p /etc/nginx/ssl_keys/
[root@web01 ]# cat /etc/nginx/conf.d/ssl.oldboylinux.cn.conf
server {
   listen 443 ssl;
   server_name ssl.oldboylinux.cn;
   root /app/code/ssl;
   #ssl key
   ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
   ssl_certificate_key /etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;
   location / {
   index index.html;
   }
  }
[root@web01 /etc/nginx/ssl_keys]# mkdir -p
/app/code/ssl
[root@web01 /etc/nginx/ssl_keys]# echo
ssl.oldboylinux.cn web01 >  /app/code/ssl/index.ht

3、http跳转https

ini 复制代码
server {
  listen 80;
  server_name ssl.oldboylinux.cn;
  return 301 https://ssl.oldboylinux.cn$request_uri;
  }
server {
   listen 443 ssl;
   server_name ssl.oldboylinux.cn;
   root /app/code/ssl;
   ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
   ssl_certificate_key /etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;
   location / {
   index index.html;
   }
  }

4、网站集群https配置

1)全部加密

Web01

ini 复制代码
server {
   listen 443 ssl;
   server_name ssl.oldboylinux.cn;
   root /app/code/ssl;
   ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
   ssl_certificate_key /etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;
   location / {
   index index.html;
   }
  }

Clb01

ini 复制代码
upstream ssl_pools {
  server  10.0.0.7:443 ;
}
​
server {
   listen 80;
   server_name ssl.oldboylinux.cn;
   return 301 https://ssl.oldboylinux.cn$request_uri;
}
​
server {
   listen 443 ssl;
   server_name ssl.oldboylinux.cn;
   root /app/code/ssl;
   ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
   ssl_certificate_key /etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;
   location / {
   proxy_pass https://ssl_pools;
   proxy_set_header Host $http_host; 
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-For $remote_addr;
   }
  }

配置http 2.0

arduino 复制代码
listen 443 ssl http2;

2)外网加密

ini 复制代码
#web配置
server{
  listen 80;
  server_name ssl.oldboylinux.cn;
  root /app/code/ssl;
  location  /  {
    index index.html;
  }
}
​
#lb配置
upstream ssl_pools {
  server  10.0.0.7:80 ;
}
server {
   listen 80;
   server_name ssl.oldboylinux.cn;
   return 301 https://ssl.oldboylinux.cn$request_uri;
}
server {
   listen 443 ssl http2;
   server_name ssl.oldboylinux.cn;
   ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
   ssl_certificate_key /etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;
   location / {
     proxy_pass http://ssl_pools;
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Real-Ip $remote_addr;
  } 
}

温馨提示:

用户 负载加密(https) 负载到web未加密(http) 配置php网站的时候有问题.

对php动态部分进行配置.

fastcgi_param HTTPS on; #前面部分的请求是https

相关推荐
可爱又迷人的反派角色“yang”3 分钟前
redis知识点总集
linux·运维·数据库·redis·缓存
海奥华25 分钟前
进程调度算法 笔记总结
linux·运维·服务器·笔记·学习
864记忆12 分钟前
Linux操作系统自带的测试内存泄漏的命令
java·linux·运维
大柏怎么被偷了31 分钟前
【Linux】文件系统
linux·运维·数据库
laoliu19962 小时前
Odoo 18企业版源码 包含 部署教程
运维·服务器
守城小轩2 小时前
基于Chrome140的Quora账号自动化(关键词浏览)——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发
未来之窗软件服务2 小时前
幽冥大陆(五十五)ASR SetThreadInformation C语言识别到自动化软件
运维·自动化·asr·东方仙盟·操作系统级别错误
开开心心就好2 小时前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
Lbwnb丶2 小时前
检测服务器是否是虚拟化,如KVM,VM等
linux·运维·服务器