Redis(无中心化集群搭建)

文章目录

    • 1.无中心化集群
        • 1.基本介绍
        • 2.集群说明
    • 2.基本环境搭建
        • 1.部署规划(6台服务器)
        • 2.首先删除上次的rdb和aof文件(对之前的三台服务器都操作)
          • 1.首先分别登录命令行,关闭redis
          • 2.清除/root/下的rdb和aof文件
          • 3.把上次的哨兵也关闭
        • 3.对新增的三台机器Redis进行初始化
          • 1.安装Redis
            • 1.yum安装gcc
            • 2.查看gcc版本
            • 3.将redis6.2.6上传到/opt目录下
            • 4.进入/opt目录下然后解压
            • 5.进入 redis-6.2.6目录
            • 6.编译并安装
            • 7.进入 /usr/local/bin 查看是否有redis的命令
          • 2.启动并使用Redis
            • 1.进入 /opt/redis-6.2.6/
            • 2.将里面的redis.conf复制一份到/etc下
            • 3.编辑 /etc/redis.conf,将daemonize no修改成daemonize yes即以守护进程的方式启动(后台启动)
            • 4.启动redis,指定刚才的配置文件
            • 5.查看redis进程
          • 3.Redis基本配置
          • 编辑配置文件
            • 1.修改端口为7489 port 6379
            • 2.设置redis密码 requirepass foobared
            • 3.设置redis节点连接其他redis的密码 masterauth(与requirepass 一致即可)
            • 4.使redis支持远程访问 bind 127.0.0.1 -::1 和 protected-mode
            • 5.登录redis的命令行,关闭redis(此时配置文件未生效,所以端口还是6379)
            • 6.重新启动redis,使配置生效
          • 4.开启7489端口
            • 1.宝塔开启端口
            • 2.腾讯云开启端口(只允许本机ip访问,为了方便允许所有ipv4也行,因为配置了密码)
          • 5.Redis持久化配置
            • 1.进入redis配置文件
            • 2.dbfilename为redis持久化的文件名(一般不用改)
            • 3.dir ./ 修改为/root/则每次持久化的dump.rdb都会在/root/下,恢复时无论在哪里启动,都会读取这个文件进行恢复
            • 4.开启AOF持久化配置,编辑配置文件找到appendonly,设置成yes
            • 5.进入命令行关闭redis,需要指定端口,密码,命令
            • 6.重新启动redis,使配置生效
            • 7.发现/root/下面有个配置文件,如果没有dump.rdb是因为redis库中还没东西
          • 6.测试Java连接redis
            • 1.引入jedis的jar包
            • 2.编写测试程序
    • 3.Redis无中心化集群搭建
        • 1.前提条件
          • 1.确保六台服务器都按照前面的要求初始化了
        • 2.Redis集群单个节点配置(六个服务器都进行这个操作)
          • 1.都进入redis配置文件
          • 2.配置下面的三个东西,搜索 REDIS CLUSTER
          • 3.配置解释
          • 4.进行配置
          • 5.重启redis(在解决了下面的问题再重启)
          • 6.报错了(只有之前配置过了主从模式才会报错)
            • 1.原因是之前的主从模式导致了这行在配置文件中持久化了,而集群模式会与这个冲突,删除即可
            • 2.编辑配置文件,找到这行,删除即可
            • 3.再次启动redis,发现以集群模式启动了
          • 7.查看dir下是否生成对应节点文件
        • 3.将六个节点合成一个集群
          • 1.基本介绍
          • 2.合成指令
          • 3.执行报错 [ERR] Node NOAUTH Authentication required.
          • 4.添加一个--askpass参数,要求输入密码即可
          • 5.输入密码之后再输入yes
          • 6.一直在连接,原因是还需要开放总线端口就是redis的端口 + 10000
          • 7.六个服务器都要开放redis总线端口
            • 1.在宝塔开启redis总线端口7489 + 10000 = 17489
            • 2.在腾讯云开放17489端口
          • 8.重新执行命令创建集群,连接成功!如果想要查找是谁的从,就看replicates后面的字符跟Master对应
            • 1.示意图
            • 2.找出对应关系
          • 9.所以小结一下,创建集群的方式
            • 1.开放Redis的总线端口为 redis端口 + 10000
            • 2.创建集群指令
        • 4.集群方式登录
          • 1.登录并验证
          • 2.查看节点关系
          • 3.注意事项
        • 5.Redis插槽机制
          • 1.一个Redis集群中包含16384个插槽,编号为0-16383,
          • 2.集群使用公式CRC16(key)% 16384来计算键key属于哪个插槽,从而将其存放到不同的主机上,其中CRC16(key)计算的是key的校验和
          • 3.示意图
        • 6.在集群录入值
          • 1.首先确保登录时带的 -c参数实现自动重定向
            • 1.关于密码,第一种方式是直接在连接时指定
            • 2.第二种方式是连接后让他询问(推荐)
            • 3.如果不对密码进行设置,则每次切换到其他服务时都要重新输入密码
          • 2.录入数据则会触发插槽机制
          • 3.不在同一个slot下,是不能使用mget,mset等操作的
            • 1.演示
            • 2.解决方式:通过 {} 来定义组,从而使key中{}内相同内容的放到同一个slot中
        • 7.查询集群中的值
          • 1.返回key对应的插槽值
          • 2.返回插槽中有多少个key,注意,只能在该节点管理的slot范围内查找,否则为0
          • 3.返回count个slot槽中的键
        • 8.集群的故障恢复(注意15s超时,再观察)
          • 1.如果主节点down掉了,从节点自动升级为主节点
            • 1.关闭主节点
            • 2.查看节点状态,父节点down了,子节点自动升级
          • 2.如果主节点恢复了,就会降级为子节点
            • 1.启动 主节点
            • 2.再次查看节点状态,已经被降级
          • 3.如果主从节点都挂掉了(概率很低),可以配置服务是否继续
        • 9.集群的Jedis开发
          • 1.基本说明
          • 2.引入依赖
          • 3.代码演示
          • 4.结果展示(没有做日志配置,所以会爆红)
        • 10.Redis集群的优缺点
          • 1.优点
          • 2.缺点

