HAProxy的安装、详细配置与实际应用(MyCAT、RabbitMQ示例)

news2025/1/20 3:43:35

HAProxy的安装、配置与实际应用

  • HAProxy
    • HAProxy概述
    • 下载
    • 编译
    • 安装
    • 配置
    • 启动
    • 验证
    • 配置RabbitMQ的HAProxy示例

HAProxy

HAProxy概述

HAProxy(High Availability Proxy)是一款自由、快速、可靠的TCP/HTTP负载均衡软件,其最常见的用途是将客户端请求分发到多个服务器上,从而实现高并发和高可用性。

HAProxy实现一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。因此,适用于负载特大的web站点,运行在硬件上,完全可以支持数以万计的并发连接。

HAProxy官网:http://www.haproxy.org/

HAProxy文档:http://docs.haproxy.org/

下载

下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy/

wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.6.0.tar.gz/sha512/7bb70bfb5606bbdac61d712bc510c5e8d5a5126ed8827d699b14a2f4562b3bd57f8f21344d955041cee0812c661350cca8082078afe2f277ff1399e461ddb7bb/haproxy-2.6.0.tar.gz

解压

tar -zxvf haproxy-2.6.0.tar.gz

编译

查看内核版本

[root@administrator haproxy-2.6.0]# uname -r
3.10.0-1160.62.1.el7.x86_64

开始编译

make TARGET=linux310 PREFIX=/usr/local/program/haproxy ARCH=x86_64

ARGET=linux310:内核版本

ARCH=x86_64:系统位数

PREFIX=/usr/local/program/haproxy:haprpxy安装路径

安装

make install PREFIX=/usr/local/program/haproxy

配置

建一个名为haproxy的用户组

# -r 将该用户组设置为系统级别的组
groupadd -r haproxy

创建一个名为haproxy的用户

# -g 将该用户添加到上面创建的"haproxy"用户组中
# -r 将该用户设置为系统级别用户
useradd -r -g haproxy haproxy

注意: 让haproxy使用haproxy用户和组运行,提高安全性

创建HAProxy配置文件,具体配置可参考/haproxy-2.6.0/examples/目录下的配置文件,如:quick-test.cfg

vim /usr/local/program/haproxy/haproxy.conf

这里配置HAProxy实现MyCat多节点的集群高可用和负载均衡为例

若要HAProxy自身高可用则可以通Keepalived来实现

# 全局配置参数,属于进程级的配置
global
    # 日志配置 local0:日志设备 info:日志记录级别
    log 127.0.0.1 local0 info
    # haproxy工作目录
    chroot /usr/local/program/haproxy
    # haproxy启动后进程的pid文件路径
    pidfile /usr/local/program/data/haproxy.pid
    # 每个haproxy进程可接受的最大并发连接数
    maxconn 4000
    # 使用haproxy用户和haproxy组运行
    user    haproxy        
    group   haproxy  
    # haproxy启动时可创建的进程数,默认1个,值应小于服务器的CPU核数
    # 该参数在高版本种已弃用
    nbproc  1
    # 以后台守护进程方式启动haproxy
    daemon
    
# 定义默认配置选项   
defaults
	# 使用http代理模式
    mode tcp
    # 开启全局日志记录
    log global
    option abortonclose
    option redispatch
    # 配置连接后端服务器失败重试次数,超过3次后会将失败的后端服务器标记为不可用
    retries 3
    # 连接超时时间 配置成功连接到一台服务器的最长等待时间,默认单位是毫秒,也可自己指定单位
    timeout connect 10000
    # 客户端连接超时时间 配置连接客户端发送数据时的最长等待时间,默认单位是毫秒,也可自己指定单位
    timeout client 1m
    # 后端服务器响应超时时间 配置服务器端回应客户端数据发送时最长等待时间,默认单位是毫秒,也可自己指定单位
    timeout server 1m
    # 配置对后端服务器的检测超时时间,默认单位是毫秒,也可自己指定单位
    timeout check  10s
    # 最大连接数
    maxconn 3000
    
# 定义服务叫"proxy_status "名字的虚拟节点
# haproxy代理的两个mycat
listen proxy_status 
	# 配置监听8086端口
    bind  0.0.0.0:8086
    	  # tcp模式  
          mode tcp
          # 负载均衡算法,使用轮询方式分发请求, 轮询访问mycat_1与mycat_2  
          # 轮询算法:roundrobin 权重算法:static-rr 最少连接算法:leastconn 请求源IP算法:source   
          balance roundrobin
          # 后端服务器列表, mycat真实IP:端口
          server mycat_1 IP:8066 check inter 10s
          server mycat_2 IP:8066 check inter 10s


