keepalived+haproxy实现nginx高可用

1.需求:

       在之前我们使用的keepalived+nginx的方案,架构如下:

该方案的缺点是资源使用率不高,只能在吞吐量不高的场景使用

第二种方案:haproxy+nginx,架构图如下:

这个会有单点故障,当单机haproxy宕机时,会导致珍格格服务不可用

最后一种也是最好的方案:keepalived+haproxy+nginx,架构图为:

       既可以在高并发下使用,也解决了单点故障问题

       在此次实验中,我们的IP有变化,如下:

       VIP11.0.1.100:8080

       NODE1 Real IP11.0.1.17

                       VIP11.0.1.100

                            Haproxy0.0.0.0:8080

        NODE2 :Real IP11.0.1.16

                       VIP11.0.1.100

                            Haproxy0.0.0.0:8080

       Nginx1:11.0.1.17:80

       Nginx2:11.0.1.16:80

2.规划

我们可以在上一章的keepalived+nginx的基础上,在补充haproxy的方式实现高可用负载均衡架构

Hostname

IP

Node roles

Keepalived-master

11.0.1.17

Keepalived(master), Nginx, HAProxy

Keepalived-backup

11.0.1.16

Keepalived(backup), Nginx, HAProxy

上一章的链接如下:keepalived+nginx实现高可用-CSDN博客

3.增加Haproxy

现在我们在前一阶段,添加Haproxy,实现双主负载均衡

3.1 两台服务器都安装haproxy

下载安装包:

       wget http://download.openpkg.org/components/cache/haproxy/haproxy-3.0.3.tar.gz

解压:tar -zxvf haproxy-3.0.3.tar.gz

uname -a 确定linux内核,红帽7对应linux31

cd haproxy-3.0.3

make TARGET=linux31

开始安装:make install PREFIX=/opt/haproxy

创建日志目录:mkdir /opt/haproxy/logs

拷贝配置文件:cp examples/option-http_proxy.cfg /opt/haproxy/haproxy.cfg

编写服务脚本:

       vim /etc/rc.d/init.d/haproxy

[root@localhost haproxy-3.0.3]# vim /etc/rc.d/init.d/haproxy
#!/bin/bash  
#chkconfig: 2345 10 90
#description:haproxy
BASE_DIR="/opt/haproxy"
ARGV="$@"

start()
{
echo "START HAPoxy SERVERS"  
$BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg
}

stop()
{
echo "STOP HAPoxy Listen"  
kill -TTOU $(cat $BASE_DIR/logs/haproxy.pid)
echo "STOP HAPoxy process"  
kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)
}
case $ARGV in

start)
start
ERROR=$?
;;

stop)
stop
ERROR=$?
;;

restart)
stop
start
ERROR=$?
;;

*)
echo "hactl.sh [start|restart|stop]"  
esac
exit $ERROR

添加开机自启动:chmod +x /etc/rc.d/init.d/haproxy

                            chkconfig --add haproxy

3.2 修改haproxy配置文件

       cat /opt/haproxy/haproxy.cfg

[root@localhost haproxy-3.0.3]#  cat /opt/haproxy/haproxy.cfg
#
# demo config for Proxy mode
# 

global
        #maxconn         20000
	#ulimit-n	16388
        log             127.0.0.1 local0
        uid             200
        gid             200
        chroot          /opt/haproxy
        daemon

frontend  http_80_in
	bind		0.0.0.0:8080
        mode            http
        log             global
        option          httplog
        option          dontlognull
        maxconn         8000
        timeout client  30s

	# layer3: Valid users
	#acl allow_host src 192.168.200.150/32
	#http-request deny if !allow_host

	# layer7: prevent private network relaying
	#acl forbidden_dst url_ip 192.168.0.0/24
	#acl forbidden_dst url_ip 172.16.0.0/12
	#acl forbidden_dst url_ip 10.0.0.0/8
	#http-request deny if forbidden_dst

	default_backend webserver


backend webserver
	mode            http
	timeout connect 5s
	timeout server  5s
	retries         2

	# layer7: Only GET method is valid
	acl valid_method        method GET
	http-request deny if !valid_method

	# take IP address from URL's authority
	# and drop scheme+authority from URI
	http-request set-dst url_ip
	http-request set-dst-port url_port
	http-request set-uri %[pathq]
	server next-hop 0.0.0.0

	# layer7: protect bad reply
	http-response deny if { res.hdr(content-type) audio/mp3 }
	balance roundrobin
    	server server1 11.0.1.16:80 check
    	server server2 11.0.1.17:80 check

启动服务:systemctl start haproxy

3.3 测试

刷新后

验证成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙语言基础类库:【@system.geolocation (地理位置)】

地理位置 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口[ohos.geolocation]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import geolocation from …

css - - - - - 环形倒计时进度条实现

css - - - - - 环形倒计时进度条实现 1. 效果图展示2. 代码展示 1. 效果图展示 2. 代码展示 // html <view class"father"><view class"progress" style"--progress:{{red}}; --last:{{gray}}"></view> </view>// css …

SQL每日一题:查找重复的电子邮箱

