HAProxy + Vitess负载均衡

news2024/11/24 20:44:31

一、环境搭建

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.coloradmin.cn/o/1557832.html

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

相关文章

嵌入式Qt 布局管理器QBoxLayout

一.存在问题 二.布局管理器 三.布局接口函数的使用 TestBtn1.setText("Test Button 1"); TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); TestBtn1.setMinimumSize(160, 30); 使用setSizePolicy,那么 TestBtn1按钮 就会随着…

TypseScript再学习之类型别名和接口(10)

先看类型别名:使用关键字 type 声明,注意有等于号额 // 类型别名 使用关键字 type 声明,注意有等于号额 type Cat {name: string; }; let huahua: Cat {name: "花花", };type和interface不同之处在于:interface 是可以自动合并类型的&#…

源支付V7开源版2.99,修复各种提示错误

源支付V7开源版2.99,修复各种提示错误 加密说明:200拿来的,只有8.1这个文件加密,其他文件无任何加密,已修复各种提示错误 测试其他开源版安装提示错误,有几个文件是加密的 注:开发不易&#…

基于stm32的h5新建工程

目录 基于stm32的h5新建工程前言实验目的原理图部分搭建工程引脚配置界面:时钟配置界面工程选项卡: 编写代码实现点灯本文中使用的测试工程 基于stm32的h5新建工程 本文目标:基于stm32的基础实验 按照本文的描述,应该可以跑通实…

python学习16:python中的布尔类型和条件语句的学习

python中的布尔类型和条件语句的学习 1.布尔(bool)类型的定义: 布尔类型的字面量:True表示真(是、肯定) False表示假(否、否定) True本质上是一个数字记作1,False记作0 …

码支付个人支付宝永不掉线使用教程

​支付宝免CK添加操作稍微繁琐点,请耐心观看 此通道必须关闭你的余额宝自动转入功能,否则可能造成不跳转 支付宝添加的所有通道均支持H5免输入收款 第一步:打开支付宝开发平台,然后用你的支付宝注册登陆:https://op…

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

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

Ypay源支付码支付最新PC三合一监控软件实测有效

Ypay源支付码支付最新PC三合一监控软件实测有效 【免费授权】源支付正版授权_ 打造更专业的免签支付系统

深入理解HDFS工作原理:大数据存储和容错性机制解析

** 引言: ** 在当今数据爆炸的时代,存储和管理大规模数据成为了许多组织面临的重要挑战。为了解决这一挑战,分布式文件系统应运而生。Hadoop分布式文件系统(HDFS)作为Apache Hadoop生态系统的核心组件之一&#xff…

C语言-写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

0xaaaaaaaa...等是什么&#xff1f;-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/137179252 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << …

本地虚拟机服务器修改站点根目录并使用域名访问的简单示例

说明&#xff1a;本文提及效果是使用vmware虚拟机&#xff0c;镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用&#xff1a; vim /etc/httpd/conf.d/webpage.conf 因为在主配…

拌合楼管理软件开发(十三) 对接耀华XK3190-A9地磅(实战篇)

前言: 实战开整 目前而言对于整个拌合楼管理软件开发,因为公司对这个项目还处于讨论中,包括个人对其中的商业逻辑也存在一些质疑,都是在做一些技术上的储备.很早就写好了串口与地磅对接获取代码,也大概知道真个逻辑,这次刚好跟库区沟通,远程连接到磅房电脑,开始实操一下. 一、地…

mybatis的基于注解和xml的两种实现方式详解

文章简介 本文介绍了springbootmybatis实现数据库操作的两种实现方式&#xff0c;经测试均可运行使用。整体而言注解更加简便&#xff0c;但面对一些复杂查询&#xff0c;可能需要使用到注解方式。 注解方式 pom依赖&#xff1a; <dependencies><!--连接数据库--&…

BitVM2:比特币上的无需许可验证

1. 引言 前序博客有&#xff1a; 基于BitVM的乐观 BTC bridgeBitVM&#xff1a;Bitcoin的链下合约Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f; 最初的 BitVM 设计仅限于两方设置。BitVM2结合了并行和冗余实例&#xff0c;以引入基于 1-of-n 诚实假设的多方配置。这…

排序第五篇 归并排序

一 简介 归并排序(Merge Sort) 的基本思想是&#xff1a; 首先将待排序文件看成 n n n 个长度为1的有序子文件&#xff0c; 把这些子文件两两归并&#xff0c; 得到 n 2 \frac{n}{2} 2n​ 个长度为 2 的有序子文件&#xff1b; 然后再把这 n 2 \frac{n}{2} 2n​ 个有序的子…

【数据结构与算法篇】动态顺序表及相关OJ算法题

【数据结构与算法篇】动态顺序表及相关OJ算法题 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; 目录 【数据结构与算法篇】动态顺序表及相关OJ算法题 1. 动态顺序表的实现 1.1 SeqList.h 头文件声明 1.…

【C语言终章】预处理详解(上)

【C语言终章】预处理详解&#xff08;上&#xff09; 当你看到了这里时&#xff0c;首先要恭喜你&#xff01;因为这里就是C语言的最后一站了&#xff0c;你的编程大能旅途也将从此站开始&#xff0c;为坚持不懈的你鼓个掌吧&#xff01; &#x1f955;个人主页&#xff1a;开敲…

【Effective Web】文件上传

文章目录 前言一、选择本地文件1.设计一个上传文件按钮2.FileReader读取文件内容 二、使用拖拽方式1.设计一个拖拽容器2.拖拽文件的相关事件回调 三、使用粘贴方式1.设计一个粘贴容器2.paste事件回调 四、总结 前言 前端无法像app一样直接操作本地文件&#xff0c;对本地文件的…

「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K

C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是&#xff08;&#xff09;。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…

【Java数据结构】关于栈的操作出栈,压栈,中缀表达式,后缀表达式,逆波兰表达式详解

&#x1f525;个人主页&#xff1a;努力学编程’ &#x1f525;内容管理&#xff1a;java数据结构 上一篇文章我们讲过了java数据结构的链表&#xff0c;对于链表我们使用了它的一些基本操作&#xff0c;完成了扑克牌小游戏的操作&#xff0c;如果你感兴趣的话&#xff0c;点…