负载均衡–HAProxy安装及搭建tidb数据库负载服务

作为一名开发人员,随着经验的增加和技术的沉淀,需要提高自己架构方面的知识,同时对于一个企业来说,搭建一套高可用、高性能的技术架构,对于公司的业务开展和提高服务的性能也是大有裨益的。本文重点从软件安装和搭建tidb负载均衡数据库服务介绍下HAProxy的使用

1.概述

HAProxy是由 C 语言编写的自由开放源码的软件,提供高可用性、负载均衡和代理服务,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点,完全可以支持数以万计的并发连接,同时可以保护你的 web 服务器不被暴露到网络上。

其最常见的用途是将客户端请求分发到多个服务器上,从而实现高并发和高可用性。

2.负载均衡常用软件及对比

常用的负载均衡软件有LVS、Nginx和HAProxy,区别如下

  • LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy 和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方。
  • HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;
  • Nginx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。对网络带宽要求不高,安装配置简单,不支持session,需要ip_hash和cookie解决保持会话

3.软件安装

  • 3.1 硬件要求

系统配置

  • 3.2 安装依赖包

yum -y install epel-release gcc systemd-devel

  • 3.3 下载软件源码包

wget https://www.haproxy.org/download/2.6/src/haproxy-2.6.2.tar.gz

或者提前下载好安装包,然后上传服务器指定位置也可以,以下文件是2.8版本的软件包

[HaProxy2.8](链接:pan.baidu.com/s/11WAYKPea… 提取码:yqsy)

3.4 解压

tar -zxvf haproxy-2.6.2.tar.gz

3.5 从源码编译 HAProxy 应用

cd haproxy-2.6.2
make clean
make -j 8 TARGET=linux-glibc USE_THREAD=1
make PREFIX=${/app/haproxy} SBINDIR=${/app/haproxy/bin} install  # 将 `${/app/haproxy}``${/app/haproxy/bin}` 替换为自定义的实际路径。比如/usr/local/haproxy

3.6 重新配置profile文件

echo 'export PATH=/app/haproxy/bin:$PATH' >> /etc/profile

. /etc/profile

3.7 检查是否安装成功

which haproxy

至此安装步骤已完成。

4.使用haproxy搭建tidb负载服务

  • 4.1 编写haproxy配置文件,比如haproxy.conf,内容如下
global                                     # 全局配置。log         127.0.0.1 local2            # 定义全局的 syslog 服务器,最多可以定义两个。chroot      /var/lib/haproxy            # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。pidfile     /var/run/haproxy.pid        # 将 HAProxy 进程的 PID 写入 pidfile。maxconn     4096                        # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。nbthread    48                          # 最大线程数。线程数的上限与 CPU 数量相同。user        haproxy                     # 同 UID 参数。group       haproxy                     # 同 GID 参数,建议使用专用用户组。daemon                                  # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数“-D”的功能。当然,也可以在命令行中用“-db”参数将其禁用。stats socket /var/lib/haproxy/stats     # 统计信息保存位置。defaults                                   # 默认配置。log global                              # 日志继承全局配置段的设置。retries 2                               # 向上游服务器尝试连接的最大次数,超过此值便认为后端服务器不可用。timeout connect  2s                     # HAProxy 与后端服务器连接超时时间。如果在同一个局域网内,可设置成较短的时间。timeout client 30000s                   # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。timeout server 30000s                   # 服务器端非活动连接的超时时间。listen admin_stats                         # frontend 和 backend 的组合体,此监控组的名称可按需进行自定义。bind 0.0.0.0:8080                       # 监听端口。mode http                               # 监控运行的模式,此处为 `http` 模式。option httplog                          # 开始启用记录 HTTP 请求的日志功能。maxconn 10                              # 最大并发连接数。stats refresh 30s                       # 每隔 30 秒自动刷新监控页面。stats uri /haproxy                      # 监控页面的 URL。stats realm HAProxy                     # 监控页面的提示信息。stats auth admin:pingcap123             # 监控页面的用户和密码,可设置多个用户名。stats hide-version                      # 隐藏监控页面上的 HAProxy 版本信息。stats  admin if TRUE                    # 手工启用或禁用后端服务器(HAProxy 1.4.9 及之后版本开始支持)。listen tidb-cluster                        # 配置 database 负载均衡。bind 0.0.0.0:3390                       # 浮动 IP 和 监听端口。mode tcp                                # HAProxy 要使用第 4 层的传输层。balance leastconn                       # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAPSQLTSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。server tidb-1 xxxxx:4000 check inter 2000 rise 2 fall 3       # 检测 4000 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。server tidb-2 xxxxx:4000 check inter 2000 rise 2 fall 3       # xxxx为服务器ip
  • 4.2 启动服务