题干 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键&#xff08;具有唯一值的列&#xff09;。 此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。 编写解决…

鸿蒙语言基础类库:【@system.file (文件存储)】

文件存储 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.fileio]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import file from system.file;f…

一套完整的养老院人员定位解决方案包含哪些内容?

养老院人员定位解决方案是建立面向社区及养老组织的传感网系统与信息渠道&#xff0c;并在此基础上提供实时、方便、高效、低成本的、物联化、互联化、智能化的养老服务。 人口老龄化问题早已成为当今社会关注的重要问题之一。在养老院封闭的环境&#xff0c;养老院希望利用智…

【数据结构】探索排序的奥秘

若有不懂地方&#xff0c;可查阅我之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~_csdn博客 所属专栏&#xff1a;数据结构_专栏 目录 排序的概念 几种排序方法介绍 冒泡排序 选择排序 插入排序 堆排序 向上调整建堆排序 向下调整建堆排序 希尔排序 快速…

sentinel网关限流配置及使用

sentinel控制台源码&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…

算法2--贪心算法

1.老鼠和猫的交易 小老鼠准备了M磅的猫粮&#xff0c;准备去和看守仓库的猫做交易&#xff0c;因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间&#xff1b; 第i个房间有 J[i] 磅的五香豆&#xff0c;并且需要用 F[i] 磅的猫粮去交换&#xff1b; 老鼠不必交换该房间所有的五…

MySQL(3)表的操作

目录 1. 表的操作; 2. 数据类型; 1. 表的操作: 1.1 创建表: 语法: create table 表名( 属性 类型 [comment ], 属性 类型 [comment ], 属性 类型 ) character set 字符集 collate 校验集 engine 存储引擎; 前面博客提到: MyISAM和InoDB这两个比较重要. 1.2 查看表…

3. 序列生成

1.复习状态机&#xff0c;使用状态机实现序列生成 1.1 设计要求 用有限状态机生成序列001011&#xff0c;串行循环输出该序列。 1.2 设计代码&#xff0c;仿真及波形 状态机&#xff1a;不考虑状态简化的情况下&#xff0c;要输出的序列多少位&#xff0c;就用多少个状态&a…

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

windows实现自动化按键

1.选择目标窗口 获取窗口句柄 void KeyPresser::selectWindow() {SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);selectedWindowLabel->setText("请点击目标窗口..."); }void CALLBACK …

在 Windows 上开发.NET MAUI 应用_1.安装开发环境

开发跨平台的本机 .NET Multi-platform App UI (.NET MAUI) 应用需要 Visual Studio 2022 17.8 或更高版本&#xff0c;或者具有 .NET MAUI 扩展的最新 Visual Studio Code。要开始在 Windows 上开发本机跨平台 .NET MAUI 应用&#xff0c;请按照安装步骤安装 Visual Studio 20…

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块&#xff08;XD-MDEP100&#xff09;是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包&#xff0c;实现不同厂家的设备之间的数据交换和共享。在汇川P…

【AI技术揭秘】一键锐化图像,让您的照片立即变身高清大片!

一键锐化图像 1. 概述1.1 图像锐化的概念及重要性1.2 利用人工智能实现图像锐化的基本原理 2. 常用图像锐化算法简介2.1 Sobel算子2.2 Laplacian算子2.3 Unsharp Masking算法2.4 High Boost Filtering算法2.5 算法原理及实际应用效果 3. 基于深度学习的图像锐化算法3.1 介绍深度…

MySQL Workbench下载安装

官方下载地址&#xff1a; https://dev.mysql.com/downloads/workbench/ 下载完后&#xff0c;点击安装包即可 但是安装之前&#xff0c;必须要先安装Visual C 2019运行库 安装完后&#xff0c;添加数据库连接 点击 Schemas可以看到列表 点击Server可以找到导出、导入数据的菜…

如何找回回收站清空的文件?回收站文件恢复教程

电脑回收站文件被清空还能恢复之前的文件吗&#xff1f;一般情况下&#xff0c;我们把电脑桌面或C盘里的文件删除后&#xff0c;系统会将它们暂时存放在回收站里。如果想恢复这种文件&#xff0c;点击鼠标右键就可以“恢复”。 但是&#xff0c;如果为了清空垃圾增加电脑内存&a…

QT开发笔记:信号和槽

乱码问题&#xff1a; 出现乱码问题原因只有一个&#xff1a;就是编码方式不匹配&#xff01;&#xff01;&#xff01; 中文常见汉字4K,算上各种生僻字差不多六万字 仍然使用一个大表格&#xff0c;给每个汉字&#xff0c;分配一个整数即可。 字符集~~表示汉字的字符集&#…

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

Android 11 HAL层集成FFMPEG

1.集成目录&#xff1a; android/vendor/noch/common/external/NoboMediaCodec 2.文件夹目录 3. Android.mk实现 # Copyright #LOCAL_PATH : $(call my-dir)SF_COMMON_MK : $(LOCAL_PATH)/common.mkinclude $(call first-makefiles-under,$(LOCAL_PATH))4.common.mk实现 # #…