Redis创建集群

主要内容

搭建redis集群

能力目标

搭建redis集群

一 应用场景

为什么需要redis集群?

当主备复制场景,无法满足主机的单点故障时,需要引入集群配置。

一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。

二 基本原理

哨兵选举机制,如果有半数节点发现某个异常节点,共同决定改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

主从复制的作用

1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

4、读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量。

5、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础

配置集群所需的环境

Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

1,规划网络。

用一台虚拟机模拟6个节点,一台机器6个节点,创建出3 master、3 salve 环境。虚拟机是 CentOS7 ,ip地址192.168.159.34

2,创建 Redis 节点

首先在 192.168.159.34 机器上 /usr/java/目录下创建 redis_cluster 目录;

mkdir redis_cluster

3 创建目录

在 redis_cluster 目录下,创建名为7001、7002,7003、7004、7005,7006的目录

mkdir 7001 7002 7003 7004 7005 7006

4 将 redis.conf 拷贝到这六个目录中,

echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /usr/java/redis_cluster/7001/redis.conf

5 配置redis7001.conf

include /usr/java/redis_cluster/redis.conf
port 7001
pidfile "/var/run/redis_7001.pid"
dbfilename "dump_7001.rdb"
dir "/usr/java/redis_cluster/7001"
logfile "/usr/java/redis_cluster/7001/redis_err_7001.log"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000

后台启动

6 启动这6个redis

