Redis集群架构搭建——主从、哨兵、集群

上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis,在这篇文章中,将会教大家搭建Redis的几种高可用的架构:主从架构、哨兵集群、Cluster集群。

本篇文章使用的redis版本为6.2.13,不同版本的配置可能有略微的区别,比如replicaof/slaveof。

因为设备有限,只能在一台Ubuntu虚拟机上通过不同端口启动多个redis服务,

注意:

1、配置文件中配置的logfile、dir后面的路径要提前创建好

2、启动redis的命令不要直接复制,否则可能会提示“没有那个文件或目录”,自己手敲的命令就可以正常执行(血的教训)

目录

一、搭建主从架构

搭建主节点

复制配置文件

修改配置文件

启动主节点

搭建从节点

复制配置文件

修改配置文件 

启动从节点

二、搭建哨兵集群架构

增加一个从节点

搭建哨兵节点

复制sentinel.conf

修改设置

启动哨兵节点

查看集群信息

测试哨兵选主

三、搭建高可用集群架构

创建所有节点

创建一个集群

四、集群水平扩展

添加集群节点

设置为从节点

删除集群节点

节点重新分片


一、搭建主从架构

主从架构的redis集群模式最低配置是一个master一个slave,所以要启动两个redis服务。

搭建主节点

复制配置文件

切换到redis安装目录,复制一份配置文件

cp redis.conf redis_6379.conf

如下图所示:

修改配置文件

修改一下redis_6379.conf,通过Ctrl+F搜索并修改以下配置。

# bind 127.0.0.1 -::1protected-mode no# 设置启动端口号
port 6379# 设置后台启动
daemonize yes# 进程ID保存的文件
pidfile /var/run/redis_6379.pid# 设置日志文件名
logfile "redis_6379.log"

启动主节点

按照上一步修改完redis_6379.config之后,通过下面的命令启动redis

./src/redis-server redis_6379.conf

如图,查看日志文件,redis成功启动了

搭建从节点

复制配置文件

切换到redis安装目录,复制一份配置文件,直接复制之前的6379文件,懒得重复修改一些设置。

cp redis_6379.conf redis_6389.conf

修改配置文件 

修改一下redis_6389.conf,通过Ctrl+F搜索并修改以下配置。

# 设置启动端口号
port 6389# 从节点只能处理读操作,当前版本redis默认开启的配置
replica-read-only yes# 配置redis主节点ip地址和端口号
replicaof 192.168.254.128 6379# 进程ID保存的文件
pidfile /var/run/redis_6389.pid# 保存数据的文件地址
dir /usr/local/redis/6389/data# 日志文件的文件名
logfile "/usr/local/redis/6389/logs/redis_6389.log"

注意:为了避免文件找不到问题,需要先在/usr/local下创建对应的目录

/redis/6389/data

/redis/6389/logs

启动从节点

通过以下命令启动从节点

./src/redis‐server redis_6389.conf

如下图,slave节点成功启动,并从主节点6379同步了数据。

然后在主节点设置几个key,看一下是否会同步到从节点:

通过redis-cli命令连接主节点(默认连接的是端口号是6379的redis节点),可以通过-p指定端口号。第一次使用redis-cli可能会提示安装redis-tools,复制命令回车即可。

设置一个name

从节点上获取name

至此,redis主从架构的搭建就圆满完成了。

二、搭建哨兵集群架构

哨兵集群架构其实就是在主从架构的基础上,引入了哨兵节点,哨兵不处理客户端的读写请求,只负责监控主节点和从节点,当发现主节点挂了,会重新选举一个主节点,选举主节点的过程是通过多个哨兵投票得到的,只有超过半数的哨兵同意选举才能成立,所以哨兵的数量要设置成奇数,防止平票重新选举的情况发生。因此,哨兵集群架构最少要有3个哨兵节点。

增加一个从节点

在第一节主从架构的基础上,再搭建一个redis节点6399。

从6389节点复制一份配置文件

cp redis_6389.conf redis_6399.conf

然后修改下面这些配置就可以了(Ctrl+F搜索替换6389为6399,能偷懒就偷懒~)

port 6399pidfile /var/run/redis_6399.pidlogfile "/usr/local/redis/6399/logs/redis_6399.log"dir /usr/local/redis/6399/data

然后输入命令启动

./src/redis‐server redis_6399.conf

同样的,它会从主节点6379同步数据。

搭建哨兵节点

复制sentinel.conf

cp sentinel.conf sentinel_6380.conf 

修改设置