进入到配置文件目录,执行命令

haproxy -f haproxy.conf

如果执行报错,可能是没有创建配置文件中haproxy的用户和组信息,以及/var/lib/haproxy/stats文件,

useradd haproxy

然后创建stats文件

touch /var/lib/haproxy/stats

重新执行haproxy -f haproxy.conf命令即可

  • 4.3 访问服务

http://ip:8080/haproxy

对应的uri和配置文件中保持一致,然后输入用户密码即可

同时可以使用数据库客户端(比如navicat)进行连接,查看能否连接上,ip为服务器ip,端口为3390

  • 4.4 验证负载均衡策略

在haproxy服务器上执行如下命令(前提是安装mysql客户端:命令为 yum -y install mysql,安装成功使用mysql -V命令查看是否成功),就可以输出查询的是哪个节点实例信息,10.0.0.1换成服务器实际的ip地址

mysql -uroot -h10.0.0.1 -P 3390 -p -e "select instance from INFORMATION_SCHEMA.CLUSTER_PROCESSLIST where id=(select connection_id());"
  • 4.5 停止服务

killall -9 haproxy

或者使用ps -ef | grep haproxy命令,然后使用kill -9 pid命令

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

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

相关文章

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1)定义模型结构2)交叉验证模型优化 3. 模型训练及保存4. 模型测试1)摄像头调用2)模型导入及…

RCNA——单臂路由

一,实验背景 之前的VLAN实现的很多都是相同部门互相访问,不同部门无法访问。不过这次整来了一个路由器,领导说大部分的部门虽说有保密信息需要互相隔离,但是这些部门和其它部门也应该互相连通以方便工作交流。因此要配置新的环境&…

无人机光伏巡检系统的全新作用解析,提升效率保障安全

随着光伏发电行业的快速发展,光伏电站的规模越来越大,光伏维护和巡检成为一个巨大的挑战。为解决传统巡检方法的低效率和安全风险问题,无人机光伏巡检系统应运而生,并成为提升光伏巡检效率和保障安全的利器。 首先,无人…

vue手写多对多关联图,连线用leader-line

效果如图 鼠标滑动效果 关联性效果 <template ><div class"main" ref"predecessor"><div class"search"><div class"search-item"><div class"search-item-label">部门</div><Trees…

C++——关于命名空间

写c项目时&#xff0c;大家常用到的一句话就是&#xff1a; using namespace std; 怎么具体解析这句话呢&#xff1f; 命名冲突&#xff1a; 在c语言中&#xff0c;我们有变量的命名规范&#xff0c;如果一个变量名或者函数名和某个库里面自带的库函数或者某个关键字重名&…

涛思数据联合长虹佳华、阿里云 Marketplace 正式发布 TDengine Cloud

近日&#xff0c;涛思数据联合长虹佳华&#xff0c;正式在阿里云 Marketplace 发布全托管的时序数据云平台 TDengine Cloud&#xff0c;为用户提供更加丰富的订购渠道。目前用户可通过阿里云 Marketplace 轻松实现 TDengine Cloud 的订阅与部署&#xff0c;以最低的成本搭建最高…

【数学建模】--灰色关联分析

系统分析: 一般的抽象系统&#xff0c;如社会系统&#xff0c;经济系统&#xff0c;农业系统&#xff0c;生态系统&#xff0c;教育系统等都包含有许多种因素&#xff0c;多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中&#xff0c;哪些是主要…

3.6 Spring MVC文件上传

1. 文件上传到本地 实现方式 Spring MVC使用commons-fileupload实现文件上传&#xff0c;注意事项如下&#xff1a; l HTTP请求方法是POST。 l HTTP请求头的Content-Type是multipart/form-data。 SpringMVC配置 配置commons-fileupload插件的文件上传解析器CommonsMultip…

vue二进制下载

封装axios&#xff0c;/api/request import axios from axios import store from /store import Vue from vue import { Message, MessageBox } from element-uiimport { getToken } from /utils/authaxios.defaults.headers[Content-Type] application/json;charsetutf-8 co…

