Mycat(5)——基于keepalived+haproxy实现Mycat高可用

2024-04-10 19:08

本文主要是介绍Mycat(5)——基于keepalived+haproxy实现Mycat高可用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、高可用架构

在这里插入图片描述
keepalived主要是为了保证haproxy的高可用,主要用于监控haproxy是否可用,然后进行故障转移;而haproxy主要用来实现负载均衡。

角色服务器
Mycat1192.168.30.130
Mycat2192.168.30.131
haproxy1192.168.30.132
haproxy2192.168.30.133
keepalived1192.168.30.132
keepalived2192.168.30.133
虚拟IP192.168.30.134

注:相关服务器已经关闭防护墙和selinux

二、安装haproxy实现负载均衡

安装:

yum install haproxy -y
[root@server3 keepalived]# whereis haproxy
haproxy: /usr/sbin/haproxy /etc/haproxy /usr/share/haproxy /usr/share/man/man1/haproxy.1.gz

修改配置文件/etc/haproxy/haproxy.cfg:

globallog         127.0.0.1 local3 infochroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     10000user        haproxygroup       haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/statsdefaults#mode 修改为tcp 相关option修改为tcp配置或注掉mode                    tcplog                     globaloption                  tcplogoption                  dontlognull# option http-server-close# option forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1m# timeout http-keep-alive 10stimeout check           10smaxconn                 10000frontend  mycatmode  tcpbind  *:5001default_backend mycat-backendbackend  mycat-backendmode tcpbalance roundrobinserver mycat_1 192.168.30.130:8066 check inter 10sserver mycat_2 192.168.30.131:8066 check inter 10s

启动haproxy

systemctl start haproxy[root@server3 keepalived]# systemctl status haproxy
● haproxy.service - HAProxy Load BalancerLoaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)Active: active (running) since 日 2021-04-25 10:09:12 CST; 22min agoMain PID: 3803 (haproxy-systemd)CGroup: /system.slice/haproxy.service├─3803 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid├─3805 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds└─3806 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds4月 25 10:09:12 server3 systemd[1]: Started HAProxy Load Balancer.
4月 25 10:09:12 server3 haproxy-systemd-wrapper[3803]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

验证:

mysql -uroot -p123456 -P 5001 -h 192.168.30.132

可以成功登陆。

三、安装keepalived实现故障转移

(一)安装配置keepalived

安装keepalived:

yum install keepalived -y

在/etc/keepalived文件夹下创建haproxy状态检测脚本haproxy_check.sh:


#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
systemctl start haproxy
fisleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
systemctl stop keepalived
fi

修改keepalived配置文件/etc/keepalived/keepalived.cnf:
keepalived1:

global_defs {router_id k1script_user rootvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh"interval 5weight  -20
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.30.134}track_script {chk_haproxy}
}

keepalived2:

global_defs {router_id k2script_user rootenable_scrip_securityvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh"interval 5
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.30.134}track_script {chk_haproxy}
}

state 都配置为BACKUP,防止MASTER出现抢占的问题。
priority一个是100,一个是90.

启动keepalived:

systemctl start keepalived

此时,虚拟IP在keepalived1中:

[root@server3 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:45:c6:f5 brd ff:ff:ff:ff:ff:ffinet 192.168.30.132/24 brd 192.168.30.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.30.134/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe45:c6f5/64 scope link valid_lft forever preferred_lft foreve

(二)验证故障转移

使用虚拟IP地址访问mycat:

mysql -uroot -p123456 -P 5001 -h 192.168.30.134
  1. 关闭haproxy
    在keepalived1中关闭haproxy,发现haproxy随即被keepalived恢复启动。
  2. 关闭keepalived
    关闭keepalived1中的keepalive,发现虚拟IP转移至keepalived2中:
[root@server4 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:94:17:de brd ff:ff:ff:ff:ff:ffinet 192.168.30.133/24 brd 192.168.30.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.30.134/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe94:17de/64 scope link valid_lft forever preferred_lft forever
[root@server4 keepalived]# 

使用虚拟IP可以继续访问mycat

重启keepalived1后,虚拟IP转移至keepalived1中。

这篇关于Mycat(5)——基于keepalived+haproxy实现Mycat高可用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891894

相关文章

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python