HAProxy + Vitess负载均衡

一、环境搭建

Vitess环境搭建:

具体vitess安装不再赘述,主要是需要启动3个vtgate(官方推荐vtgate和vtablet数量一致)

操作:

在vitess/examples/common/scripts目录中,修改vtgate-up.sh文件,

cp vtgate-up.sh vtgate-up-2.sh

cp vtgate-up.sh vtgate-up-3.sh

修改vtgate-up-2.sh文件

source "$(dirname "${BASH_SOURCE[0]:-$0}")/../env.sh"

cell=${CELL:-'test'}

web_port=15002

grpc_port=15992

mysql_server_port=15307

mysql_server_socket_path="/tmp/mysql2.sock"

# Start vtgate.

# shellcheck disable=SC2086

vtgate \

$TOPOLOGY_FLAGS \

--log_dir $VTDATAROOT/tmp \

--log_queries_to_file $VTDATAROOT/tmp/vtgate_querylog2.txt \

--port $web_port \

--grpc_port $grpc_port \

--mysql_server_port $mysql_server_port \

--mysql_server_socket_path $mysql_server_socket_path \

--cell $cell \

--cells_to_watch $cell \

--tablet_types_to_wait PRIMARY,REPLICA \

--service_map 'grpc-vtgateservice' \

--pid_file $VTDATAROOT/tmp/vtgate2.pid \

--mysql_auth_server_impl none \

> $VTDATAROOT/tmp/vtgate2.out 2>&1 &

# Block waiting for vtgate to be listening

# Not the same as healthy

echo "Waiting for vtgate to be up..."

while true; do

curl -I "http://$hostname:$web_port/debug/status" >/dev/null 2>&1 && break

sleep 0.1

done;

echo "vtgate is up!"

echo "Access vtgate at http://$hostname:$web_port/debug/status"

disown -a

修改vtgate-up-3.sh文件

# This is an example script that starts a single vtgate.

source "$(dirname "${BASH_SOURCE[0]:-$0}")/../env.sh"

cell=${CELL:-'test'}

web_port=15003

grpc_port=15993

mysql_server_port=15308

mysql_server_socket_path="/tmp/mysql3.sock"

# Start vtgate.

# shellcheck disable=SC2086

vtgate \

$TOPOLOGY_FLAGS \

--log_dir $VTDATAROOT/tmp \

--log_queries_to_file $VTDATAROOT/tmp/vtgate_querylog3.txt \

--port $web_port \

--grpc_port $grpc_port \

--mysql_server_port $mysql_server_port \

--mysql_server_socket_path $mysql_server_socket_path \

--cell $cell \

--cells_to_watch $cell \

--tablet_types_to_wait PRIMARY,REPLICA \

--service_map 'grpc-vtgateservice' \

--pid_file $VTDATAROOT/tmp/vtgate3.pid \

--mysql_auth_server_impl none \

> $VTDATAROOT/tmp/vtgate3.out 2>&1 &

# Block waiting for vtgate to be listening

# Not the same as healthy

echo "Waiting for vtgate to be up..."

while true; do

curl -I "http://$hostname:$web_port/debug/status" >/dev/null 2>&1 && break

sleep 0.1

done;

echo "vtgate is up!"

echo "Access vtgate at http://$hostname:$web_port/debug/status"

disown -a

在执行vtgate-up.sh脚本时,执行vtgate-up-2.sh,vtgate-up-3sh

这样就可以同时启动3个vtgate,而且随便连接哪一个vtgate,效果一样。


 

搭建HAProxy:

前置条件:

  • epel-release
  • gcc
  • systemd-devel

下载HAProxy:

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

解压源码包:

tar zxf haproxy-2.6.2.tar.gz

