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

相关推荐
LKAI.21 分钟前
搭建Elastic search群集
linux·运维·elasticsearch·搜索引擎
青木沐2 小时前
Jenkins介绍
运维·jenkins
WTT00112 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋33 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中3 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭3 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
BUG 4043 小时前
Linux——Shell
linux·运维·服务器
大霞上仙4 小时前
Linux 多命令执行
linux·运维·服务器
冷心笑看丽美人4 小时前
探索 Samba 服务器:搭建跨平台文件共享的桥梁
运维·服务器