如何选择适合自己的文件传输工具

随着互联网的发展&#xff0c;人们处理文件的需求也随之增加。不管是工作还是生活中&#xff0c;文件传输都是一个非常常见的问题。因此&#xff0c;如何选择适合自己的文件传输工具也越来越重要。在本文中&#xff0c;我将从以下几个方面进行分析和总结&#xff0c;希望能为大…

面试攻略,Java 基础面试 100 问(七)

String 是最基本的数据类型吗? 不是。Java 中的基本数据类型只有 8 个&#xff1a;byte、short、int、long、float、 double、char、boolean&#xff1b;除了基本类型&#xff08;primitive type&#xff09;和枚举类型&#xff08;enumeration type&#xff09;&#xff0c…

Android图形-合成与显示-SurfaceTestDemo

目录 引言&#xff1a; 主程序代码&#xff1a; 结果呈现&#xff1a; 小结&#xff1a; 引言&#xff1a; 通过一个最简单的测试程序直观Android系统的native层Surface的渲染显示过程。 主程序代码&#xff1a; #include <cutils/memory.h> #include <utils/L…

干货 | 详述 Elasticsearch 向量检索发展史

1. 引言 向量检索已经成为现代搜索和推荐系统的核心组件。 通过将复杂的对象&#xff08;例如文本、图像或声音&#xff09;转换为数值向量&#xff0c;并在多维空间中进行相似性搜索&#xff0c;它能够实现高效的查询匹配和推荐。 图片来自&#xff1a;向量数据库技术鉴赏【上…

AI绘画网站都有哪些比较好用?

人工智能绘画网站是一种利用人工智能技术进行图像处理和创作的网站。这些绘画网站通常可以帮助艺术家以人工智能绘画的形式快速生成有趣、美丽和独特的绘画作品。无论你是专业的艺术家还是对人工智能绘画感兴趣的普通人&#xff0c;人工智能绘画网站都可以为你提供新的创作灵感…

优思学院|6西格玛标准值水平是多少?

在质量管理和统计学领域&#xff0c;"6西格玛" 是一个重要的概念&#xff0c;它与产品和流程的质量有着密切的关系。本文将解释"6西格玛"标准值水平是什么&#xff0c;以及它在各个行业中的应用。 什么是6西格玛标准值水平&#xff1f; 理解西格玛 西格…

9.2.1Socket(UDP)

一.传输层: 1.UDP:无连接,不可靠,面向数据报,全双工. 2.TCP:有连接,可靠,面向字节流,全双工. 注意:这里的可不可靠是相对的,并且和安不安全无关. 二.UDP数据报套接字编程: 1.socket文件:表示网卡的这类文件. 2.DatagramPacket:表示一个UDP数据报. 三.代码实现: 1.回显服务…

webstorm debug调试vue项目

1.运行npm&#xff0c;然后控制台会打印下图中的地址&#xff0c;复制local的地址 2.run–>Edit Configuration&#xff0c;如下图 3.设置测试项 4.在你需要的js段打好断点 5.在上边框的工具栏里面有debug运行&#xff0c;点击debug运行的图标运行即可

【网络编程】实现一个简单多线程版本TCP服务器(附源码)

TCP多线程 &#x1f335;预备知识&#x1f384; Accept函数&#x1f332;字节序转换函数&#x1f333;listen函数 &#x1f334;代码&#x1f331;Log.hpp&#x1f33f;Makefile☘️TCPClient.cc&#x1f340;TCPServer.cc&#x1f38d; util.hpp &#x1f335;预备知识 &…

Nevron Vision for .NET Crack

Nevron Vision for .NET Crack NET Vision是一个用于创建具有数据可视化功能的强大数据表示应用程序的套件。该套件具有用于.NET的Nevron Chart、用于.NET的Nevron Diagram和用于.NET的Nevron User Interface。精心设计的对象模型、众多功能和高质量的演示使复杂数据的可视化变…

【Linux操作系统】深入理解Linux系统编程中的open函数

在Linux系统编程中&#xff0c;open函数是一个非常重要的系统调用函数&#xff0c;它用于打开或创建一个文件&#xff0c;并返回一个文件描述符。本文将详细介绍open函数的用法&#xff0c;并给出具体的代码示例。 文章目录 1. 函数原型2. 函数参数2.1 flags参数2.2 mode参数 …