从源码编译 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}` 替换为自定义的实际路径。

重新配置 profile 文件:

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

source /etc/profile

检查 HAProxy 是否安装成功:

which haproxy


 

增加一个配置文件/opt/haproxy/haproxy.cnf,格式如下:

global # 全局配置。

log 127.0.0.1 local2 # 定义全局的 syslog 服务器,最多可以定义两个。

chroot /opt/haproxy/lib # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。

pidfile /opt/haproxy/pid # 将 HAProxy 进程的 PID 写入 pidfile。

maxconn 4096 # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。

nbthread 48 # 最大线程数。线程数的上限与 CPU 数量相同。

user haproxy # 同 UID 参数。

group haproxy # 同 GID 参数,建议使用专用用户组。

daemon # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数“-D”的功能。当然,也可以在命令行中用“-db”参数将其禁用。

stats socket /opt/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 vitess-cluster # 配置 database 负载均衡。

bind 0.0.0.0:3390 # 浮动 IP 和 监听端口。

mode tcp # HAProxy 要使用第 4 层的传输层。

balance leastconn # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。

server vitess-1 127.0.0.1:15306 check inter 2000 rise 2 fall 3 # 检测 15306 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。

server vitess-2 127.0.0.1:15307 check inter 2000 rise 2 fall 3

server vitess-3 127.0.0.1:15308 check inter 2000 rise 2 fall 3

启动:

haproxy -f /opt/haproxy/haproxy.cnf


 

测试:

1.使用Navicat连接

可以成功看到数据库数据:


 


 

2.使用HAProxy监控

登录地址:http://IP:8080/haproxy

例如:http://172.23.185.18:8080/haproxy

账号:admin

密码:vitess123

登录成功后可以看到,3个vtgate正在工作:


 


 


 

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

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

相关文章

Python之Opencv教程(4):识别图片中多张人脸

1、识别代码 导入必要的库 import cv2加载人脸识别器 face_detector cv.CascadeClassifier("data//haarcascade_frontalface_alt.xml")这里使用了OpenCV自带的人脸识别分类器,路径为cv2.data.haarcascades ‘haarcascade_frontalface_default.xml’。你…

pytorch | torch.contiguous()方法

torch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起: touch.view()方法对张量改变“形状”其实并没有…

Linux-3 yum和vim

目录 本节目标: Linux 软件包管理器 yum 什么是软件包 1.yum是什么?软件包? 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件? 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…

开源知识库平台Raneto--使用Docker部署Raneto

文章目录 一、Raneto介绍1.1 Raneto简介1.2 知识库介绍 二、阿里云环境2.1 环境规划2.2 部署介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Raneto镜像五、部署Raneto知识库平台5.1 创建挂载目录5.2 编辑config.js文件5.…

MySQL InnoDB 之 多版本并发控制(MVCC)

多版本并发控制(MVCC,Multi-Version Concurrency Control)是数据库管理系统中用于提供高并发性和在事务处理中实现隔离级别的一种技术。MVCC 允许系统在不完全锁定数据库资源的情况下,处理多个并发事务,从而提高了数据…

Datacom HCIP笔记-OSPF协议 之二

链路:路由器之间的相连的链路 状态:链路上的参数在某一时刻的状态 单边邻居 one way? 收到对端发来的hello报文,其中没有自己的router id LSA类型: 1类LSA:描述路由器自身加入到ospf进程中的直连链路的状态…

大数据-TXT文本重复行计数工具

支持系统类型:Windows 64位系统 Linux 64位系统 苹果64位系统 硬盘要求:固态硬盘(有效剩余磁盘空间大小最低3倍于大数据文件的大小) 内存要求:最低8G(例如只有几百G数据) 如果处理TB级大数据文…

STM32 软件I2C方式读取AS5600磁编码器获取角度例程

STM32 软件I2C方式读取AS5600磁编码器获取角度例程 🔖本例程使用正点原子例程作为工程模板创建。 📘 硬件电路部分 🌿原理图部分: 🌿PCB布线和电路 ✨注意事项:有些硬件需要I2C上拉,否则检…

校园局域网钓鱼实例

Hello ! 我是"我是小恒不会java" 本文仅作为针对普通同学眼中的网络安全,设计的钓鱼案例也是怎么简陋怎么来 注:本文不会外传代码,后端已停止使用,仅作为学习使用 基本原理 内网主机扫描DNS劫持前端模拟后端…

【2023】kafka入门学习与使用(kafka-2)

目录💻 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型: 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

大模型与数据分析:探索Text-to-SQL

当今大模型如此火热,作为一名数据同学,持续在关注LLM是如何应用在数据分析中的,也关注到很多公司推出了AI数智助手的产品,比如火山引擎数智平台VeDI—AI助手、 Kyligence Copilot AI数智助理、ThoughtSpot等,通过接入人…

Node.js的Event Loop:六个阶段详解

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

括号生成(回溯+剪枝)

22. 括号生成 - 力扣(LeetCode) 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 样例输入 示例 1: 输入:n 3 输出:["((()))&q…

五年前端的面试之旅

哈喽我是树酱,最近整理了下前端面试相关的知识题库,借此分享给各位小伙伴,帮助小伙伴早日拿到钟意的offer! 前言 最近就业市场不景气,跟大环境较差也有关,确实给我们也会带来一定的挑战。在招聘网站投简历的…

python批量转化pdf图片为jpg图片

1.把pdf图片批量转为jpg;需要注意的是,需要先安装poppler这个软件,具体安装教程放在下面代码中了 2.代码 #poppler安装教程参考:https://blog.csdn.net/wy01415/article/details/110257130 #windows上poppler下载链接&#xff1a…

从零开始机器学习(机器学习 监督学习之线性回归 损失函数及可视化 梯度下降 线性回归的平方误差损失函数 lab实验)

文章目录 机器学习定义监督学习之线性回归损失函数及可视化梯度下降线性回归的平方误差损失函数lab实验 机器学习定义 机器学习就是机器通过不断训练数据集从逐渐知道正确的结果 机器学习包括监督学习和非监督学习 监督学习:需要输入数据和结果数据来不断训练学习…

linux0.11中jmpi 0,8解析

系统在执行该行代码时已经为保护模式, jmpi 0,8会将段选择子(selector)载入cs段寄存器,并计算出逻辑地址。 段选择子的结构如下: 段选择子包括三部分:描述符索引(index)、TI、请求特权级(RPL)。…

SpringMVC常见面试题

1:Spring mvc执行流程 回答: 版本1:视图版本,jsp 用户发送出请求到前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping(处理映射器)HandlerMapping找到具体的处理器,生成处理器对象及处理器拦…

二十四种设计模式与六大设计原则(一):【策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式】的定义、举例说明、核心思想、适用场景和优缺点

目录 策略模式【Strategy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 代理模式【Proxy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 单例模式【Singleton Pattern】 定义 举例说明 核心思想 适用场景 优缺点 多例模式【Multition Pattern】…

C# 微软官方学习文档

链接:https://learn.microsoft.com/zh-cn/dotnet/csharp/ 在C#的学习过程中,我们可以参考微软官方的学习文档。它是一个免费的学习平台,提供了丰富的C#学习路径和教程(如下图),对我们入门到高级应用开发都…