搭建高性能数据库集群之三:Keepalived实现MySQL集群高可用

news2024/9/24 13:22:03

搭建高可用集群,2台HAProxy 可实现Mycat多节点的集群高可用和负载均衡,而HAProxy 的高可用,由Keepalived来实现。Keepalived负责为该台服务器抢占vip(虚拟IP),抢到后对该主机访问。
在这里插入图片描述

搭建高可用集群:

上图,我们要安装的集群架构,mysql 2台、Mycat 2台、HAProxy 2台

步骤1:安装mysql、Mycat

安装并配置数据库的主从配置,配置Mycat的读写分离。安装与上面读写分离步骤一致。

步骤2:安装HAProxy

HAProxy
下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy

下载好的安装包文件 (haproxy-xxx.tar.gz),上传Linux服务器上,一般安装在/usr/local/src下,进行解压

tar -zxvf haproxy-1.5.16.tar.gz

解压完成后,查看内核版本,进行编译

cd /usr/local/src/haproxyc  # 切换目录
uname -r   # 查看内核版本 (得到 2.6.43-431.e16.x86_64)

# HAProxy是C语言开发,需要编译,进行编译命令
make TARGET=linux2643 PREFIX=/usr/local/haproxy ARCH=x86_64
# TARGET=linux内核版本,uname -r命令前几位就是内核版本
# PREFIX haproxyc安装路径
# ARCH 系统位数

编译后,进行安装

make install PREFIX=/usr/local/haproxy

安装成功后,创建目录 (haproxy数据存放的目录)

mkdir -p /usr/data/haproxy/

创建HAProxy配置文件

vim /usr/local/haproxy/haproxy.conf

配置文件:

global
	log 127.0.0.1 local0 
	maxconn 4096 
	chroot /usr/local/haproxy 
	pidfile /usr/data/haproxy/haproxy.pid
	uid 99
	gid 99
	daemon
	node mysql-haproxy-01
	description mysql-haproxy-01
defaults
	log global
	mode tcp
	option abortonclose
	option redispatch
	retries 3
	maxconn 2000
	timeout connect 50000ms
	timeout client 50000ms
	timeout server 50000ms
listen proxy_status
	bind 0.0.0.0:48066
		mode tcp
		balance roundrobin
		server mycat_1 mycat1地址:8066 check
		server mycat_2 mycat2地址:8066 check
frontend admin_stats
	bind 0.0.0.0:8888
		mode http
		stats enable
		option httplog
		maxconn 10
		stats refresh 30s
		stats uri /admin
		stats auth admin:123123
		stats hide-version
		stats admin if TRUE

内容解析:

#global 配置中的参数为进程级别的参数,通常与其运行的操作系统有关
global
	#定义全局的syslog服务器, 最多可定义2个; local0 是日志设备, 对应于/etc/rsyslog.conf中的配置 , 默认收集info级别日志
	log 127.0.0.1 local0 
	#log 127.0.0.1 local1 notice
	#log loghost local0 info
	#设定每个haproxy进程所接受的最大并发连接数 ;
	maxconn 4096 
	#修改HAproxy工作目录至指定的目录并在放弃权限之前执行chroot操作, 可以提升haproxy的安全级别
	chroot /usr/local/haproxy 
	#进程ID保存文件
	pidfile /usr/data/haproxy/haproxy.pid
	#指定用户ID
	uid 99
	#指定组ID
	gid 99
	#设置HAproxy以守护进程方式运行
	daemon
	#debug
	#quiet
	node mysql-haproxy-01  ## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时
	description mysql-haproxy-01 ## 当前实例的描述信息
	
#defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定
defaults
	#继承global中的log定义
	log global
	#所使用的处理模式(tcp:四层 , http:七层, health:状态检查,只返回OK)
	### tcp: 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对 7 层报文做任何类型的检查,此为默认模式
	### http:实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与 RFC 模式兼容的请求都会被拒绝
	### health:实例运行于 health 模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求
	mode tcp
	#当服务器负载很高的时候,自动结束掉当前队列处理时间比较长的连接
	option abortonclose
		
	#当使用了cookie时,haproxy将会将请求的后端服务器的serverID插入到cookie中,以保证会话的session持久性,而此时,后端服务器宕机,但是客户端的cookie不会刷新,设置此参数,将会将客户请求强制定向到另外一个后端server上,以保证服务的正常。
	option redispatch
	retries 3
	# 前端的最大并发连接数(默认为 2000)
	maxconn 2000
	# 连接超时(默认是毫秒,单位可以设置 us,ms,s,m,h,d)
	timeout connect 5000
	# 客户端超时时间
	timeout client 50000
	# 服务器超时时间
	timeout server 50000

#listen: 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用
listen proxy_status
	bind 0.0.0.0:48066 # 绑定端口
		mode tcp
		balance roundrobin # 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默认为轮询
		#格式: server <name> <address> [:[port]] [param*]
		# weight : 权重,默认为 1,最大值为 256,0 表示不参与负载均衡
        # backup : 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server
        # check  : 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定
        # inter  : 设定监控状态检查的时间间隔,单位为毫秒,默认为 2000,也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
        # rise   : 设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2)
        # fall   : 设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3)
        # cookie : 为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能
        # maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其他连接被释放
		server mycat_1 192.168.192.157:8066 check inter 10s
		server mycat_2 192.168.192.158:8066 check inter 10s

# 用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理
# HAProxy 的状态信息统计页面
frontend admin_stats
	bind 0.0.0.0:8888
		mode http
		stats enable
		option httplog
		maxconn 10
		stats refresh 30s
		stats uri /admin
		stats auth admin:123123
		stats hide-version
		stats admin if TRUE

启动HAProxy

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf

查看进程

ps -ef|grep haproxy

访问地址:http://IP地址:8888/admin (监控地址)

通过haproxy访问Mycat

mysql -h ip地址 -P 48066 -u mycat用户名 -p 密码;

步骤3:安装Keepalived
Keepalived
下载地址:https://www.keepalived.org/download.html

下载好的安装包文件 (Keepalived-xxx.tar.gz),上传Linux服务器上,一般安装在/usr/local/src下,进行解压

tar -zxvf keepalived-1.4.5.tar.gz

解压完成后,安装依赖插件

yum install -y gcc openssl-devel popt-devel

进入解压后的目录,进行配置,进行编译

cd /usr/local/src/keepalived-1.4.5
./configure --prefix=/usr/local/keepalived

完成后进行安装

make && make install

运行前配置

cp /usr/local/src/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/src/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

修改配置文件 /etc/keepalived/keepalived.conf
Master:

global_defs {
	notification_email {
		javadct@163.com
	}
	notification_email_from keepalived@showjoy.com
	smtp_server 127.0.0.1
	smtp_connect_timeout 30
	router_id haproxy01
	vrrp_skip_check_adv_addr
	vrrp_garp_interval 0
	vrrp_gna_interval 0
}

vrrp_script chk_haproxy {
	script "/etc/keepalived/haproxy_check.sh"
	interval 2
	weight 2
}

vrrp_instance VI_1 {
	#主机配MASTER,备机配BACKUP
	state MASTER
	#所在机器网卡
	interface eth1
	virtual_router_id 51
	#数值越大优先级越高
	priority 120
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	## 将 track_script 块加入 instance 配置块
    track_script {
    	chk_haproxy ## 检查 HAProxy 服务是否存活
    }
	virtual_ipaddress {
		#虚拟IP
		192.168.192.200
	}
}

BackUP:

global_defs {
	notification_email {
		javadct@163.com
	}
	notification_email_from keepalived@showjoy.com
	smtp_server 127.0.0.1
	smtp_connect_timeout 30
	#标识本节点
	router_id haproxy02
	vrrp_skip_check_adv_addr
	vrrp_garp_interval 0
	vrrp_gna_interval 0
}

# keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级
vrrp_script chk_haproxy {
	# 检测 haproxy 状态的脚本路径
	script "/etc/keepalived/haproxy_check.sh"
	#检测时间间隔
	interval 2
	#如果条件成立,权重+2
	weight 2
}