# 定义服务叫"admin_stats"名字的虚拟节点     
# haproxy管理页面
frontend admin_stats 
    # 监听地址和端口 绑定所有可用的IP地址和端口8085
    bind  *:8085
          # http模式  
          mode http
          # 配置在客户端和服务器完成一次连接请求后,haproxy主动关闭此TCP连接
          option httpclose
          # 配置后端服务器需要获得客户端的真实IP,通过增加"X-Forwarded-For"来记录客户端IP
          option forwardfor
          # 启用日志来记录http请求,默认只对tcp日志进行日志记录
          option httplog
          maxconn 10
          stats enable
          stats refresh 30s
          # 统计页面路径
          stats uri /admin
          # 设置统计页面认证的用户和密码
          stats auth admin:123123
          stats hide-version
          stats admin if TRUE

启动

1.启动HAProxy

 /usr/local/program/haproxy/sbin/haproxy -f /usr/local/program/haproxy/haproxy.conf

启动HAProxy出现异常:

[root@administrator haproxy]# /usr/local/program/haproxy/sbin/haproxy -f /usr/local/program/haproxy/haproxy.conf
[NOTICE]   (2371) : haproxy version is 2.6.0-a1efc04
[NOTICE]   (2371) : path to executable is /usr/local/program/haproxy/sbin/haproxy
[ALERT]    (2371) : config : parsing [/usr/local/program/haproxy/haproxy.conf:39]: Missing LF on last line, file might have been truncated at position 32.
[ALERT]    (2371) : config : Error(s) found in configuration file : /usr/local/program/haproxy/haproxy.conf
[ALERT]    (2371) : config : Fatal errors found in configuration.

原因:

1.换行符导致,删掉换行符

2.使用文本编辑器修改该文件导致,使用`vim haproxy.conf`方式编辑保存

2.查看HAProxy进程

ps -ef|grep haproxy

[root@administrator haproxy]# ps -ef|grep haproxy
root      5186     1  0 14:06 ?        00:00:00 /usr/local/program/haproxy/sbin/haproxy -f /usr/local/program/haproxy/haproxy.conf
root      9133  5733  0 14:08 pts/0    00:00:00 grep --color=auto haproxy

停止haproxy

[root@administrator haproxy]# kill -9 5186     

验证

1.打开浏览器访问

浏览器访问:http://IP:8085/admin,输入配置的用户名与密码

在这里插入图片描述

.验证

通过HAProxy访问Mycat,只需要访问配置HAProxy的8086端口即可,HAProxy将自动连接Mycat。

执行命令:mysql -umycat -p123456 -h IP -P 8086

[root@administrator ~]# mysql -umycat -p123456 -h IP -P 8086
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6.7.6-release-20220524173810 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

配置RabbitMQ的HAProxy示例

额外配置HAProxy实现RabbitMQ多节点的集群高可用和负载均衡示例

# 全局配置参数,属于进程级的配置
global
	
    
# 默认参数配置    
defaults

    
# 定义服务叫"proxy_status "名字的虚拟节点
# haproxy代理的两个mq
listen proxy_status 
	# 配置监听5672端口
    bind  0.0.0.0:5672
    	  # tcp模式  
          mode tcp
          # 轮询访问mq1与mq2
          balance roundrobin
          # mq真实IP:端口
          server node01 IP:5673 check inter 10s
          server node02 IP:5674 check inter 10s

  
# haproxy管理页面
frontend admin_stats 
    # 监听地址和端口
    bind  *:8888
          # http模式  
          mode http

访问http://192.168.10.13:8888/admin查看HAProxy监控
在这里插入图片描述

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

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

相关文章

使用signapk工具给apk系统签名

使用signapk给apk系统签名: 1、准备signapk.jar文件 查找路径: .\out\host\linux-x86\framework\signapk.jar 2、platform.x509.pem 和 platform.pk8 查找路径: .\vendor\prima\customer\certificatekey\prima 3、重点:将sdk…

Mac的PATH环境变量及相关文件加载顺序详细解释

