一、什么是高可用?

nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障。

1、nginx集群单点问题

  • 分发器宕机怎么处理?

    假如nginx服务器挂掉了,那么所有的服务也会跟着瘫痪 。

    一种方法是人为监控,发现主分发器宕机后,立马登录备分发器,并给它分配虚ip。

    另一种办法是用软件来替代人来监控,自动登录备分发器,分配虚ip。
  • 数据服务器宕机怎么处理?

    分发器可以自动判断数据服务器的存活状态,不对宕机服务器要数据。

2、Keepalived介绍

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使 其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

  总结来说:Keepalived软件是一个监控+自愈的软件。

  运行协议是VRRP,主分发器的keepalived会向网络中发组播,宣告自己还活着,组播地址:224.0.0.18。

$ tcpdump -nn -vvv -i ens33 vrrp     #查看组播的包
192.168.31.40 > 224.0.0.18: vrrp 192.168.31.40 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: 192.168.31.213 auth "1111^¥##"
输出解析:192.168.31.40是master,目标地址是224.0.0.18,使用的协议是VRRPv2版本,虚拟id是51,优先级是100,简单验证类型,一秒发一次,长度20字节,虚Ip是192.168.31.213, 验证的密码是111#$Z%#

二、keepalived安装管理

1、keepalived下载

keepalived官网下载地址

  

  linux下载keepalived软件:

$ wget http://www.keepalived.org/software/keepalived-2.0.8.tar.gz

2、keepalived安装

使用如下shell脚本keepalived_instll.sh安装keepalived软件。

$ sh keepalived_install.sh
#keepalived安装脚本
#!/bin/bash
pkg=keepalived-2.0.8.tar.gz tar xf $pkg
yum -y install kernel-devel
ln -s /usr/src/kernels/3.10.0-862.14.4.el7.x86_64/ /usr/src/linux
cd keepalived-2.0.8/
yum install openssl-* -y
./configure --prefix=/usr/local/keepalived
make
make install
mkdir -pv /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

3、启动keepalived

$ systemctl start keepalived

三、构建高可用集群

1、试验环境准备

主机名 IP 角色 系统 配置 软件
Master.ayitula.com 192.168.31.40 主分发器 centos7.5 2核4G Nginx+keepalived
Backup.ayitula.com 192.168.31.41 备分发器 centos7.5 2核4G Nginx+keepalived
Web01.ayitula.com 192.168.31.42 数据服务器1 centos7.5 2核4G Nginx
Web02.ayitula.com 192.168.31.43 数据服务器2 centos7.5 2核4G Nginx

2、软件环境部署步骤

1)分发器:nginx+keepalived

  2)数据服务器:Nginx

  3)配置Nginx分发器

  4)配置数据服务器页面(web01 web02)

  5)配置keepalived.conf

  6)测试

3、配置Nginx集群

upstream web {
server 192.168.31.42 max_fails=2 fail_timeout=3; # 超时时间3秒内失败2次认为服务器死了
server 192.168.31.43 max_fails=2 fail_timeout=3;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web;
}
}

4、配置keepalived

(1)主分发器keepalived

! Configuration File for keepalived

global_defs {
router_id NGINX_DEVEL
} vrrp_script check_nginx { # 定义一个脚本
script "/etc/keepalived/nginx_pid.sh" # 脚本路径
interval 2 # 探针,此处是每两秒执行一次脚本
fall 1 # 失败次数 1
} vrrp_instance nginx { # 定义名为nginx实例
state MASTER # 主机状态
interface ens33 # 网卡
mcast_src_ip 192.168.31.40 # 发组播
virtual_router_id 51 # 虚拟id
priority 100 # 优先级
advert_int 1 # 探针,一秒发一次组播
authentication {
auth_type PASS
auth_pass 1111 # 密码
}
track_script {
check_nginx
}
virtual_ipaddress { # 虚ip
192.168.31.213/24
}
}

(2)备分发器keepalived

