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

相关推荐
小马爱打代码4 分钟前
125个Docker的常用命令
运维·docker·容器
某风吾起6 分钟前
Linux 消息队列的使用方法
java·linux·运维
胡八一34 分钟前
解决docker: ‘buildx‘ is not a docker command.
运维·docker·容器
Rhys..1 小时前
Jenkins pipline怎么设置定时跑脚本
运维·前端·jenkins
老王聊主机2 小时前
2025年华为云一键快速部署幻兽帕鲁联机服务器教程
运维·服务器·华为云
qq_243050792 小时前
Netmask:网络掩码生成和转换程序!全参数详细教程!Kali Linux 教程!黑客渗透测试!
运维·网络·web安全·网络安全·黑客·渗透测试·kali linux
Moniicoo2 小时前
Linux中关于glibc包编译升级导致服务器死机或者linux命令无法使用的情况
linux·运维·服务器
wangchen_02 小时前
Linux终端之旅: 权限管理三剑客与特殊权限
linux·运维·服务器
ghx_echo3 小时前
linux系统下的磁盘扩容
linux·运维·服务器
hhzz3 小时前
ansible自动化运维实战--script、unarchive和shell模块(6)
运维·自动化·ansible