root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_cluster/7001/redis.conf 
[root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_cluster/7002/redis.conf 
[root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_cluster/7003/redis.conf 
[root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_cluster/7004/redis.conf 
[root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_cluster/7005/redis.conf 
[root@localhost redis_cluster]# /usr/java/redis/bin/redis-server /usr/java/redis_

7 创建redis的集群

/usr/redis/bin/redis-cli --cluster create 192.168.159.34:7001 192.168.159.34:7002 192.168.159.34:7003 192.168.159.34:7004 192.168.159.34:7005 192.168.159.34:7006 --cluster-replicas 1

cluster-replicas 1

1其实代表的是一个比例,就是主节点数/从节点数的比例。那么想一想,在创建集群的时候,哪些节点是主节点呢?哪些节点是从节点呢?答案是将按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

8 使用cli连接redis集群

使用客户端链接集群 必须使用 -c 连接

/usr/java/redis/bin/redis-cli -c -h 192.168.159.34 -p 7002

查看集群的节点的信息 :cluster nodes

9 检查集群的状态

/usr/java/redis/bin/redis-cli --cluster check 192.168.159.34:7002

10 添加主节点

配置文件 7007 /redis.conf

启动

在添加之前首先要像7001-6一样,修改配置文件,启动7007 服务

/usr/java/redis/bin/redis-cli --cluster add-node 192.168.159.34:7007 192.168.159.34:7002

前面的IP加端口号是要添加的redis节点,后面的IP和端口号是集群中的任意一个节点。

检查节点的信息

redis-cli --cluster add-node 新节点 集群中的节点

刚才添加的主节点还没有分配槽,所以无法使用

添加从节点之前需要设置从节点并启动节点

--cluster-master-id 为从节点对应主节点的id

/usr/java/redis/bin/redis-cli --cluster add-node 192.168.159.34:7008 192.168.159.34:7002 --cluster-slave --cluster-master-id 67211a02cffe48ee7197092ca48e9e7294dc5961

可以随意分配数量

显示上图卡槽分配成功

批量添加

集群中进行批量添加

不允许

想添加

分组

{名字}

Mset k{u}  当设置了组名的时候分配槽的时候是根据组的名字分配的槽

删除从节点

删除主节点

测试集群

关闭7002

重启7002

重启之后变为从节点

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

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

相关文章

ES 分布式搜索的运行机制

ES 分布式搜索的运行机制-腾讯云开发者社区-腾讯云 ES 分布式搜索的运行机制 ES 有两种 search_type 即搜索类型: •query_then_fetch (默认)•dfs_query_then_fetch query_then_fetch query_then_fetch 1.用户发起搜索,请求…

Python的hashlib模块:7种加密算法深入剖析

目录 一、引言 二、哈希算法简介 三、hashlib模块中的加密算法 MD5 SHA1 SHA224/SHA256/SHA384/SHA512 SHA3 其他算法: 四、加密算法比较与选择 五、实际应用与注意事项 六、总结 本文将深入探讨Python的hashlib模块,重点解析其中的七种加密算…

【GitHub项目推荐--GitHub 上的高仿项目】【转载】

整理了现在比较热门 App 的高仿项目,这些项目都是有「recently updated」,而不是年代久远不再维护的项目。包括高仿微信、微博、B站、斗鱼、抖音、美团、头条、掘金等等。 这些项目涉及的技术栈有 Vue、Flutter 等等,看这些高仿项目的源码有…

element-ui 树形控件 实现点击某个节点获取本身节点和底下所有的子节点数据

1、需求&#xff1a;点击树形控件中的某个节点&#xff0c;需要拿到它本身和底下所有的子节点的id 1、树形控件代码 <el-tree:data"deptOptions"node-click"getVisitCheckedNodes"ref"target_tree_Speech"node-key"id":default-ex…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

PHP AES加密

PHP AES加密&#xff1a;保护数据安全的重要工具 在数字化时代&#xff0c;数据安全是一个至关重要的问题。随着互联网的普及和信息的快速传播&#xff0c;我们需要采取措施来保护敏感数据。PHP AES加密就是一个强大的工具&#xff0c;它可以帮助我们保护数据的机密性。本文将…

Vue3生命周期 VS Vue2生命周期(小记)

概念&#xff1a;Vue组件实例在创建时要经历一系列的初始化步骤&#xff0c;在此过程中Vue会在合适的时机&#xff0c;调用特定的函数&#xff0c;从而让开发者有机会在特定阶段运行自己的代码&#xff0c;这些特定的函数统称为&#xff1a;生命周期钩子。 规律&#xff1a; 生…

vue3 根据点击位置,实现一个用户头像弹框定位

vue3 根据点击位置&#xff0c;实现一个用户头像弹框定位 需求背景 最近在做直播后台&#xff0c;涉及到对用户的一些操作&#xff0c;比如关注/取关/禁言/踢出直播间。多个地方都要用&#xff0c;需要封装一个弹框组件 效果图 实现过程分析 根据点击元素&#xff0c;获取元…

HTML - 介绍

一.简介 HTML&#xff0c;超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。我们可以使用HTML建立自己的WEB网站或特定页面。HTML运行在浏览器上&#xff0c;由浏览器解析。 ⚠️注意&#xff1a;HTML文件的后缀…

node学习过程中的终端命令

冷的哥们手真tm冷&#xff0c;打字都是僵的&#xff0c;屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…

Clamp cell 介绍

Clamp cell&#xff08;夹持单元&#xff09;是芯片设计中用于限制电路中某个节点的电压范围的重要电路单元。它的主要目的是确保电路中的信号或电源电压不会超出安全范围&#xff0c;从而保护芯片免受潜在的损坏或性能问题。 电压限制&#xff1a; Clamp cell的主要功能之一是…

HashSet和LinkedHashSet的区别

HashSet和LinkedHashSet之间有什么区别 HashSet和LinkedHashSet都是Java中的集合类&#xff0c;它们都实现了Set接口&#xff0c;所以都具有Set的基本特性&#xff0c;即不包含重复的元素。但是&#xff0c;它们在元素的存储和迭代顺序上有一些区别。 存储方式&#xff1a;Ha…

燃烧的指针(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;c语言从基础到进阶 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于c语言的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x…

Centos 虚拟机安装

转自 气质&末雨的博客 Centos 虚拟机安装_centos虚拟机安装教程-CSDN博客

CentOS 7.9 OS Kernel Update 3.10 to 4.19

date: 2024-01-18, 2024-01-26 原 OS Kernel 3.10 升级至 4.19 1.检查默认内核 检查 vmlinuz 版本 [rootlocalhost ~]# grubby --default-kernel /boot/vmlinuz-3.10.0-1160.105.1.el7.x86_64 [rootlocalhost ~]#检查 Linux 内核版本 [rootlocalhost ~]# uname -a Linux loc…

Tree-Shaking 作用和实现原理

一、什么是Tree-shaking Tree-shaking 它的名字来源于通过摇晃&#xff08;shake&#xff09;JavaScript代码的抽象语法树&#xff08;AST&#xff09;&#xff0c;是一种用于优化JavaScript代码的技术&#xff0c;主要用于移除未被使用的代码&#xff0c;使得最终生成的代码包…

大模型应用开发:为产品创建一个AI客服/智能助手

欢迎阅读本系列文章&#xff01;我将带你一起探索如何使用OpenAI API来开发GPT大模型应用。无论你是编程新手还是资深开发者&#xff0c;都能在这里获得灵感和收获。 本文将继续展示AI助手的开发方式&#xff0c;在OpenAPI中它的名字是Assistants。 什么是Assistants&#xf…

Python网络爬虫实战——实验4:Python爬虫代理的使用

【实验内容】 本实验主要介绍在爬虫采集数据的过程中代理的使用。 【实验目的】 1、掌握代理使用的基本场景&#xff1b; 2、解决IP封锁问题&#xff1b; 3、提高爬虫访问效率&#xff1b; 【实验步骤】 步骤1选择代理服务提供商 步骤2配置爬虫使用代理 步骤3 采集数据生成…

Rust复合类型之元组

元组是一个有着固定&#xff08;元素&#xff09;长度的列表&#xff0c;每个元素的类型有可能是不同的。类型和元素都用小括号括起来&#xff0c;它们之间用逗号隔开。例如&#xff1a; fn main() { let itemname: (i32, f64, u8) (500, 6.4, 1); }元组可以使用.来访问其中的…

priority_queue模拟

文章目录 模拟priority_queue性质&#xff1a;成员函数&#xff1a;向上调整、向下调整push/pop/empty/top/size/empty成员变量 仿函数struct和class练习题堆的一些性质 模拟priority_queue 性质&#xff1a; 是容器适配器&#xff1b; 底层逻辑是堆&#xff0c;适配器是vect…