#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id NGINX_DEVEL
}
vrrp_script check_nginx {
script "/etc/keepalived/nginx_pid.sh"
interval 2
fall 1
}
vrrp_instance nginx {
state BACKUP
interface ens33
mcast_src_ip 192.168.31.41
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.31.213/24
}
}

5、编写关联脚本nginx_pid.sh

#!/bin/bash
nginx_kp_check () {
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 1
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
} nginx_kp_check

脚本原理:该脚本检查nginx进程是否存在,如果进程没了,说明分发器挂了,尝试启动分发器,1秒后检查分发器启动没有,如果没有启动直接关闭keepalived,停止发组播,备就自动开始工作了。

四、故障测试

1、分发器宕机测试

分发器由keepalived来管理

$ watch  -n1 killall nginx    # 每隔一秒杀死一次所有nginx

2、数据服务器宕机测试

数据服务器则由nginx来管理。使用如下两个参数就可实现对数据服务器管理:

  • max_fails

    允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
  • fail_timeout

    失败超时时间,在连接Server时,如果在超时时间之内超过max_fails指定的失败次数,会认为在fail_timeout时间内Server不可用,默认为10s
upstream web {
server 192.168.31.42 max_fails=2 fail_timeout=3; # 超时时间3秒内失败2次认为服务器死了
server 192.168.31.43 max_fails=2 fail_timeout=3;
}

keepalived+nginx 高可用集群的更多相关文章

  1. Nginx(四):Keepalived+Nginx 高可用集群

    Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...

  2. Keepalived+Nginx高可用集群

    Keepalived简介 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替 ...

  3. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  4. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

  5. LVS+Keepalived实现高可用集群

    LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...

  6. 实战| Nginx+keepalived 实现高可用集群

    一个执着于技术的公众号 前言 今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点: 给小白的 Nginx 10分钟入门指 ...

  7. 集群介绍 keepalived介绍 用keepalived配置高可用集群

    集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...

  8. rabbitmq+ keepalived+haproxy高可用集群详细命令

    公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...

  9. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

随机推荐

  1. SDUT OJ 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  2. 原生JS实现返回顶部和滚动锚点

    ;(function (window,doc,undefined) { function rollingAnchor(){ this.timer =''; } rollingAnchor.protot ...

  3. vim多行注释与删除

    一.多行注释 1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;2. 在行首使用上下键选择需要注释的多行;3. 按下键盘(大写)“I”键,进入插入模式:4. 然后输入注 ...

  4. [原创]在Centos7上搭建私有的Gitlab服务器

    前言 Git作为后起之秀,在版本控制领域占据了头把交椅.Github作为托管式的代码仓库,从代码安全性和网络传输等各个方面考虑,对于个人和公司来讲,具有一定的局限性.Gitlab提供的不同版本的安装包 ...

  5. HDU 6351 (带技巧的暴力)

    题意:给定一个数,和一个最多交换次数k,问在不超过k次操作的情况,问可以得到的最大值和最小值是多少? 个人解题的艰辛路程 , 开始是想到了暴力枚举的可能 , 打出来发现在判断枚举的数组与原来数组交换了 ...

  6. flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结

    1.source为http模式,sink为logger模式,将数据在控制台打印出来. conf配置文件如下: # Name the components on this agent a1.source ...

  7. AES/ECB/NoPadding 加减密

    package unit; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache. ...

  8. bugzilla部署问题

    2018-09-25 1.部署环境 kvm虚拟机内    centos 7 系统    httpd+mariadb+bugzilla 关闭系统selinux.防火墙 setenforce 临时关闭se ...

  9. 分享一个js方法

    这是一个关于参数合并的方法,这个场景也经常遇到,比如我们现在要对微信小程序的wx.request进行再一次封装,会涉及到一些默认的参数和每次使用自己传递的参数合并问题,分享代码. var extend ...

  10. spring初始化bean的目的

    初始化bean就是为了将所有需要的bean全部装载到容器里面,等我们需要用到哪个bean就将哪个bean从容器里面拿出来