分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

这篇具有很好参考价值的文章主要介绍了分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

01.redis扩容
由于redis的容量也是有限的,所以,就会有扩容的操作。也就好像内存中扩容一样。redis有分片这种说法,具体实现操作如下:

第一步:首先在/usr/local/src中去找到redis文件夹。cd /usr/local/src 而后进入redis文件夹。使用的linux命令是 cd redis 。

第二步:
01.使用查看当前redis进程的命令ps -ef|grep redis,
ps 命令的作用是显示进程信息的;| 符号,是个管道符号,表示ps 和 grep 命令同时执行;ps命令有一些参数:
-e : 显示所有进程
-f : 全格式
-h : 不显示标题
-l : 长格式
-w : 宽输出
a :显示终端上的所有进程,包括其他用户的进程。
r :只显示正在运行的进程。
u :以用户为主的格式来显示程序状况。
x :显示所有程序,不以终端机来区分。

grep 命令是查找,能使用正则表达式搜索文本,然后把匹配的行显示出来;


02.并且关闭redis服务。使用命令redis-cli -p 6379 shoudown,6379是redis服务运行在Linux上的端口号
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第三步:搭建redis分片(这里的redis分片由三台redis服务器组成,端口号分别是6379,6380,6381)为了方便管理redis分片,在redis目录下创建一个新的文件夹shards,这个文件名shads和在springboot项目中使用redis分片对象的类名差不多。
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第四步:将redis的conf文件复制三份,文件名 分别是6379.conf,6380.conf,6381.conf
使用的linux命令是:cp 文件名 复制后新的文件
查看相关文件
cd shard
ls
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第五步:修改复制后文件的端口号,三个端口号表示这是三个redis服务器
分别修改6380.conf,6381.conf文件中的端口号,修改成6380,6381
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
vim 6380.conf
第92行修改redis的端口号

第六步:修改完成配置文件之后,去启动redis分片
启动redis服务的命令是 redis-server 端口号.conf
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第七步:启动之后去检查是否启动成功
先是检查redis的相关服务
再去启动redis的客户端(先启动了redis服务后,在打开客户端)
redis-cli -p 端口号.conf
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
在这里使用哨兵的时候,需要设定主从机,主机用来直接存储数据,从机用来同步保存主机的数据,主从机数据一致。
设计主从机使用linux命令:
slaveof ip port :使当前服务器临时成为某个实例的从服务器(重启Redis服务器后会失效)
步骤:
在相关的redis-server 启动后,打开redis-cli 客户端界面
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
info replication 查看redis服务器是主机还是从机,如果想要本机变成某个主机的从机,slaveof ip port :使当前服务器临时成为某个实例的从服务器(重启Redis服务器后会失效)
Redis入门案例

@SpringBootTest
public class TestRedisShards {
/**
* 由java程序远程操作redis分片,redis分片目的为了进行redis内存的扩容
* 组成redis分片的3台redis服务器存储的数据是不一样的,每个数据只能去选择一台redis进行数
据的存储
*/
@Test
public void test() {
List<JedisShardInfo> shards=new ArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo("192.168.126.129", 6379));
shards.add(new JedisShardInfo("192.168.126.129", 6380));
shards.add(new JedisShardInfo("192.168.126.129", 6381));
ShardedJedis jedis=new ShardedJedis(shards);
jedis.set("shards", "hello~shards");
System.out.println(jedis.get("shards"));
}
}

SpringBoot整合Redis分片
1编辑redis.properties配置文件

#配置redis分片
redis.shards=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

2编辑RedisConfig配置类

@Configuration
//执行代码的主体是jt-manage项目
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.shards}")
private String nodes;//node,node,node
//spring整合redis分片机制
@Bean
public ShardedJedis shardedJedis() {
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
String[] nodeArray = nodes.split(",");
for (String node : nodeArray) {//host:port
String host = node.split(":")[0];
int port=Integer.parseInt(node.split(":")[1]);
JedisShardInfo info =new JedisShardInfo(host, port);
shards.add(info);
}
return new ShardedJedis(shards);
}
}

3修改RedisAOP
说明:注入redis分片
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
缺点:
1.由于redis分片机制中的每台redis服务器存储的数据都不一致,而且没有实现高可用(故障自动迁移),所以最终很有可能造成一部分数据丢失。
2.组成redis分片机制中的任意一台redis如果宕机,会导致整个Redis分片崩溃。

02.预备redis宕机的哨兵处理
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第一步:复制哨兵的配置文件sentinel.conf文件到sentinel目录中。
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第二步:编辑sentinel.conf。
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

关闭保护模式:
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

开启后台启动:
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第三步:配置哨兵监听(sentinel.conf)
说明:哨兵所监听的主机ip(192.168.126.129) 端口号(6379) 以及票数(1)
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第四步:修改哨兵选举主机的时间 10s
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第五步:修改选举失败的超时时间 20s