port 6380daemonize yeslogfile "/usr/local/redis/6380/logs/redis_6380.log"dir /usr/local/redis/6380/datapidfile /var/run/redis_6380.pid# 配置主节点ip和端口号,最后一个2表示当哨兵节点中两个通过选举结果时,才设置候选节点为master
# 一般设置成哨兵节点数/2 + 1
sentinel monitor mymaster 192.168.254.128 6379 2

然后按照类似的方法创建两个哨兵节点6390和6400

复制一份sentinel_6380.conf配置文件

cp sentinel_6380.conf sentinel_6390.conf

替换6380为6390,然后同理创建6400

启动哨兵节点

src/redis-sentinel sentinel_6380.confsrc/redis-sentinel sentinel_6390.confsrc/redis-sentinel sentinel_6400.conf

启动完成后,点击任意一个配置文件,发现文件末尾多了一段内容。

查看集群信息

连接6400端口的哨兵节点,通过redis的info命令查看到整个集群的信息

redis-cli -p 6400info

测试哨兵选主

通过kill命令杀死redis主节点,看一下能否完成新的master选举。

如上图,主节点已经下线了,连接其他两个从节点中任意一个,例如,连接6389

发现6389被设置成了主节点

至此,redis的哨兵集群架构也搭建完成了。

三、搭建高可用集群架构

在这里创建一共九个节点,按照1主2从的比例,刚好3组小集群。

创建所有节点

第一步:在redis安装目录下创建一个cluster目录,复制一份配置文件

cp redis.conf ./cluster/redis_6500.conf

然后修改redis_6500.conf

#bind 127.0.0.1 -::1protected-mode noport 6500daemonize yespidfile /var/run/redis_6500.pidlogfile "/usr/local/redis-cluster/6500/logs/redis_6500.log"dir /usr/local/redis-cluster/6500/dataappendonly yes# 取消以下设置的注释,并修改对应的值
cluster-enabled yescluster-config-file nodes-6500.confcluster-node-timeout 15000

接着,只需要复制/cluster/6500.conf就行了,Ctrl+F搜索替换6500为6501、6502、6503、6504、6505、6506、6507、6508,完成其余节点的创建。

cp ./cluster/redis_6500.conf ./cluster/redis_6501.confcp ./cluster/redis_6500.conf ./cluster/redis_6502.confcp ./cluster/redis_6500.conf ./cluster/redis_6503.confcp ./cluster/redis_6500.conf ./cluster/redis_6504.confcp ./cluster/redis_6500.conf ./cluster/redis_6505.confcp ./cluster/redis_6500.conf ./cluster/redis_6506.confcp ./cluster/redis_6500.conf ./cluster/redis_6507.confcp ./cluster/redis_6500.conf ./cluster/redis_6508.conf

如图所示

然后尝试启动一下其中任意一个服务,看一下日志是否有报错,保证配置文件没有问题。

然后,依次启动6501-6508的节点。

通过ps命令查看到所有节点都启动了

创建一个集群

通过命令将刚刚启动的9个节点加入到一个集群中。

--cluster-replicas指定每个小集群的从节点数量,开头已经说了,是按照3组1主2从的结构搭建集群,所以这里指定的值为2

./src/redis-cli --cluster create 192.168.254.128:6500 192.168.254.128:6501 192.168.254.128:6502 192.168.254.128:6503 192.168.254.128:6504 192.168.254.128:6505 192.168.254.128:6506 192.168.254.128:6507 192.168.254.128:6508 --cluster-replicas 2

如图,前面三个节点被设置成了主节点,因为多个主、从节点都在一台机器上,所以有黄色的Warning。

根据提示输入yes开始创建集群,如图,集群就搭建好了

注意:集群模式下连接redis客户端的命令有点不同

 ./src/redis-cli -c -h 192.168.254.128 -p 6505

-c 表示通过集群模式连接

-h 指定服务器ip地址

为了保证节点数据的安全,集群的节点不会全部都部署在在本机,而且主、从节点一般不会是同一个服务器下的redis服务,因为一旦这台机器坏了,那么这个分片的数据将全部丢失。

因为从节点只负责备份数据,不会处理请求,所以在连接从节点6505执行命令时,会自动重定向到他的主节点6501(6500-6502是主节点,也就是创建集群指定的前3个节点)。

最后介绍两个命令

cluster info # 查看集群信息cluster nodes # 查看集群的节点

至此,Redis的高可用集群也搭建完成了。

四、集群水平扩展

