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.rhkb.cn/news/292205.html

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

相关文章

【GitLab】Ubuntu 22.04 快速安装 GitLab

在 Ubuntu 22.04 上安装最新版本的 GitLab,可以按照以下步骤操作: 1. 更新系统: 在终端中执行以下命令以确保系统是最新的: sudo apt update sudo apt upgrade2. 安装依赖: 安装 GitLab 所需的依赖包: …

vue2.0脚手架搭建

vue起步 文档 https://v2.cn.vuejs.org/ {{}} 变量、表达式渲染v-html html模板,渲染htmlv-model 绑定值(双向绑定)v-if 判断v-bind:href"地址" 简写:绑定属性 简写:href:"&qu…

SQL109 纠错4(组合查询,order by..)

SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_state MI UNION SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_state IL ORDER BY cust_name;order by子句,必须位于最后一条select语句之后

Android vehicle车辆属性新增demo

目录 前言一、Vehicle模块1.1 简介1.2 Vehicle框架1.3 主要功能和特点1.4 重要服务CarService1.4.1 简介1.4.2 组成1.4.3 启动时序1.4.4 作用 二、车辆属性新增demo2.1 CarPropertyService2.1.1 简介2.1.2 架构2.1.3 车辆属性 API2.1.4 CarPropertyService 初始化流程 2.2 App …

上岸美团了!

Hello,大家好,最近春招正在如火如荼,给大家分享一份美团的面经,作者是一份某双非的硕(只如初见668),刚刚通过了美团的3轮面试,已经拿到offer,以下是他的一些分享。 一面&…

Rust编程(四)PackageCrateModule

这一部分的中文教程/文档都很混乱,翻译也五花八门,所以我建议直接看英文官方文档,对于一些名词不要进行翻译,翻译只会让事情更混乱,本篇从实战和实际需求出发,讲解几个名称的关系。 Module & Crate & Package & Workspace 英文中的意思: Cargo:货物 Crate:…

遥感数字图像处理的学习笔记

相关链接: 遥感数字图像处理实验教程(韦玉春)--部分实验问题回答 目录 1.什么是图像,什么是数字图像? 2.什么是遥感数字图像?模拟图像(照片)与遥感数字图像有什么区别? 3.什么是遥感数字图像…

java数组与集合框架(一) -- 数据结构,数组

数据结构 概述 为什么要讲数据结构? 任何一个有志于从事IT领域的人员来说,数据结构(Data Structure)是一门和计算机硬件与软件都密切相关的学科,它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…

【公示】2023年度青岛市级科技企业孵化器拟认定名单

根据《青岛市科技企业孵化器管理办法》(青科规〔2023〕1号)(以下简称《管理办法》)、《关于开展2023年度市级科技企业孵化器认定申报工作的通知》,经申报受理、区市推荐、形式审查、专家评审及现场核查等程序&#xff…

鸿蒙开发(七)-UIAbility启动模式

鸿蒙开发(七)-启动模式 根据代码中定义,UIAbility的启动模式有以下几种: "launchType": {"description": "Indicates the boot mode of ability.","type": "string","enum": ["standard",…

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

【数据结构与算法篇】动态顺序表及相关OJ算法题 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 目录 【数据结构与算法篇】动态顺序表及相关OJ算法题 1. 动态顺序表的实现 1.1 SeqList.h 头文件声明 1.…

【进程IO】详细讲解文件描述符fd

文章目录 前言什么叫文件描述符FILE与fd的关系 再次理解文件为什么要有文件的方法列表呢? 进程和struct file的关系再次理解open操作 前言 C语言的关于文件操作的各种函数实际上是对系统调用的封装。那么从进程的角度看,一个文件到底是如何被描述的呢&a…

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

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

了解 LoadRunner 性能测试软件及其基础使用

目录 一、了解LoadRunner 1、什么是Loadrunner? 2、Loadrunner包括什么组件? (1)前台组件 (2)后台组件 二、LoadRunner三大组件 1、VuGen(虚拟用户脚本生成器) (…

Vue + .NetCore前后端分离,不一样的快速发开框架

摘要: 随着前端技术的快速发展,Vue.NetCore框架已成为前后端分离开发中的热门选择。本文将深入探讨Vue.NetCore前后端分离的快速开发框架,以及它如何助力开发人员提高效率、降低开发复杂度。文章将从基础功能、核心优势、适用范围、依赖环境等…

linux基础命令篇:Linux基础命令讲解——文件浏览(cat、less、head、tail和grep)

Linux基础命令讲解——文件浏览(cat、less、head、tail和grep) 本文详细介绍Linux中的cat、less、head、tail和grep命令,这些命令在日常工作中非常实用,以下是关于这些命令的详细介绍: 1. cat命令:用于查看…

JDK8的下载安装与环境变量配置教程

前言 官网下载:Java Archive Downloads - Java SE 8u211 and later 现在应该没人用32位的系统了吧,直接下载Windows x64 Installer jdk-8u391-windows-x64.exe 一、安装JDK 1. 打开jdk-8u391-windows-x64.exe 2. 直接下一步 3. 这个地方不要动他&…

鸿蒙OS开发实例:【瀑布流式图片浏览】

介绍 瀑布流式展示图片文字,在当前产品设计中已非常常见,本篇将介绍关于WaterFlow的图片浏览场景,顺便集成Video控件,以提高实践的趣味性 准备 请参照[官方指导],创建一个Demo工程,选择Stage模型熟读Har…

构建操作可靠的数据流系统

文章目录 前言数据流动遇到的困难先从简单开始可靠性延迟丢失 性能性能损失性能——分层重试 可扩展性总结 前言 在流式架构中,任何对非功能性需求的漏洞都可能导致严重后果。如果数据工程师没有将可伸缩性、可靠性和可操作性等非功能性需求作为首要考虑因素来构建…

单例设计模式(3)

单例模式(3) 实现集群环境下的分布式单例类 如何理解单例模式中的唯一性? 单例模式创建的对象是进程唯一的。以springboot应用程序为例,他是一个进程,可能包含多个线程,单例代表在这个进程的某个类是唯一…