分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第六步:退出编辑模式,保存退出。
linux命令 按esc
后使用:wq
第七步:启动redis哨兵
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
redis的哨兵入门案例

@SpringBootTest
public class TestRedisSentinel {
/**
*masterName:主机的变量名称mymaster
*sentinels:哨兵的集合
*/
@Test
public void test() {
Set<String> sentinels=new HashSet<>();
sentinels.add("192.168.126.129:26379");//IP:port
JedisSentinelPool pool=new JedisSentinelPool("mymaster", sentinels);
Jedis jedis = pool.getResource();
jedis.set("redisSerntinel", "HelloSentinel");
System.out.println(jedis.get("redisSerntinel"));
}
}

SpringBoot整合redis哨兵
01.编辑redis.properties配置文件

#配置redis哨兵
redis.sentinel=192.168.126.129:26379

端口号是26379
02.编辑RedisConfig.java文件

@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.sentinel}")
private String sentinel;
/**
* 核心思想:
* 1.动态的创建redis 哨兵的池对象
* 2.动态的从池中去jedis对象,实现数据的存储
*/
@Bean
public JedisSentinelPool jedisSentinelPool() {
Set<String> sentinels=new HashSet<>();
sentinels.add(sentinel);//一台哨兵
return new JedisSentinelPool("mymaster", sentinels);
}
@Bean
public Jedis jedis(JedisSentinelPool jedisSentinelPool) {
return jedisSentinelPool.getResource();
}
}

03.编辑RedisAOP.java
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

1.Redis哨兵机制中没有实现redis内存的扩容。
2.如果redis哨兵宕机会导致,整个Redis哨兵机制崩溃。

Redis集群
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第一步:将所有的redis服务都停掉
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第二步:为了集群,所以在redis目录中创建cluster目录分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第三步:进入cluster目录中,创建6个目录,分别为7000,7001,7002,7003,7004,7005
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
第四步:将redis目录下的redis.conf文件去到cluster目录下的7000目录复制一份。
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第五步:编辑7000目录中的配置文件
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
1.注释本地绑定ip注释掉:分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
2.关闭保护模
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
3.修改端口号
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

4.开启后台启动
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
5.修改pid文件路径
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
6.修改持久化文件路径分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

7.关闭aof持久化策略分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

8.开启集群配置
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

9.开启集群配置文件
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
10.设置集群超时时间,也就是当服务器连接不同时,过15s之后就开启高可用
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群11.退出编辑模式,保存退出
12.复制在7000目录中已经修改过的redis.conf文件到7001,7002,7003,7004,7005分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
13.分别对7001,7002,7003,7004,7005目录里面的redis.conf文件进行批量修改,批量修改的命令为:分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

14.进入cluster目录中,在cluster目录中创建一个启动脚本文件,命令为:vim start.sh,具体脚本中内容为:编辑完成之后保存退出
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

15.编辑关闭服务脚本文件,在cluster目录中先创建并编辑关闭脚本,命令为:vim stop.sh,脚本的内容分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

启动redis集群的节点,命令为

分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

集群搭建,命令为:

redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000
192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003
192.168.126.129:7004 192.168.126.129:7005

分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
然后输入yes!
集群搭建成功!
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群
slots:表示如果数据的key经过 hash函数后,取值落在slots表明的区间中的时候,存入相关的slots属于的redis服务器主机(master)。
分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

redis集群入门案例

@SpringBootTest
public class TestRedisCluster {
@Test
public void test() {
Set<HostAndPort> nodes=new HashSet<>();
nodes.add(new HostAndPort("192.168.126.129", 7000));
nodes.add(new HostAndPort("192.168.126.129", 7001));
nodes.add(new HostAndPort("192.168.126.129", 7002));
nodes.add(new HostAndPort("192.168.126.129", 7003));
nodes.add(new HostAndPort("192.168.126.129", 7004));
nodes.add(new HostAndPort("192.168.126.129", 7005));
JedisCluster jedisCluster=new JedisCluster(nodes);
jedisCluster.set("cluster", "redisCluster~");
System.out.println(jedisCluster.get("cluster"));
}
}

SpringBoot整合Redis集群
第一步:编辑redis.properties文件

#配置redis集群
redis.cluster=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192
.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005

第二步:编辑RedisConfig.java文件

@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.cluster}")
private String nodes;//node,node,node,node,node,node
/**
* 配置redis集群
* 操作集群的工具API对象:JedisCluster
*/
@Bean

public JedisCluster jedisCluster() {
Set<HostAndPort> setNodes=new HashSet<>();
String[] arrayNodes = nodes.split(",");
for (String node : arrayNodes) {//node=ip:port
String host=node.split(":")[0];
int port=Integer.parseInt(node.split(":")[1]);
HostAndPort hostAndPort=new HostAndPort(host, port);
setNodes.add(hostAndPort);
}
return new JedisCluster(setNodes);
}
}