vrrp_instance VI_1 {
	#主机配MASTER,备机配BACKUP
	state BACKUP
	#所在机器网卡
	interface eth1
	virtual_router_id 51
	#数值越大优先级越高
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	## 将 track_script 块加入 instance 配置块
    track_script {
    	chk_haproxy ## 检查 HAProxy 服务是否存活
    }
	virtual_ipaddress {
		#虚拟IP
		192.168.192.200
	}
}

编写检测haproxy的shell脚本 haproxy_check.sh
在/etc/keepalived/目录,创建haproxy_check.sh脚本文件

#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
  /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
  echo "haproxy restart ..." &> /dev/null
  sleep 1
  if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
    /etc/init.d/keepalived stop
    echo "stop keepalived" &> /dev/null
  fi
fi

启动测试

service keepalived start

登录验证

# 访问的是Vip (虚拟ip)
mysql -uMycat用户名 -p密码 -h 192.168.192.200 -P 48066

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

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

相关文章

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码&#xff0c;系统基于thinkphp框架开发&#xff0c;功能已全完善&#xff0c;可灵活对接其他上游渠道接口&#xff0c;默认对接了大猿人接口&#xff0c;另外可无限制自定义创建充值页面&#xff0c;首页支持后台自定义修改&#xff0c;支持三级分销&…

No1.精选前端面试题,享受每天的挑战和学习

文章目录 如何实现分页功能如何实现vue虚拟列表功能浏览器的渲染原理JS中Map、WeakMap和Object的区别 如何实现分页功能 要实现分页功能&#xff0c;主要涉及以下几个方面的步骤&#xff1a; 数据源&#xff1a;首先需要有一个数据源&#xff0c;可以是数据库、文件、API接口等…

Centos7修改root密码

1.首先启动系统&#xff0c;在这个开机界面按e&#xff0c;进入编辑模式 2.进入编辑界面&#xff0c;上下光标键移动&#xff0c;找到linux16这一行&#xff0c;在末尾追加内容init/bin/sh,然后按Ctrlx键进入单用户模式。 3.在单用户模式下输入mount -o remount, rw /,挂载…

二、QT工程中各个文件代表的含义

QT从入门到实战学习笔记 基本QT工程中各个文件知识1、main函数2、.pro工程文件3、QT5基本模块4、.h头文件 基本QT工程中各个文件知识 1、main函数 #include "mymainwindow.h" #include <QApplication> //包含一个应用程序类的头文件 //main程序入口 argc命…

SSM球场计费管理系统-计算机毕设 附源码77275

SSM球场计费管理系统 摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在球馆计费管理的要求下&#xff0c;开发一款整体…

听说最近ChatGPT很火?我来整个废话版ChatGPT!

文章目录 需求分析项目初始化读取语料库文件实现随机模块生成文章保存文章命令行配置参数命令行交互废话版ChatGPT网页版 废话版ChatGPT 的功能是能根据语料库的配置和用户输入的规则&#xff0c;随机生成一篇可长可短的文本&#xff0c;里面的内容语句通顺&#xff0c;但是废话…

系列三、RocketMQ安装

一、前置准备 安装JDK&#xff0c;要是没有安装&#xff0c;请参考如下文章进行安装 https://blog.csdn.net/HelloWorld20161112/article/details/129085841 二、安装 2.1、下载RocketMQ安装包 # 官网 https://rocketmq.apache.org/download# 我分享的 链接&#xff1a;htt…

借助navicat,把一个数据库里面的部分表数据,导入另一个数据库中

背景 准备 在navicat里面创建两个数据库&#xff0c;一个是n1,另一个是n2 n1:有数据&#xff0c;需要把n1里面的部分表数据导入到n2里面 n2:被导入的数据库 给n1录入数据 给n2导入部分数据 点击工具---》 点击数据传输 选择导入和导出的数据库 点击自定义&#xff0c;选择自己…

KMeans聚类算法实现

目录 1. K-Means的工作原理 2.Kmeans损失函数 3.Kmeans优缺点 4.编写KMeans算法实现类 5.KMeans算法测试 6.结果 Kmeans是一种无监督的基于距离的聚类算法&#xff0c;其变种还有Kmeans。其中&#xff0c;sklearn中KMeans的默认使用的即为KMeans。使用sklearn相关算法API…

