最原始的服务部署,为单点部署,即直接把服务部署在一个服务器上。如果服务器出现故障,或者服务因为某个异常而挂掉,则服务就会发生中断。单点部署出现故障的概率最高。

后来,出现了网关,比如 nginx kong 等。如下图所示:

这样,所有客户请求都会经过网关,再由网关转发到各个服务。如果由服务出现故障,则网关会自动跳过故障服务,把请求分发到可用服务。因为网关只是起到服务转发的功能,所以网关出现故障的概率比应用出现故障的概率低很多。

 http
{
upstream myserver {
server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
}
server
{
listen 80;
server_name www.domain.com 192.168.12.189;
index index.htm index.html;
root /ixdba/web/wwwroot;
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /opt/nginx/conf/proxy.conf;
}
}
}

但是,网关并非会永远不宕机,如果遭遇入侵,或者机房断电。网关服务出现故障,则不管下面的应用服务部署了多少个都没用。

于是就出现了第三种集群。如下图所示,借助keeplived部署2个以上的nginx 网关。这样网关出现故障导致服务中断的机率将大大降低。

这里主从nginx服务的配置是一样的。

3.keepalive的配置:/etc/keepalived/keepalivec.conf

主节点(Master节点配置)

 (1)修改/etc/keepalived/keepalivec.conf 配置文件
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#当前主机ip
smtp_server 192.168.17.129
smtp_connect_timeout 30
# 重点1:通过它,可以访问到主机,在hosts文件中,要做映射关系,类似于 127.0.0.1 LVS_DEVEL,host文件路径:/etc/hosts
router_id LVS_DEVEL
} #重点2:检测脚本,目的是定时执行,检测nginx的状态,如果挂了尝试重启,如果启动失败,则停止该节点的nginx和keepaive
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 执行脚本所在的位置,自定义脚本后面会提及
interval 2 #检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
weight 2 #脚本执行满足,权重加2,这里其实没搞明白..
} #重点3:主备节点的区别配置
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 # 绑定的网卡,通过ipconfig查看
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小(比如主机100,备机90)
advert_int 1 #每隔一秒发送一次心跳,确保从服务器(keepalive)是否还活着
authentication { # 心跳检测需要的密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H 虚拟地址(重点:虚拟ip配置,客户端通过该ip进行访问,主节点和备用节点谁占有这个ip,谁提供反向代理服务)
}
}
(2)在/usr/local/src 添加检测脚本nginx_check.sh,检查Nginx是否还活着
#!/bin/bash
#查看ningx的进程号,并统计数量
A=`ps -C nginx –no-header |wc -l`
#等于0时,即nginx挂了,尝试重启
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #Nginx启动命令的位置
sleep 2
#启动失败,杀掉keepalive
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

高可用linux 服务器搭建的更多相关文章

  1. 构建高可用Linux服务器一

    1.显示物理CPU个数:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -1 2.显示每个物理CPU中的core ...

  2. 构建高可用Linux服务器二

    centos优化: 1.关闭不需要的服务:ntsysv crond:自动计划任务 network:已配置网络接口的脚步程序服务. sshd:openssh服务器守护进程. irqbalance:启用i ...

  3. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  4. MongoDB 3.4 高可用集群搭建(二)replica set 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...

  5. MHA 高可用集群搭建(二)

    MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mys ...

  6. HDFS-HA高可用集群搭建

    HA高可用集群搭建 1.总体集群规划 在hadoop102.hadoop103和hadoop104三个节点上部署Zookeeper. hadoop102 hadoop103 hadoop104 Nam ...

  7. CentOS7/RHEL7 pacemaker+corosync高可用集群搭建

     TOC \o "1-3" \h \z \u 一.集群信息... PAGEREF _Toc502099174 \h 4 08D0C9EA79F9BACE118C8200AA004B ...

  8. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  9. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  10. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

随机推荐

  1. CodeCraft-21 and Codeforces Round #711 (Div. 2) A~C 个人题解

    补题链接:Here 1498A. GCD Sum 题意:给定一个 gcdSum 操作:\(gcdSum(762) = gcd(762,7 + 6 + 2) = gcd(762,15) = 3\) 请问 ...

  2. 类加载机制-深入理解jvm

    一.什么是类的加载: 如上图,java文件通过编译器变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中.其中类装载器的作用其实就是类的加载. 二.原理 (类的加载过程及其最终 ...

  3. 图扑 HT for Web 手机端运维管理系统

    随着信息技术的快速发展,网络技术的应用涉及到人们生活的方方面面.其中,手机运维管理系统可提供数字化.智能化的方式,帮助企业和组织管理监控企业的 IT 环境,提高运维效率.降低维护成本.增强安全性.提升 ...

  4. fetch概述

    1.基本特性 更加简单的数据获取方式,功能更强大.更灵活,可以看做是xhr的升级版 基于promise实现 2.语法结构 3.fetch的基本用法

  5. C#设计模式03——简单工厂的写法

    什么是C#简单工厂? C#简单工厂是一种创建对象的设计模式,它定义一个工厂类来创建指定类型的对象,而不是在客户端代码中直接创建对象.简单工厂模式通常使用静态方法来生成对象,并且这些静态方法通常被称为工 ...

  6. C# 排序算法2:选择排序

    选择排序法 ,是在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换:在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止. 原 ...

  7. 后端开发之光!Django应用的容器化部署实践~

    在此之前,我一直用uwsgi+virtualenv+nginx方式进行应用部署,操作起来比较麻烦,而且依赖于服务器上的Python版本,服务的管理方面单纯uwsgi + pid算不上特别麻烦但总没有d ...

  8. [转帖]003、体系结构之TiKV持久化

    TiKV架构和作用 数据持久化 分布式一致性 MVCC 分布式事务 Coprocessor coprocessor : 协同处理器. 可以将一些SQL计算交给TiKV处理.不需要将TiKV所有数据通过 ...

  9. [转帖]Linux文件权限除了r、w、x外还有s、t、i、a权限

    https://www.cnblogs.com/hiyang/p/15122714.html setuid 是 set user ID upon execution 再次缩写为suid setgid  ...

  10. [转帖]jmap执行失败了,怎么获取heapdump?

    https://www.jianshu.com/p/f4bfd169b4ca   在之前的OOM问题复盘中,我们添加了jmap脚本来自动dump内存现场,方便排查OOM问题. 但当我反复模拟OOM场景 ...