1.无中心化集群

1.基本介绍

image-20240503101226535

2.集群说明

image-20240503101458363

2.基本环境搭建

1.部署规划(6台服务器)
2.首先删除上次的rdb和aof文件(对之前的三台服务器都操作)
1.首先分别登录命令行,关闭redis
/usr/local/bin/redis-cli -p 7489 -a **** shutdown
2.清除/root/下的rdb和aof文件
cd && rm -rf appendonly.aof && rm -rf dump.rdb

image-20240503112700757

3.把上次的哨兵也关闭

image-20240503112840000

3.对新增的三台机器Redis进行初始化
1.安装Redis
1.yum安装gcc
yum install gcc
2.查看gcc版本
gcc --version

image-20240502134411561

3.将redis6.2.6上传到/opt目录下

image-20240502134559769

4.进入/opt目录下然后解压
cd /opt && tar -zxvf redis-6.2.6.tar.gz

image-20240502134704827

5.进入 redis-6.2.6目录
cd redis-6.2.6

image-20240502134745310

6.编译并安装
make && make install

image-20240502134932117

7.进入 /usr/local/bin 查看是否有redis的命令
cd /usr/local/bin && ll

image-20240502135006749

2.启动并使用Redis
1.进入 /opt/redis-6.2.6/
cd /opt/redis-6.2.6/

image-20240502135103511

2.将里面的redis.conf复制一份到/etc下
cp redis.conf /etc/redis.conf

image-20240502135237138

3.编辑 /etc/redis.conf,将daemonize no修改成daemonize yes即以守护进程的方式启动(后台启动)
vim /etc/redis.conf

image-20240502135330240

4.启动redis,指定刚才的配置文件
/usr/local/bin/redis-server /etc/redis.conf
5.查看redis进程
ps -aux | grep redis

image-20240502135537103

3.Redis基本配置
编辑配置文件
vim /etc/redis.conf
1.修改端口为7489 port 6379

image-20240502135741587

2.设置redis密码 requirepass foobared

image-20240503115631730

image-20240503115724349

3.设置redis节点连接其他redis的密码 masterauth(与requirepass 一致即可)

image-20240503115843829

4.使redis支持远程访问 bind 127.0.0.1 -::1 和 protected-mode

image-20240502140044483

image-20240503120110957

5.登录redis的命令行,关闭redis(此时配置文件未生效,所以端口还是6379)
/usr/local/bin/redis-cli shutdown

image-20240503120329286

6.重新启动redis,使配置生效
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240502140612286

