当前位置: 首页 > news >正文

负载均衡–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命令

相关文章:

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

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

Django各种缓存的配置

Django提供了多种缓存后端,如内存缓存、文件缓存、数据库缓存、Memcached和Redis等。根据项目需求选择合适的缓存后端。 settings配置 在Django项目的settings.py文件中,找到或新增CACHES配置项。根据所选的缓存后端,配置相应的参数。以下是…...

实现跨域的几种方式

原理 前后端的分离导致了跨域的产生 跨域的三要素:协议 域名 端口 三者有一个不同即产生跨域 例如: http://www.csdn.com https://www.csdn.com 由于协议不同,端口不同而产生跨域 注:http的默认端口80,https的默…...

OpenCV: 对“google::protobuf::internal::Release_CompareAndSwap”的未定义

解决办法: 需要在文件 protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h 中的以下补丁 inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, …...

无涯教程-Perl - References(引用)

Perl引用是一个标量数据类型,该数据类型保存另一个值的位置,该值可以是标量,数组或哈希。 创建引用 变量,子程序或值创建引用很容易,方法是在其前面加上反斜杠,如下所示: $scalarref \$foo; $arrayref …...

马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能

🦉 AI新闻 🚀 AI拍照小程序妙鸭相机上线商业工作站并邀请摄影师进行内测 摘要:AI拍照小程序妙鸭相机将上线面向商业端的工作站,并邀请摄影师进行模板设计的内测。妙鸭相机希望为行业提供更多生态产品,扩大行业规模&a…...

uni-app:实现点击按钮出现底部弹窗(uni.showActionSheet+自定义)