【数据结构与算法】Huffman编码/译码(C/C++)

实践要求 1. 问题描述 利用哈夫曼编码进行信息通讯可以大大提高信道利用率&#xff0c;缩短信息传输时间&#xff0c;降低传输成本。但是&#xff0c;这要求在发送端通过一个编码系统对待传数据预先编码&#xff1b;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以…

3D渲染的定义和应用领域

三维渲染&#xff08;3D rendering&#xff09;是一种将三维模型数据转化为二维图像的技术&#xff0c;通常利用计算机图形学的方法来实现。通过运用光线、材质、纹理、阴影等效果&#xff0c;将三维物体展现在二维屏幕上&#xff0c;以模拟真实世界中的三维景象。 一、三维渲…

el-table 默认勾选数据

目录 效果图 步骤&#xff1a; 1. 看elementui 官网上的案例&#xff0c;用到的方法是自带的 toggleRowSelection 2. 思路 原委 选中主表中的一条数据&#xff1b;判断与子表中的数据是否关联&#xff08;如果子表的关联ID主表的ID&#xff0c;则子表的这条数据显示被勾选&a…

CADD蛋白结构分析、虚拟筛选、分子对接(蛋白-蛋白、蛋白-

时间:第一天上午 课程名称:生物分子互作基础 课程内容:1.生物分子相互作用研究方法 1.1蛋白-小分子、蛋白-蛋白相互作用原理 1.2 分子对接研究生物分子相互作用 1.3 蛋白蛋白对接研究分子相互作用 课程名称:蛋白数据库 课程内容:1. PDB 数据库介绍 1.1 PDB蛋白数据库功能 1.2 …

Springboot整合jdbc_template

1.构建Springboot项目 利用springboot整合jdbctemplate,并不需要导入其他的依赖&#xff0c;具体的项目结构图如图 2.写domain层 数据库映射的实体类 package com.jkk.springboot_jdbc_template.domain;/*** author jkk*/import lombok.AllArgsConstructor; import lombok…

04 - C++学习笔记: 循环语句和跳转语句

在C编程中&#xff0c;循环语句和跳转语句是非常重要的控制结构。循环语句允许重复执行一段代码&#xff0c;而跳转语句允许在程序执行过程中改变执行的流程。本篇笔记将介绍C中常用的循环语句和跳转语句&#xff0c;并通过例子进行说明。 &#x1f501;循环类型 C 编程语言提…

查询子节点 postgresql

数据库为postgresql WITH RECURSIVE cte AS (SELECTn. ID,n. com_name,n."parentId" AS pidFROMcompany AS nWHEREn. ID = 2UNION ALLSELECTr. ID,r. com_name,cte. ID AS pidFROMcteJOIN company AS r ON r.

轻松实现邮箱验证码功能!快来体验Spring Boot的神奇力量!

邮件验证是现代互联网服务中常用的安全功能&#xff0c;本文介绍如何利用Spring Boot框架快速搭建一个高效易用的邮箱验证码功能。从配置邮箱>发送服务&#xff0c;到编写验证逻辑&#xff0c;无痛实现邮箱验证码功能轻而易举。快来掌握这个技能&#xff0c;加强您的应用安全…

论文解读 | CVPR 2020:PV-RCNN:用于三维物体检测的点体素特征集提取

原创 | 文 BFT机器人 论文《PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection》是一篇关于三维物体检测的论文。该论文提出了一种名为PV-RCNN的方法&#xff0c;用于从点云数据中进行三维物体检测&#xff0c;并在各种应用中取得了优秀的性能。 论文的主…

数据库第一章

一。数据库 1.概述 数据库database用来存储数据和管理数据的仓库 分类&#xff1a;关系型MySQL/非关系型Redis 关系型数据库&#xff08;二维表格模型&#xff09;&#xff1a;Oracle,MySQL,SQLServer,Access 非关系型数据库&#xff1a;MongoDB&#xff0c;Redis&#xf…

linux 文件锁flock与fcntl bytes级别精细控制不再是困难

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文件锁 概述 前面博客介绍了多任务下互斥的方法&#xff0c;如…