在此之前,要在/user/local/redis-cluster目录下创建目录/6509/logs和/6509/data。

复制一份之前的配置文件

cp ./cluster/redis_6508.conf ./cluster/redis_6509.conf

然后Ctrl+F替换

最后Ctrl + S保存文件内容改变,保存成功右上角会有上传成功的提示。

然后启动6509节点

./src/redis-server ./cluster/redis_6509.conf

添加集群节点

当有新的节点添加到cluster集群,默认是master节点,通过add-node命令来添加节点,第一个ip:端口号表示待加入的节点,第二个ip:端口号为集群中任意一个节点。

添加刚刚创建的6509到集群

redis-cli --cluster add-node 192.168.254.128:6509 192.168.254.128:6500

设置为从节点

连接6509

redis-cli -c -h 192.168.254.128 -p 6509

查看集群节点信息

cluster nodes

 

 设置6509节点的主节点为6500

cluster replicate 节点ID

节点ID就是上图红框内的一长串字符串

cluster replicate cbce6fa89b45e4406db54862fed9c1e452ddba4e

然后再查看集群节点

删除集群节点

可以通过del-node命令删除集群中的节点,第一个参数是节点的ip:端口号,第二个参数是节点的ID

redis-cli --cluster del-node 192.168.254.128:6509 25c2ccdd1bed9536475e9e1a0b9d17b001654aa1

当删除主节点时,需要把数据迁移到其他从节点,保证数据不丢失,也就是通过下一个部分给节点重新分片。

节点重新分片

redis-cli --cluster reshared 192.168.254.128:6509

好了,文章就分享到这里了,看完不要点赞+收藏哦~

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

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

相关文章

nodejS+vue网上招聘系统

求职者模块 系统的求职者模块可以分为 ①个人信息管理,可以更改个人用户名,密码等基本信息; ②岗位查询,可以根据岗位类型查询到该类型的岗位列表,并进行应聘申请。 ③应聘申请管理,可以查询到自己的应聘申…

数学建模:智能优化算法及其python实现

数学建模:智能优化算法及其python实现 智能优化算法简介差分进化算法(Differential Evolution,DE)遗传算法(Genetic Algorithm,GA)粒子群优化算法(Particle Swarm Optimization,PSO)模拟退火算法(Simulated Annealing,SA)蚁群算法(Ant Colony Optimization,ACO)…

HTTP代理SSL连接:保障网络安全的重要协议

HTTP代理SSL连接是一种网络安全协议,它结合了HTTP代理和SSL/TLS协议,用于在客户端和服务器之间建立加密通信通道。HTTP代理SSL连接可以保护数据在传输过程中不被窃听、篡改或伪造,从而确保数据的完整性、保密性和可靠性。在本文中&#xff0c…

目前很火的养猫微信小程序源码带流量主+搭建教程

目前很火的养猫微信小程序源码带流量主搭建教程。 搭建教程 进入小程序我们下载开发者工具 开发者工具安装好了 我们就把前端源码导入进开发者工具中 这里的APPID我们填写自己的小程序APPID 修改siteinfo.js里的uniacid和acid 这两个ID在刚才后端添加的小程序那里看 在把…

【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法

参考链接qiankun官网&#xff1a;微应用之间如何跳转&#xff1f; 1.主应用、子应用路由都是hash模式 主应用根据 hash 来判断微应用&#xff0c;无需考虑该问题 2.主应用根据path判断子应用 方法实现适用条件参数传递存在问题a标签跳转<a href"/toA"></…

新版WordPress系统文章自动采集插件/Auto Post pro完美运行版/多线程采集(wp自动采集)

源码介绍&#xff1a; 最新版WordPress系统文章自动采集插件&#xff0c;它是一款帮助用户提供方便快捷的文章自动采集方案的插件。WordPress自动采集插件&#xff0c;让内容采集变得高效便捷。作为Auto Post pro完美运行版&#xff0c;这里分享的是WordPress文章采集插件Auto…

TG Pro for Mac强大的硬件温度检测、风扇控制工具测评

无论您是旧机型还是全新MacBookPro&#xff0c;使用TG Pro均可延长Mac的使用寿命。小编就给大家详细说一下使用TG Pro的体验~ 打开TG Pro&#xff0c;您会注意到的第一件事是带有大量温度&#xff0c;风扇速度和诊断信息的主窗口。 这是您将与之交互的应用程序的主要区域之一。…

Selenium自动化测试 —— 通过cookie绕过验证码的操作!