一、通过uni.showActionSheet实现底部选择 效果 代码 <template><view><button click"showActionsheet">点击打开弹窗</button></view> </template><script> export default {methods: {showActionsheet() {uni.showAct…...

flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent

flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent 一、相关技术二、流程梳理三、部署和删除flume agent效果四、监控zookeeper节点五、新增zookeeper节点部署flume agent六、删除zookeeper节点删除flume agen…...

了解以太网通信中的九阳神功 - SOME/IP协议

智能座舱SOME/IP通信 概述SOME/IP基础协议SOME/IP SD协议通信行为流程开机流程关机行为行为时序总结概述 SOME/IP协议是目前国内座舱SOA化应用比较广泛的一种ECU或车辆网络内设备之间交换数据的网络通信协议。它允许不同车辆组件,如发动机控制单元、信息娱乐系统、车身控制模…...

redis List类型命令

在Redis中&#xff0c;List&#xff08;列表&#xff09;是一种有序的、可重复的数据结构&#xff0c;它支持插入、删除和获取元素的操作。以下是一些常见的Redis List类型命令&#xff1a; LPUSH&#xff1a;将一个或多个值从列表的左侧插入。LPUSH key value1 value2 ...其中…...

【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

prometheus 出现NaN场景以及如何去除干扰(Not a Number) 1、在prometheus中使用NaN来表示无效数值或者结果 场景&#xff1a; 一些监控系统使用 NaN 作为空值或缺失值&#xff0c;但在 Prometheus 中 NaN 只是另一个浮点值。Prometheus 表示缺失数据的方式是让数据缺失。Prom…...

【计算机网络】网络层协议 -- ICMP协议

文章目录 1. ICMP协议简介2. ICMP协议格式3. ping命令4. ping命令与端口号没有关系&#xff01;&#xff01;&#xff01;5. traceroute命令 1. ICMP协议简介 ICMP&#xff08;Internet Control Message Protocol&#xff0c;控制报文协议&#xff09;&#xff0c;用于在IP主机…...

机器学习---facebook的案例学习

import pandas as pd import matplotlib.pyplot as plt import seaborn as sbn from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier # 使用pandas读…...

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外&#xff0c;最近的研究成果还结合了文本模式来提高性能。添加文本模态后&#xff0c;通用检测算法的一些非常好的属性开始出现&#xff0c;例如&#xff1a; 可以利用大量…...

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日&#xff0c;周三晚上 今天我看到了这样的两行代码&#xff1a; std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问&#xff1a; 为什么有时候用ios_base::o…...

PostgreSQL 使用SQL

发布主题 设置发布为true 这个语句是针对 PostgreSQL 数据库中的逻辑复制功能中的逻辑发布&#xff08;Logical Publication&#xff09;进行设置的。 PostgreSQL 中&#xff0c;逻辑复制是一种基于逻辑日志的复制方法&#xff0c;允许将数据更改从一个数据库实例复制到另一…...

Shell编程基础(十四)文本三剑客(grep)

文本三剑客&#xff08;grep&#xff09; 使用场景基本使用返回值参数 使用场景 主要用于查找&#xff0c;过滤文本数据&#xff1b;该数据可以来自文件&#xff0c;也可以来自管道流等等。 grep除了原有的实现&#xff0c;后来还出现了以下扩展实现 egrep&#xff1a;支持扩展…...

Linux root用户执行修改密码命令,提示 Permission denied

问题 linux系统中&#xff08;ubuntu20&#xff09;&#xff0c;root用户下执行passwd命令&#xff0c;提示 passwd: Permission denied &#xff0c;如下图&#xff1a; 排查 1.执行 ll /usr/bin/passwd &#xff0c;查看文件权限是否正确&#xff0c;正常情况是 -rwsr-xr…...

Java面向对象学习第三部分

一、Static修饰符 static是静态的意思&#xff0c;基本概念如下&#xff1a; Static分类&#xff1a; 一般我们分类都是按照是否使用static修饰进行分类。分为静态变量&#xff08;类变量&#xff09;、实例变量。 静态变量和实例变量的比较&#xff1a; 比较&#xff0c;…...

python+vue生成条形码码并展示

需求 最近想做一个小工具&#xff0c;大概要实现这样的效果&#xff1a;后端生成条形码后&#xff0c;不保存到服务器&#xff0c;直接返回给前端展示。 大概思路是&#xff0c;通过 python-barcode库 生成条码的字节流&#xff0c;生成字节流后直接编码成base64格式返回给前…...

在线高精地图生成算法调研

1.HDMapNet 整体的网络架构如图所示&#xff0c;最终的Decoder输出三个分支&#xff0c;一个语义分割&#xff0c;一个embedding嵌入分支&#xff0c;一个方向预测。然后通过后处理将这些信息处理成向量化的道路表示。 img2bev的方式之前有IPM&#xff0c;通过假设地面的高度都…...

【干货】商城系统的重要功能特性介绍

电子商务的快速发展&#xff0c;商城系统成为了企业开展线上销售的重要工具。一款功能强大、用户友好的商城系统能够有效提升企业的销售业绩&#xff0c;提供良好的购物体验。下面就商城系统的重要功能特性作一些简单介绍&#xff0c;帮助企业选择合适的系统&#xff0c;打造成…...

MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项

文章目录 ①. 为什么使用索引②. 索引及其优缺点③. InnoDb - 索引的设计④. InnoDb中的索引方案⑤. 索引 - 聚簇索引⑥. 索引 - 二级索引⑦. B树索引的注意事项⑧. MyISAM中索引方案 ①. 为什么使用索引 ①. 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比去图书馆…...

LeetCode 130. 被围绕的区域

题目链接&#xff1a;130. 被围绕的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例1&#xff1a; 输入&#xff1a;board [[“…...

python中2等于2.0吗,python中【1:2】

本篇文章给大家谈谈python中2等于2.0吗&#xff0c;以及python中【1:2】&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 变量和赋值 Python中的变量不需要声明, 直接定义即可. 会在初始化的时候决定变量的 “类型” 使用 来进行初始化和赋值操作 定义变量时…...

【2023年11月第四版教材】《第2章-信息技术发展(第一部分)》

《第2章-信息技术发展&#xff08;第一部分&#xff09;》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 章节说明 大部分为新增内容&#xff0…...

【CSS】说说对BFC的理解

目录 一、概念 二、BFC的布局规则 三、设置BFC的常用方式 四、BFC的应用场景 1、解决浮动元素令父元素高度坍塌的问题 2、解决非浮动元素被浮动元素覆盖问题 3、解决外边距垂直方向重合的问题 五、总结 一、概念 我们在页面布局的时候&#xff0c;经常出现以下情况&am…...

ES6学习-Class类

class constructor 构造方法 this 代表实例对象 方法之间不需要逗号分隔&#xff0c;加了会报错。 typeof Point // "function" Point Point.prototype.constructor // true类的数据类型就是函数&#xff0c;类本身就指向构造函数。 类的所有方法都定义在类的pr…...

C语言经典小游戏之扫雷(超详解释+源码)

“少年气&#xff0c;是历尽千帆举重若轻的沉淀&#xff0c;也是乐观淡然笑对生活的豁达&#xff01;” 今天我们学习一下扫雷游戏怎么用C语言来实现&#xff01; 扫雷小游戏 1.游戏介绍2.游戏准备3.游戏实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2打印棋盘3.3布置雷…...

算法leetcode|67. 二进制求和(rust重拳出击)

文章目录 67. 二进制求和&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 67. 二进制求和&#xff1a; 给你两个二进制字符串 a 和 b &a…...

免费建网站域名/超链接友情外链查询

简介SQL Server 2012中在Order By子句之后新增了OFFSET和FETCH子句来限制输出的行数从而达到了分页效果。相比较SQL Server 2005/2008的ROW_Number函数而言&#xff0c;使用OFFSET和FETCH不仅仅是从语法角度更加简单&#xff0c;并且拥有了更优的性能(看到很多人下过这个结论&a…...

wordpress qq主题下载/网店产品seo如何优化

基于examples下面的 http服务进行源码解析 前言 上一篇文章Soul API 网关源码解析《一》 中简单介绍了一下网关的含义&#xff0c;同时介绍了两种微服务开发常用的网关&#xff1a;Zuul 1.x&#xff08;毕竟Zuul 2.x难产了&#xff09;和Gateway。简单的阐述了一下两种网关的…...

做游戏排行榜的网站模板/怎么在网上销售

本文实例讲述了Python实现的拟合二元一次函数功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;背景&#xff1a;使用scipy拟合一元二次函数。参考&#xff1a;HYRY Studio-《用Python做科学计算》代码&#xff1a;# -*- coding:utf-8 -*-#! python3import numpy as…...

金银回收东莞网站建设/游戏搜索风云榜

1.页面向Controller传数组&#xff0c;Controller这边该怎么写 页面中有个多选&#xff0c;name为id,在Controller中RequestParam(value "Id")long[] id; 2.content实体中将置顶设置为boolean了&#xff0c;而存进数据库的时候是0,1。这该怎么办。 实体和数据库的对…...

设计网站网站名称/企业网站营销实现方式解读

继上一篇http://www.cnblogs.com/EasonJim/p/7613595.html介绍了断路器之后&#xff0c;其实它还提供了一个管理页面来监控这些应用的调用数据。 首先&#xff0c;我是基于上一个例子ZooKeeper实现的服务注册与发现&#xff1a;http://www.cnblogs.com/EasonJim/p/7613734.html…...

手机网站商城源码/境外电商有哪些平台

结束线程有以下三种方法&#xff1a; &#xff08;1&#xff09;设置退出标志&#xff0c;使线程正常退出&#xff0c;也就是当run()方法完成后线程终止 &#xff08;2&#xff09;使用interrupt()方法中断线程 &#xff08;3&#xff09;使用stop方法强行终止线程&#xff0…...