系统级变量 /etc/profile /etc/paths 用户级变量(前3个按照从前往后的顺序读取,如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上述…

数据结构 | 排序 - 总结

排序的方式 排序的稳定性 什么是排序的稳定性? 不改变相同数据的相对顺序 排序的稳定性有什么意义? 假定一个场景: 一组成绩:100,88,98,98,78,100(按交卷顺序…

【数据结构】队列(循环队列和链队列)详细讲解各种操作

🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 图片来源网络,如果侵权,请联系我 目录 ⭐队…

爱智EdgerOS之深入解析离线下载任务

一、需求分析 在日常使用计算机的过程中,看到喜欢的资源不可避免地想把它下载到我们的设备上保存下来,比如图片,音视频资源,文档资源等,基于这种应用场景,现在来看看在爱智设备上可以如何实现呢&#xff1…

日撸 Java 三百行day33

文章目录 说明day33 图的广度优先遍历1.思路2.多个连通分量2 代码实现 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampled…

82.qt qml-2D粒子系统、粒子方向、粒子项(一)

由于粒子系统相关的类比较多, 所以本章参考自QmlBook in chinese的粒子章节配合学习: 由于QmlBook in chinese翻译过来的文字有些比较难理解,所以本章在它的基础上做些个人理解,建议学习的小伙伴最好配合QmlBook in chinese一起学习。 1.介绍 粒子模拟的核心是粒子系统(Partic…

ResNet残差网络

ResNet 目的 Resnet网络是为了解决深度网络中的退化问题,即网络层数越深时,在数据集上表现的性能却越差。 原理 ResNet的单元结构如下: 类似动态规划的选择性继承,同时会在训练过程中逐渐增大(/缩小)该…

数字图像基础【7】应用线性回归最小二乘法(矩阵版本)求解几何变换(仿射、透视)

这一章主要讲图像几何变换模型,可能很多同学会想几何变换还不简单嚒?平移缩放旋转。在传统的或者说在同一维度上的基础变换确实是这三个,但是今天学习的是2d图像转投到3d拼接的基础变换过程。总共包含五个变换——平移、刚性、相似、仿射、透…

尚融宝10-Excel数据批量导入

目录 一、数据字典 (一)、什么是数据字典 (二)、数据字典的设计 二、Excel数据批量导入 (一)后端接口 1、添加依赖 2、创建Excel实体类 3、创建监听器 4、Mapper层批量插入 5、Service层创建监听…

2023年,想要靠做软件测试获得高薪,我还有机会吗?

时间过得很快,一眨眼,马上就要进入2023年了,到了年底,最近后台不免又出现了经常被同学问道这几个问题:2023年还能转行软件测试吗?零基础转行可行吗? 本期小编就“2023年,入行软件测…

一文解决nltk安装问题ModuleNotFoundError: No module named ‘nltk‘,保姆级教程

目录 问题一:No module named ‘nltk‘ 问题二:Please use the NLTK Downloader to obtain the resource 下载科学上网工具 问题三:套娃报错 如果会科学上网,可以直接看问题三 问题一:No module named ‘nltk‘ Mo…

【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建

这篇文章,主要介绍微服务组件之Gateway服务网关基础环境搭建。 目录 一、Gateway服务网关 1.1、什么是Gateway 1.2、Gateway基础环境搭建 (1)基础环境介绍 (2)引入依赖 (3)添加路由配置信…

软件测试工程师的进阶之旅

很多人对测试工程师都有一些刻板印象,比如觉得测试“入门门槛低,没有技术含量”、“对公司不重要”、“操作简单工作枯燥”“一百个开发,一个测试”等等。 会产生这种负面评论,是因为很多人对测试的了解,还停留在几年…

Lesson12 udptcp协议

netstat命令->查看网络状态 n 拒绝显示别名,能显示数字的全部转化成数字l 仅列出有在 Listen (监听) 的服務状态p 显示建立相关链接的程序名t (tcp)仅显示tcp相关选项u (udp)仅显示udp相关选项a (all)显示所有选项,默认不显示LISTEN相关 pidof命令-&…

SQL select详解(基于选课系统)

表详情: 学生表: 学院表: 学生选课记录表: 课程表: 教师表: 查询: 1. 查全表 -- 01. 查询所有学生的所有信息 -- 方法一:会更复杂,进行了两次查询,第一…

机器学习笔记之正则化(六)批标准化(BatchNormalization)

机器学习笔记之正则化——批标准化[Batch Normalization] 引言引子:梯度消失梯度消失的处理方式批标准化 ( Batch Normalization ) (\text{Batch Normalization}) (Batch Normalization)场景构建梯度信息比例不平衡批标准化对于梯度比例不平衡的处理方式 ICS \text{…

《抄送列表》:过滤次要文件,优先处理重要文件

目录 一、题目 二、思路 1、查找字符/字符串方法:str1.indexOf( ) 2、字符串截取方法:str1.substring( ) 三、代码 详细注释版: 简化注释版: 一、题目 题目:抄送列表 题目链接:抄送列表 …

Java[集合] Map 和 Set

哈喽,大家好~ 我是保护小周ღ,本期为大家带来的是 Java Map 和 Set 集合详细介绍了两个集合的概念及其常用方法,感兴趣的朋友可以来学习一下。更多精彩敬请期待:保护小周ღ *★,*:.☆( ̄▽ ̄)/$:*.★* ‘ 一、…

JVM知识汇总

1、JVM架构图 2、Java编译器 Java编译器做的事情很简单,其实就是就是将Java的源文件转换为字节码文件。 1. 源文件存储的是高级语言的命令,JVM只认识"机器码"; 2. 因此将源文件转换为字节码文件,即是JVM看得懂的"…