验证码的处理 对于web应用&#xff0c;很多地方比如登录、发帖都需要输入验证码&#xff0c;类型也多种多样&#xff1b;登录/核心操作过程中&#xff0c;系统会产生随机的验证码图片&#xff0c;进行验证才能进行后续操作 解决验证码的方法如下&#xff1a; 1、开发做个万能…

js实现数组去重方式(12种方法)

目录 1、filter indexOf2、for object3、for includes4、for splice5、filter indexOf6、Map7、Set8、set Array.from9、sort 排序10、for findIndex11、双重for循环12、reduce 1、filter indexOf 数组去重&#xff1a;利用 filter 过滤 配合 indexOf 查找元素 var a…

Redis 是什么?

Redis是一种基于内存的数据库&#xff0c;数据的读写都是在内存中完成的&#xff0c;因此读写速度非常的快&#xff0c;常用于缓存&#xff0c;消息队列&#xff0c;分布式锁等场景。 Redis 在高并发项目中&#xff0c;担任着非常重要的作用&#xff0c;扛高并发的&#xff0c;…

docker+mysql+flask+redis+vue3+uwsgi+docker部署

首先拉取mysql的镜像&#xff0c;这里用的mysql5.7.6 docker pull mysql:5.7.6 镜像拉取完成后启动&#xff1a; docker run --name my-mysql -d -p 3306:3306 -v /usr/local/my-mysql/conf:/etc/mysql/conf.d -v /usr/local/my-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PA…

layui子界面操作数据后主界面刷新怎么操作

项目场景&#xff1a; layui子界面进行了增删改查需要在关闭后让主界面刷新 解决方案&#xff1a; layui的admin.open方法支持传入回调函数,主要有以下几种回调: yes回调 用于确定/提交按钮点击后的回调参数: index,layero admin.open({ yes: function(index, layero){ /…

设计模式 - 代理模式

目录 一. 前言 二. 实现 三. 静态代理和动态代理 一. 前言 代理模式&#xff08;Proxy Pattern&#xff09;&#xff0c;为某个对象提供一种代理以控制对对象的访问。即客户端可通过代理对象间接访问目标对象&#xff0c;同时可限制、增强、修改目标对象的一些特性。访问者不…

vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标

GitHub Demo 地址 在线预览 vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标 [GitHub Demo 地址](https://github.com/iotjin/jh-vue3-admin)[在线预览 ](https://iotjin.github.io/jh-vue3-admin) 一、iconify插件安装使用效果图 二、通过自动导入使用ic…

如何利用React和Sass实现可定制的前端样式

如何利用React和Sass实现可定制的前端样式 引言&#xff1a; React是一种流行的JavaScript库&#xff0c;用于构建用户界面。它提供了组件化的方式来开发复杂的前端应用程序。而Sass是一种CSS预处理器&#xff0c;通过将CSS代码分解为模块&#xff0c;可以更方便地管理和组织样…

AIGC: 区块链与数据安全

随着国家将区块链纳入战略发展规划&#xff0c;数字经济蓬勃发展。近年来&#xff0c;数据的流通成为了实体经济赋能的关键&#xff0c;而在这一过程中&#xff0c;区块链技术和数据安全变得至关重要。 中国已经成为全球最大的数据体&#xff0c;每天产生大量数据。数字经济已…

软件测试人员必须知道的接口测试基础

一、首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能…

axios回调函数中this指向已经改变的解决方法

在axios回调函数中&#xff0c;this指向的是回调函数本身的作用域&#xff0c;而不是Vue实例的作用域。因此&#xff0c;你不能直接通过this访问Vue实例中的数据。为了解决这个问题&#xff0c;有几种方法&#xff1a; 1.使用箭头函数&#xff0c;箭头函数会绑定当前作用域的t…

【Linux】——基操指令(一)

个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 LeetCode刷题 算法专栏 目录 前言 基操前的碎碎念 计算机的层状结构 基础指令 查看登录用户指令 查看用户指令 查看当前所处工作目录 清屏指令 基操指令 ls命令 cd命令 makdir指令 rmdir指令 &…

Mac电脑信息大纲记录软件 OmniOutliner 5 Pro for Mac中文

OmniOutliner 5 Pro是一款专业级的Mac大纲制作工具&#xff0c;它可以帮助用户更好地组织和管理信息&#xff0c;以及制作精美的大纲。以下是OmniOutliner 5 Pro的主要功能和特点&#xff1a; 强大的大纲组织和管理功能。OmniOutliner 5 Pro为用户提供了多层次的大纲结构&…