Docker搭建Nginx+keepalived高可用负载均衡服务器

一、背景
1.nginx高可用

在生产环境下,Nginx作为流量的入口,如果Nginx不能正常工作或服务器宕机,将导致整个微服务架构的不可用。所以负责负载均衡、反向代理的服务(Nginx)为了提高处理性能,高可用,也需要集群部署。本期咋们采用 keepalived 和 Nginx实现高可用。

2.KeepAlived

KeepAlived是Linux下的基于VRRP备份路由的高可靠性中间件。如果一台服务器宕机,KeepAlived会检测到并将发生故障的机器从集群中摘除,同时使用其他的服务器代替该故障机器的工作,当服务器重新正常工作后KeepAlived就会自动将该服务器加入到工作集群中,以上的工作都是KeepAlived自动完成无需人工介入。

3.VRRP协议

VRRP协议英文全称:Virtual Router Redundancy Protocol,即”虚拟路由冗余协议“。将多台提供相同功能的路由器组成路由器组,包含一个master和多个backup。提供虚拟IP,占有这个虚拟IP的master负责ARP的响应和转发IP数据包。master负责发布组广播消息,若master发送的广播长时间没有被backup接收到就会触发选举backup当新master。

4.Nginx+keepalived 双机主从模式

使用两台Nginx服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

5.Nginx+keepalived 双机主主模式

使用两台Nginx服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。该方案解决了双击主从的资源浪费问题,但是有个性能瓶颈的问题在这种模式会出现。就是单台机器上的负载会瞬时过大。那如何解决这个问题呢,就出现了多点集群模式。

6.Nginx+keepalived 多点模式

以上两种方式都有各自的有缺点,多点集群模式应运而生。多点集群可以理解为双机热备在技术上的提升。多机服务器可以组成一个集群。根据应用的实际情况,可以灵活地在这些服务器上进行部署,同时可以灵活地设置接管策略。比如,可以由一台服务器作为其他所有服务器的备机,也可以设置多重的接管关系,等等。这样,就可以充分地利用服务器的资源,同时保证系统的高可用性。

二、docker部署双机主从模式
1.创建网络
# 创建bridge
docker network create -d bridge --subnet 172.70.0.0/16 --gateway 172.70.0.1 nginx-network
docker network ls
# 查看信息
docker network ls
docker network inspect minio-network
# 删除
docker network rm networkId
2.创建容器
# master
docker run -it --name centos-master --privileged -v /home/centos/master:/mnt/software -p 10010:80 --net=nginx-network centos:7
# salve
docker run -it --name centos-salve --privileged -v /home/centos/salve:/mnt/software -p 10020:80 --net=nginx-network centos:7
3.安装准备
# 切换目录
cd /etc/yum.repos.d/
# 删除yum源
rm -rf CentOS*
# 复制yum源
docker cp /etc/yum.repos.d/CentOS-Base.repo 容器id:/etc/yum.repos.d/CentOS-Base.repo
# 安装工具
yum -y update
yum install epel-release
yum -y install net-tools
yum -y install vim
# 清除缓存
yum clean all
# 生成缓存
yum makecache
4.安装nginx
yum -y install nginx
# 启动
nginx
# 停止
nginx -s quit
# 刷新配置
nginx -s reload
5.安装keepalived
yum -y install keepalived 
# 启动
keepalived -l -f /etc/keepalived/keepalived.conf
# 停止
pkill keepalived
# 查看
ps -ef | grep keepalived
keepalived配置
  1. keepalived master配置

    # keepalived.conf
    ! Configuration File for keepalived
    global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30# 路由id,主备节点不能相同router_id LVS_DEVEL_MASTERvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0script_user rootenable_script_security
    }
    # nginx检查
    vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 1weight 0
    }vrrp_instance VI_1 {# Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点state MASTER# 指定监测的网卡,可以使用 ifconfig 或 ip a 进行查看interface eth0# 虚拟路由的id,主备节点需要设置为相同virtual_router_id 51# 优先级,主节点的优先级需要设置比备份节点高priority 100# 设置主备之间的检查时间,单位为秒advert_int 1# 定义验证类型和密码authentication {auth_type PASSauth_pass 1111}# 虚拟IP地址,可以设置多个virtual_ipaddress {172.70.0.10}# 调用上面自定义的监控脚本track_script {chk_nginx}
    }
  2. keepalived salve配置

    # keepalived.conf
    ! Configuration File for keepalived
    global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30# 唯一值router_id LVS_DEVEL_SALVEvrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0script_user rootenable_script_security
    }# nginx检查
    vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 1weight 0
    }vrrp_instance VI_1 {state BACKUPinterface eth0# 主从一致virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.70.0.10}track_script {chk_nginx}
    }
    
  3. nginx检查配置

    # nginx_check.sh
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then#执行nginx启动命令#nginx# 启动失败停止keepalivedif [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenpkill keepalivedfi
    fi
    
  4. 补充配置

    # 文件授权
    chmod +x check_nginx.sh
    chmod +x keepalived.conf
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-pytorch NLP中处理中文的步骤0.5.002

python-pytorch NLP中处理中文的步骤0.5.001 1. 导入包2. 准备停用词3. 把需要处理的文本切词4. 将切的词放入list中5. 获取vocab、vocab_size6. 获取word_to_idx、idx_to_word7. 告一段落8. 其他(1800的停用词) 1. 导入包 import jieba import torch i…