第三步:修改RedisAOP分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群文章来源地址https://www.toymoban.com/news/detail-450332.html

到了这里,关于分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • tim实践系列——分布式数据存储与动态数据库扩容

    tim实践系列——分布式数据存储与动态数据库扩容

    前言: tim是去中心化分布式即时通讯引擎。不依赖于任何中心服务器,采用去中心化分布式架构,解决传统中心化通讯方式的问题,去中心化分布式架构的通讯引擎的各个节点之间相互连接,形成一个庞大的分布式网络。可以轻松地扩展服务规模,支持更多的用户和业务需求

    2024年02月02日
    浏览(10)
  • 08-微服务Seata分布式事务使用

    08-微服务Seata分布式事务使用

    一、分布式事务简介 事务ACID: A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。 C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转100元, 转账前和转账后的

    2024年01月24日
    浏览(14)
  • 开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)

    开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)

    为什么说是伪微服务框架,常见微服务框架可能还包括服务容错、服务间的通信、服务追踪和监控、服务注册和发现等等,而我这里为了在使用中的更简单,将很多东西进行了简化或者省略了。 年前到现在在开发一个新的小项目,刚好项目最初的很多功能是比较通用的,所以

    2024年03月09日
    浏览(12)
  • 聊聊分布式架构08——SpringBoot开启微服务时代

    聊聊分布式架构08——SpringBoot开启微服务时代

    目录 微服务架构时代 快速入门 入门详解 SpringBoot的自动配置 石器时代:XML配置bean 青铜时代:SpringConfig 铁器时代:AutoConfigurationImportSelector 手写简单Starter SpringApplication启动原理 微服务架构时代 Spring Boot的出现与微服务架构有关,它是Spring Framework的一部分,旨在简化开发独

    2024年02月06日
    浏览(11)
  • scrapy框架核心知识Spider,Middleware,Item Pipeline,scrapy项目创建与启动,Scrapy-redis与分布式

    scrapy框架核心知识Spider,Middleware,Item Pipeline,scrapy项目创建与启动,Scrapy-redis与分布式

    在你的工作目录下直接使用命令: 运行后创建了一个名为scrapytutorial的爬虫工程 在爬虫工程文件内,运行以下命令: 创建了名为quotes的爬虫 修改爬虫代码,实现自己想要的爬虫逻辑 在爬虫项目目录下,运行: 即可运行爬虫 在scrapy中,网站的 链接配置 , 抓取逻辑 , 解析逻辑

    2024年01月25日
    浏览(16)
  • Redis与分布式-分布式锁

    Redis与分布式-分布式锁

    接上文 Redis与分布式-集群搭建 为了解决上述问题,可以利用分布式锁来实现。 重新复制一份redis,配置文件都是刚下载时候的不用更改,然后启动redis服务和redis客户。 redis存在这样的命令:和set命令差不多,但是它有一个机制,当指定的key不存在的时候,才能进行插入,实

    2024年02月07日
    浏览(16)
  • Redis分布式锁和分布式事务

    Redis分布式锁和分布式事务 一、Redis分布式锁 1.1 watch和事务实现分布式锁 原理是通过watch来观察一个变量,一个线程在操作的时候,其他线程会操作失败,相当于乐观锁。 1.2 setnx实现分布式锁 原理是通过setnx设置一个变量,设置成功的线程抢到锁,执行相关的业务,执行完毕

    2024年02月09日
    浏览(12)
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记08_自黑与放大

    读发布!设计与部署稳定的分布式系统(第2版)笔记08_自黑与放大

    1.5.4.1. 锁管理器资源只有一个,随着网站横向扩展,锁管理器会成为瓶颈,并且最终会成为风险 1.5.4.2. 如果一个热门项目被无意修改,最终就可能会导致数以百计的服务器上出现数千个请求处理的线程,都在排队等待该项目的写入锁 5.7.1.1. 广播能够应对服务器数量的不断

    2024年02月10日
    浏览(27)
  • 【redis】redis分布式锁

    一、为什么需要分布式锁 1.在java单机服务中,jvm内部有一个全局的锁监视器,只有一个线程能获取到锁,可以实现线程之间的互斥 2.当有多个java服务时,会有多个jvm,也会有多个锁监视器,这样没办法使得多个jvm之间的线程互斥,所以无法使用jvm内部的锁监视器,也就是s

    2023年04月25日
    浏览(9)
  • 分布式锁实现(mysql,以及redis)以及分布式的概念

    分布式锁实现(mysql,以及redis)以及分布式的概念

    我旁边的一位老哥跟我说,你知道分布式是是用来干什么的嘛?一句话给我干懵了,我能隐含知道,大概是用来做分压处理的,并增加系统稳定性的。但是具体如何,我却道不出个1,2,3。现在就将这些做一个详细的总结。至少以后碰到面试官可以说上个123。 那么就正式进入

    2024年01月21日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包