4.开启7489端口
1.宝塔开启端口
systemctl start firewalld && firewall-cmd --permanent --add-port=7489/tcp && firewall-cmd --reload && firewall-cmd --query-port=7489/tcp

image-20240502140719020

2.腾讯云开启端口(只允许本机ip访问,为了方便允许所有ipv4也行,因为配置了密码)

image-20240502143052618

5.Redis持久化配置
1.进入redis配置文件
vim /etc/redis.conf
2.dbfilename为redis持久化的文件名(一般不用改)

image-20240502141741998

3.dir ./ 修改为/root/则每次持久化的dump.rdb都会在/root/下,恢复时无论在哪里启动,都会读取这个文件进行恢复

image-20240502141833925

4.开启AOF持久化配置,编辑配置文件找到appendonly,设置成yes

image-20240502142032064

5.进入命令行关闭redis,需要指定端口,密码,命令
/usr/local/bin/redis-cli -p 7489 -a **** shutdown

image-20240502142252827

6.重新启动redis,使配置生效
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240502142304676

7.发现/root/下面有个配置文件,如果没有dump.rdb是因为redis库中还没东西

image-20240503120709268

6.测试Java连接redis
1.引入jedis的jar包

image-20240502143134966

2.编写测试程序
    public static void main(String[] args) {// 连接服务器的redis命令行Jedis jedis = new Jedis("你的redisip", 7489);// 如果redis设置了密码要先进行验证jedis.auth("******");String ping = jedis.ping();System.out.println(ping);}

image-20240503121018034

3.Redis无中心化集群搭建

1.前提条件
1.确保六台服务器都按照前面的要求初始化了
2.Redis集群单个节点配置(六个服务器都进行这个操作)
1.都进入redis配置文件
vim /etc/redis.conf
2.配置下面的三个东西,搜索 REDIS CLUSTER

image-20240503141140709

3.配置解释

image-20240503141256409

4.进行配置

image-20240503141353150

5.重启redis(在解决了下面的问题再重启)
/usr/local/bin/redis-cli -p 7489 -a **** shutdown && /usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis
6.报错了(只有之前配置过了主从模式才会报错)
1.原因是之前的主从模式导致了这行在配置文件中持久化了,而集群模式会与这个冲突,删除即可

2.编辑配置文件,找到这行,删除即可

3.再次启动redis,发现以集群模式启动了
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240503142933446

7.查看dir下是否生成对应节点文件
cd && ll

image-20240503143123893

3.将六个节点合成一个集群
1.基本介绍

image-20240503144146298

2.合成指令
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 *******
3.执行报错 [ERR] Node NOAUTH Authentication required.
4.添加一个–askpass参数,要求输入密码即可
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 --askpass **********
5.输入密码之后再输入yes

6.一直在连接,原因是还需要开放总线端口就是redis的端口 + 10000

image-20240503151641489

7.六个服务器都要开放redis总线端口
1.在宝塔开启redis总线端口7489 + 10000 = 17489
firewall-cmd --permanent --add-port=17489/tcp && firewall-cmd --reload && firewall-cmd --query-port=17489/tcp

image-20240503151939153

2.在腾讯云开放17489端口

image-20240503152147774

8.重新执行命令创建集群,连接成功!如果想要查找是谁的从,就看replicates后面的字符跟Master对应
1.示意图

2.找出对应关系
9.所以小结一下,创建集群的方式
1.开放Redis的总线端口为 redis端口 + 10000
2.创建集群指令
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 --askpass *****************
4.集群方式登录
1.登录并验证
redis-cli -c -p 7489

2.查看节点关系
cluster nodes
3.注意事项

image-20240503154050018

5.Redis插槽机制
1.一个Redis集群中包含16384个插槽,编号为0-16383,
2.集群使用公式CRC16(key)% 16384来计算键key属于哪个插槽,从而将其存放到不同的主机上,其中CRC16(key)计算的是key的校验和
3.示意图

image-20240503155044787

6.在集群录入值
1.首先确保登录时带的 -c参数实现自动重定向
1.关于密码,第一种方式是直接在连接时指定
redis-cli -c -p 7489 -a ****
2.第二种方式是连接后让他询问(推荐)
redis-cli -c -p 7489 --askpass
3.如果不对密码进行设置,则每次切换到其他服务时都要重新输入密码

2.录入数据则会触发插槽机制

3.不在同一个slot下,是不能使用mget,mset等操作的
1.演示

2.解决方式:通过 {} 来定义组,从而使key中{}内相同内容的放到同一个slot中

7.查询集群中的值
1.返回key对应的插槽值
cluster keyslot <key>
2.返回插槽中有多少个key,注意,只能在该节点管理的slot范围内查找,否则为0
cluster countkeysinslot <slotnum>
3.返回count个slot槽中的键
cluster getkeysinslot <slot> <count>
8.集群的故障恢复(注意15s超时,再观察)
1.如果主节点down掉了,从节点自动升级为主节点
1.关闭主节点
/usr/local/bin/redis-cli -p 7489 -a ***  shutdown
2.查看节点状态,父节点down了,子节点自动升级
cluster nodes
2.如果主节点恢复了,就会降级为子节点
1.启动 主节点
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240503162918117

2.再次查看节点状态,已经被降级
cluster nodes
3.如果主从节点都挂掉了(概率很低),可以配置服务是否继续

image-20240503163236187

9.集群的Jedis开发
1.基本说明

image-20240503163522983

2.引入依赖
    <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>
3.代码演示
    public static void main(String[] args) {Set<HostAndPort> hostAndPorts = new HashSet<HostAndPort>();// 添加集群节点,可以是多个,保证容错性hostAndPorts.add(new HostAndPort("", 7489));// 创建 JedisPoolConfig 并设置密码JedisPoolConfig poolConfig = new JedisPoolConfig();String password = ""; // 将 "你的密码" 替换为你的 Redis 密码// 创建 JedisCluster 对象时传入密码redis.clients.jedis.JedisCluster jedisCluster = new redis.clients.jedis.JedisCluster(hostAndPorts, 2000, 2000, 5, password, poolConfig);try {// 设置和获取值jedisCluster.set("k1", "v1");String k1 = jedisCluster.get("k1");System.out.println("k1=" + k1);} finally {// 确保在最后关闭 JedisCluster 来释放资源jedisCluster.close();}}
4.结果展示(没有做日志配置,所以会爆红)

image-20240503165131818

10.Redis集群的优缺点
1.优点

image-20240503165354885

2.缺点

image-20240503165448419

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

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

相关文章

大数据技术架构

一、hadoop 1、基础知识 1.1、概念 ①Hadoop集群特点&#xff1a;高可靠性、高效性、高可拓展性、高容错性、成本低、运行在Linux操作系统上、支持多种编程语言 ②Hadoop的由来&#xff1a; 谷歌的三驾马车对应的开源软件描述GFS&#xff1a;海量数据怎么存HDFS分布式文件…

Android系统 系统音量设置和修改

Android系统拥有多种声音属性&#xff0c;包括有多媒体、通话、通知等声音属性&#xff0c;这些声音属性分别含有自己默认音量、最大音量和最小音量属性。 博主是在Android10源码上修改的&#xff0c;其他版本可以自行搜索文件或者grep “关键字”&#xff0c;参考修改。 一&a…

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…

MySQL性能优化之参数配置

使用请根据自己服务器配置进行配置 [mysqld] #端口号 port 13306 server-id 1 #log-bin日志路径 log-binD:\Mysql-binlog\mysql-bin binlog-formatROW#设置日志保留天数 expire_logs_days7 #设置日志文件最大大小 max_binlog_size100M# innodb缓冲池大小 innodb_buffer_pool…

oracle 数据库找到UDUMP的文件名称

oracle 数据库找到UDUMP的文件名称 select p.value||\||i.instance_name||_ora_||spid||.trc as "trace_file_name" from v$parameter p ,v$process pro, v$session s, (select sid from v$mystat where rownum1) m, v$instance i where lower(p.name)user_dump_…

orbslam2基础

目录 一、 内容概要二、 orbslam2基础介绍三 、 orbslam2安装3.1 安装依赖3.2 安装orbslam23.3 下载Kitee数据集 四、 进行ORBSLAM2仿真五、 心得体会六、 参考链接 一、 内容概要 orbslam2基础介绍orbslam2安装orbslam2使用案例&#xff1a;orbslam2kitti数据集序列图像 二、…

maxpooling2d的C++细节实现

最大池化是一种常见的操作&#xff0c;用于减小输入特征图的大小并提取最显著的特征。PyTorch提供了torch.nn.functional.max_pool2d 函数来执行这个操作&#xff0c;如果不具备pytorch环境&#xff0c;可以通过C实现这个操作&#xff0c;更清楚地了解其原理&#xff1b; PyTo…

转发_重定向

1.Servlet/JSP单独使用的弊端 当我们用Servlet或者JSP单独处理请求的时候 Servlet&#xff1a;拼接大量的html字符串 造成可读性差、难以维护JSP&#xff1a;使得html和Java代码互相交织 也造成了可读性差、难以维护的后果 最合适的做法就是两者结合使用 2.ServletJSP处理请…

OpenCV4.9如何将失焦图片去模糊滤镜(67)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9的基于距离变换和分水岭算法的图像分割(66) 下一篇 :OpenCV4.9去运动模糊滤镜(68) 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是退化图像模型失焦图像的 PSF 是多少如何恢复…

【Linux调试器】:gdb的使用(常见指令)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux调试器gdb的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

消除模型盲区,让透明件身后模型无所遁形

使用SOLIDWORKS设计产品出工程图&#xff0c;当模型中存在透明零部件时&#xff0c;由于位置摆放可能会遮挡其他零件。 这会影响零件在工程图中展示装配关系。 通常我们会采用剖视图或改变视图方向来展示被遮挡的零件。 SOLIDWORKS 2023版本发布了工程图中透视透明的零部件功能…

BUG:conda: command not found解决方法

文章目录 报错信息解决方法 报错信息 conda: command not found解决方法 直接输入 source ~/.bashrc看看这时输入conda有没有显示。如果没有的话,输入 vim ~/.bashrc 输入i进入编辑模式。之后 export PATH$PATH:[你自己conda的安装目录]输入vim的保存命令&#xff1a; ES…

分布式锁讲解

概括 分布式锁是一种用于在分布式系统中实现同步机制的锁。在单机系统中&#xff0c;我们可以使用如Java中的synchronized关键字或者 ReentrantLock来实现线程间的同步&#xff0c;但在分布式系统中&#xff0c;由于多个节点&#xff08;服务器&#xff09;之间的并发操作&am…

hbase建表预分区的2种方法

以下案例建表并设置预分区,分别测试以下2种方法 1.固定散列 示例:rowkey以日期为前缀 create ‘test’,‘cf1’, SPLITS > [‘202401’, ‘202402’, ‘202403’] put ‘test’,‘20240101’,‘cf1:name’,‘20240101’ put ‘test’,‘20240102’,‘cf1:name’,‘2024010…

Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

CVPR2019https://github.com/XuecaiHu/Meta-SR-Pytorch 问题引入 首个解决任意尺度超分问题的模型&#xff0c;借鉴了meta-learning的思想&#xff1b;weight prediction strategy(meta-learning)&#xff1a;神经网络的权重是由另一个神经网络预测的&#xff0c;而不是通过从…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…

Cad图纸加密软件哪个最好用?成都企业都在用的透明加密软件是什么?

企业数据泄露事情频繁发生&#xff0c;为企业带来了不可计算机的经济损失&#xff0c;以及巨大的经营风险。在DT时代的到来&#xff0c;每一家企业的市场竞争本质上是知识产权的竞争&#xff0c;对于制造类企业来讲知识产权无疑是企业的cad图纸&#xff0c;制造类企业cad图纸的…

Java中常用类String的不可变性详解

Java中常用类String的不可变性详解 在Java编程中&#xff0c;String类是一个非常重要的基础类&#xff0c;它用于表示和操作字符串序列。然而&#xff0c;String类的一个核心特性是其不可变性&#xff08;immutable&#xff09;。这个特性在Java编程中有着重要的影响&#xff…

PXE批量部署,一键安装配置多台Linux系统

目录 一、PXE批量部署的优点 二、搭建PXE远程安装服务器 1. 实验初始化设置 2. 一键安装软件包 3. 复制 vmlinuz、initrd.img、pxelinux.0文件 4. 配置PE启动菜单配置文件 5. 修改配置文件&#xff0c; 启动各个软件服务 6. kickstart自动应答文件修改启动菜单配置文件…

【磁盘】用 gdisk 新增分区、删除分区

相关文章&#xff1a; 【Linux学习笔记16】磁盘的分区、格式化、检验与挂载(blkid、lsblk、UUID、parted查看分区的格式、lvm命令) 1. 用 gdisk 新增分区 如果你是按照鸟哥建议的方式去安装你的 CentOS 7&#xff0c;那么你的磁盘应该会预留一块容量来做练习的。如果没有的话…