Go —— channel (二)

一个空的 channel 会产生哪些问题 读写nil管道均会阻塞触发死锁。关闭的管道仍然可以读取数据,向关闭的管道写数据会触发panic。 问:如果有多个协程同时读取一个channel,channel会如何选择消费者 channel 会按照维护的 recvq 等待读消息的…

239. 奇偶游戏(带权值并查集,邻域并查集,《算法竞赛进阶指南》)

239. 奇偶游戏 - AcWing题库 小 A 和小 B 在玩一个游戏。 首先,小 A 写了一个由 0 和 1 组成的序列 S,长度为 N。 然后,小 B 向小 A 提出了 M 个问题。 在每个问题中,小 B 指定两个数 l 和 r,小 A 回答 S[l∼r] 中…

苍穹外卖11(Apache ECharts前端统计,营业额统计,用户统计,订单统计,销量排名Top10)

目录 一、Apache ECharts【前端】 1. 介绍 2. 入门案例 二、营业额统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 三、用户统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 四、订单统…

0.开篇:SSM+Spring Boot导学

1. 为什么要使用框架 Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 几乎当下所有企业级JavaEE开发都离不开SSM(Spring SpringMVC MyBatis)Spring B…

什么是企业邮箱?如何选择合适的企业邮箱?

企业邮箱和个人邮箱不同,它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱?如何选择合适的企业邮箱?好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…

【hive】单节点搭建hadoop和hive

一、背景 需要使用hive远程debug,尝试使用无hadoop部署hive方式一直失败,无果,还是使用有hadoop方式。最终查看linux内存占用6GB,还在后台运行docker的mysql(bitnami/mysql:8.0),基本满意。 版本选择: &a…

全面深入学习Java中的字符串类

二、字符串类 (一)String String:字符串 concat() --- 在末尾追加字符串,返回新的字符串 substring(int begindex) --- 从指定下标处截取到字符串末尾,并返回新的字符串 substring(int begindex,endindex) --- 从开始…

OceanBase 中一个关于 NOT IN 子查询的 SQL 优化案例

通过一个案例了解 not in 对 NULL 值敏感的处理逻辑和优化方法。 作者:胡呈清,爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:[简书 | 轻松的鱼],欢迎讨论。 爱可生开源社区出品,原创内…

Linux中账号登陆报错access denied

“Access denied” 是一个权限拒绝的错误提示,意味着用户无法获得所请求资源的访问权限。出现 “Access denied” 错误的原因可以有多种可能性,包括以下几种常见原因: 错误的用户名或密码:输入的用户名或密码不正确,导…

机器学习—1.快速入门

机器学习步骤 确定与问题相关的输入(明确输入)收集与问题相关的数据(数据准备,学)分析预测结果的类型(分类?回归?是判断题还是应用题)根据预测记过的类型,选…

http添加SSL证书后打开变成另外一个网站是怎么回事

当在使用http的网站上添加了SSL证书后,如果打开该网站时出现了另外一个网站,可能是由以下几种情况引起的: 错误的证书配置 证书配置可能存在错误,导致SSL连接时服务器返回了错误的证书,或者证书与网站域名不匹配。这…

MySQL-系统及自定义变量

详情系统变量信息参考MySQL官方文档 系统变量分类: 全局系统变量(global) 全局系统变量针对于所有会话(连接)有效,但 不能跨重启 会话系统变量(session) 仅针对当前连接有效&am…

STM32-模数转化器

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明: 分辨率: 分辨率以二进制(或十进制)数的位数来表示,一般有 8 位、10 位、12 位、16 位…

Transformer模型-decoder解码器,target mask目标掩码的简明介绍

今天介绍transformer模型的decoder解码器,target mask目标掩码 背景 解码器层是对前面文章中提到的子层的包装器。它接受位置嵌入的目标序列,并将它们通过带掩码的多头注意力机制传递。使用掩码是为了防止解码器查看序列中的下一个标记。它迫使模型仅使用…

WPF 多语言切换及ResourceDictionary的Source路径填写

WPF 多语言切换 1. 添加资源字典 新增两个资源字典&#xff0c;里面分别存储不同语言的文本 <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s…

DRBD双主模式自动化安装部署脚本

DRBD&#xff08;Distributed Replicated Block Device&#xff09;是一种分布式存储系统&#xff0c;它允许在网络中的两个或多个节点之间复制数据。在本例中&#xff0c;我们为两个节点&#xff08;node1和node2&#xff09;设置DRBD&#xff0c;使其运行在双主模式下。 注意…

使用API有效率地管理Dynadot域名,确认域名转移流程状态

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

虚拟网络设备与网络安全:深入分析与实践应用

在数字化时代&#x1f4f2;&#xff0c;网络安全&#x1f512;成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁&#x1f525;&#xff0c;传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备&#x1f5a7;&#xff0c;作为网络架构中…

k8s集群部署elasticsearch集群和elasticsearch集群设置用户密码

目录 一、背景&#xff1a; 二、部署elasticsearch集群&#xff1a; 1、部署elasticsearch集群&#xff1a; 2、验证elasticsearch集群是否正常&#xff1a; 三、部署elasticsearch集群并设置用户密码 1、生产elastic集群所需的证书&#xff1a; 2、重新建构elasticsearc…