前言:在前一章了解redis的基本介绍后,这一章主要介绍redis的实战部署,文章有点长请一步步耐心看完,我相信肯定会有收获的,这里用的资源包是2022年最新的redis版本可能会跟旧版本不同,在此章节中redis的集群搭建是在同一台服务器中部署,通过开放不同端口实现

目录

一、redis主从集群的搭建

二、哨兵模式的搭建

三、分片集群的搭建

什么是插槽

如何转移插槽

集群自动故障转移


一、redis的主从集群搭建

先把redis的配置文件放到/tmp/文件夹下 方便操作和管理 比较直观

然后就是修改配置了

[root@giant-fox redis-7.0.4]# cp redis.conf /tmp/

[root@giant-fox tmp]# cd /tmp/

[root@giant-fox tmp]# mkdir -p {7001,7002,7003}

[root@giant-fox tmp]# cp redis.conf 7001/redis.conf

[root@giant-fox tmp]# cp redis.conf 7002/redis.conf

[root@giant-fox tmp]# cp redis.conf 7003/redis.conf

修改每一个端口的配置

首先关闭AOF持久化存储 打开RDB持久化存储 在主从节点做全局同步的时候用的是RDB持久化存储 因此做上述操作

[root@giant-fox tmp]# sed -i '1a replica-announce-ip 192.168.1.11' 7001/redis.conf

# 这一步是在第一行加入此内容 表明IP地址防止发生混乱

[root@giant-fox tmp]# cat 7001/redis.conf

replica-announce-ip 192.168.1.11

将#127.0.0.1 注释掉

bind 0.0.0.0

protected-mode no

port 6379

daemonize yes

replicaof 192.168.1.11 6381 # 让6381 成为master节点

# save “”  看这个是否注释掉 注释掉说明开启RDB存储

databases 1

dir /tmp/7001/

appendonly no 关闭AOF存储

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

#分别cp到7002 7003 修改配置文件

[root@giant-fox tmp]# sed -i -e 's/6379/6380/g' -e 's/dir .\//dir \/tmp\/7002\//g' 7002/redis.conf

[root@giant-fox tmp]# sed -i -e 's/6379/6381/g' -e 's/dir .\//dir \/tmp\/7003\//g' 7003/redis.conf

#启动redis

[root@giant-fox tmp]# redis-server 7001/redis.conf

[root@giant-fox tmp]# redis-server 7002/redis.conf

[root@giant-fox tmp]# redis-server 7003/redis.conf

[root@giant-fox tmp]# ps -ef |grep redis

root     15923     1  0 Oct26 ?        00:01:14 redis-server 0.0.0.0:6380

root     15929     1  0 Oct26 ?        00:01:17 redis-server 0.0.0.0:6381

root     16415     1  0 01:03 ?        00:00:00 redis-server 0.0.0.0:6379

root     16421 16375  0 01:03 pts/3    00:00:00 grep --color=auto redis

查看 6381端口是否成为master节点以及验证主从是否同步

[root@giant-fox tmp]# redis-cli -p 6381

127.0.0.1:6381> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=192.168.1.11,port=6380,state=online,offset=260603,lag=0

slave1:ip=192.168.1.11,port=6379,state=online,offset=260603,lag=0

master_failover_state:no-failover

master_replid:d7c6ccbe29e7ebd60a5b575de1df5eb326e4c01f

master_replid2:f196d3b45fe3f7922201d7363b2b76851b9b9a43

master_repl_offset:260742

second_repl_offset:84228

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:15

repl_backlog_histlen:260728

127.0.0.1:6381> set name giantfox

OK

[root@giant-fox tmp]# redis-cli -p 6380

127.0.0.1:6380> get name

"giantfox"

OK 到此主从同步以及搭建完成 接一下搭建哨兵模式 监控整个集群

二、哨兵模式部署

先创建文件夹

[root@giant-fox tmp]# mkdir -p {27001,27002,27003}

[root@giant-fox tmp]# cat 27001/sentinel.conf

port 27001

#开放的端口

sentinel announce-ip "192.168.1.11"

#声明IP 防止发生混乱

sentinel monitor mymaster 192.168.1.11 6381 2

#监控集群 mymaster是集群的名字 后面是监控的集群的IP和端口 2是主观下线的依据 slave投票数超过2当前master就下线

sentinel down-after-milliseconds mymaster 5000

#master与slave断开链接时的超时时间

sentinel failover-timeout mymaster 60000

#宕机后故障恢复的超时时间 默认值就行

dir "/tmp/27001"

#目录

这里的sentinel配置文件可以copy过来 也可以自己写 比较简单

[root@giant-fox tmp]# cp 27001/sentinel.conf 27002/

[root@giant-fox tmp]# cp 27001/sentinel.conf 27003/

[root@giant-fox tmp]# sed -i -e 's/27001/27002/g' 27002/sentinel.conf

[root@giant-fox tmp]# sed -i -e 's/27001/27003/g' 27003/sentinel.conf

修改三个哨兵的端口

开启哨兵  哨兵是前端开启的 所以我们要打开三个窗口去观察

克隆窗口即可 然后在每个窗口开启不同端口的哨兵

[root@giant-fox tmp]# redis-sentinel 27001/sentinel.conf

[root@giant-fox tmp]# redis-sentinel 27002/sentinel.conf

[root@giant-fox tmp]# redis-sentinel 27003/sentinel.conf

开启成功

接一下模拟宕机 验证是否重新选择新的master

[root@giant-fox tmp]# ps -ef |grep redis

root     15923     1  0 Oct26 ?        00:01:16 redis-server 0.0.0.0:6380

root     15929     1  0 Oct26 ?        00:01:19 redis-server 0.0.0.0:6381

root     16415     1  0 01:03 ?        00:00:01 redis-server 0.0.0.0:6379

root     16451 16258  0 01:13 pts/0    00:00:00 redis-sentinel *:27001 [sentinel]

root     16457 16324  0 01:13 pts/1    00:00:00 redis-sentinel *:27002 [sentinel]

root     16463 16341  0 01:14 pts/2    00:00:00 redis-sentinel *:27003 [sentinel]

[root@giant-fox tmp]# kill -9 15929

16463:X 27 Oct 2022 01:14:47.609 # +switch-master mymaster 192.168.1.11 6381 192.168.1.11 6379

16463:X 27 Oct 2022 01:14:47.609 * +slave slave 192.168.1.11:6380 192.168.1.11 6380 @ mymaster 192.168.1.11 6379

16463:X 27 Oct 2022 01:14:47.609 * +slave slave 192.168.1.11:6381 192.168.1.11 6381 @ mymaster 192.168.1.11 6379

16463:X 27 Oct 2022 01:14:47.611 * Sentinel new configuration saved on disk

16463:X 27 Oct 2022 01:14:52.680 # +sdown slave 192.168.1.11:6381 192.168.1.11 6381 @ mymaster 192.168.1.11 6379

[root@giant-fox tmp]# redis-cli -p 6379

127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=192.168.1.11,port=6380,state=online,offset=356954,lag=0

master_failover_state:no-failover

master_replid:44b61d7519dc2471a43b75fad58cfa6e1330b7f5

master_replid2:d7c6ccbe29e7ebd60a5b575de1df5eb326e4c01f

master_repl_offset:357232

second_repl_offset:345450

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:231195

repl_backlog_histlen:126038

至此哨兵部署成功

三、分片集群的部署

这里需要先理解一下什么是分片集群

 在搭建分片集群之前需要把之前配置的环境删除掉

[root@giant-fox tmp]# ps -ef |grep redis

root     16488 16375  0 01:29 pts/3    00:00:00 grep --color=auto redis

跟之前一样,先创建文件夹

[root@giant-fox tmp]# mkdir -p {7001,7002,7003,8001,8002,8003}

[root@giant-fox tmp]# ls

7001  7002  7003  8001  8002  8003

[root@giant-fox 7001]# vim redis.conf

[root@giant-fox tmp]# cat 7001/redis.conf #这里的配置环境不一样

port 7001

cluster-enabled yes #默认是关闭的需要开启

cluster-config-file /tmp/7001/nodes.conf

cluster-node-timeout 5000

dir /tmp/7001

bind 0.0.0.0

daemonize yes

replica-announce-ip 192.168.1.11

protected-mode no

databases 1

logfile /tmp/7001/run.log

[root@giant-fox tmp]# cp 7001/redis.conf 7002/

[root@giant-fox tmp]# cp 7001/redis.conf 7003/

[root@giant-fox tmp]# cp 7001/redis.conf 8001/

[root@giant-fox tmp]# cp 7001/redis.conf 8002/

[root@giant-fox tmp]# cp 7001/redis.conf 8003/

[root@giant-fox tmp]# printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/7001/{}/g' {}/redis.conf

# 这里命令可以实现一键修改 很方便

sed -i s/7001/7001/g 7001/redis.conf

sed -i s/7001/7002/g 7002/redis.conf

sed -i s/7001/7003/g 7003/redis.conf

sed -i s/7001/8001/g 8001/redis.conf

sed -i s/7001/8002/g 8002/redis.conf

sed -i s/7001/8003/g 8003/redis.conf

#使用一键部署命令启动redis服务

[root@giant-fox tmp]# printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf

redis-server 7001/redis.conf

redis-server 7002/redis.conf

redis-server 7003/redis.conf

redis-server 8001/redis.conf

redis-server 8002/redis.conf

redis-server 8003/redis.conf

[root@giant-fox tmp]# ps -ef |grep redis

root     16609     1  0 01:46 ?        00:00:00 redis-server 0.0.0.0:7001 [cluster]

root     16628     1  0 01:48 ?        00:00:00 redis-server 0.0.0.0:7002 [cluster]

root     16630     1  0 01:48 ?        00:00:00 redis-server 0.0.0.0:7003 [cluster]

root     16632     1  0 01:48 ?        00:00:00 redis-server 0.0.0.0:8001 [cluster]

root     16646     1  0 01:48 ?        00:00:00 redis-server 0.0.0.0:8002 [cluster]

root     16652     1  0 01:48 ?        00:00:00 redis-server 0.0.0.0:8003 [cluster]

root     16658 16375  0 01:48 pts/3    00:00:00 grep --color=auto redis

#绑定我们的集群 可以通过redis-cli --cluster help 查看具体帮助

[root@giant-fox tmp]# redis-cli --cluster create --cluster-replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:8001 192.168.1.11:8002 192.168.1.11:7001 192.168.1.11:8003

>>> Performing hash slots allocation on 7 nodes...

Master[0] -> Slots 0 - 5460

Master[1] -> Slots 5461 - 10922

Master[2] -> Slots 10923 - 16383

Adding replica 192.168.1.11:8002 to 192.168.1.11:7001

Adding replica 192.168.1.11:7001 to 192.168.1.11:7002

Adding replica 192.168.1.11:8003 to 192.168.1.11:7003

Adding extra replicas...

Adding replica 192.168.1.11:8001 to 192.168.1.11:7001

>>> Trying to optimize slaves allocation for anti-affinity

[WARNING] Some slaves are in the same host as their master

M: 59ba851a2cb5328aef57173195e69feb3e1a6723 192.168.1.11:7001

slots:[0-5460] (5461 slots) master

M: 747408641dec3bb72142471e9b70ec64fa5627c4 192.168.1.11:7002

slots:[5461-10922] (5462 slots) master

M: d2e0edf0c32338cf51d275eb85b3c70a696ab524 192.168.1.11:7003

slots:[10923-16383] (5461 slots) master

S: 634792def7229bbdcca455fd7e0bbefb9a4b8f0e 192.168.1.11:8001

replicates d2e0edf0c32338cf51d275eb85b3c70a696ab524

S: 57d5a76bb12eba77460386ee2a6a279f17406336 192.168.1.11:8002

replicates 747408641dec3bb72142471e9b70ec64fa5627c4

S: 59ba851a2cb5328aef57173195e69feb3e1a6723 192.168.1.11:7001

replicates 59ba851a2cb5328aef57173195e69feb3e1a6723

S: 4179bbd0454246f65977959784a79831237f9768 192.168.1.11:8003

replicates 59ba851a2cb5328aef57173195e69feb3e1a6723

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join

.

>>> Performing Cluster Check (using node 192.168.1.11:7001)

M: 59ba851a2cb5328aef57173195e69feb3e1a6723 192.168.1.11:7001

slots:[0-5460] (5461 slots) master

1 additional replica(s)

S: 634792def7229bbdcca455fd7e0bbefb9a4b8f0e 192.168.1.11:8001

slots: (0 slots) slave

replicates d2e0edf0c32338cf51d275eb85b3c70a696ab524

M: 747408641dec3bb72142471e9b70ec64fa5627c4 192.168.1.11:7002

slots:[5461-10922] (5462 slots) master

1 additional replica(s)

S: 57d5a76bb12eba77460386ee2a6a279f17406336 192.168.1.11:8002

slots: (0 slots) slave

replicates 747408641dec3bb72142471e9b70ec64fa5627c4

S: 4179bbd0454246f65977959784a79831237f9768 192.168.1.11:8003

slots: (0 slots) slave

replicates 59ba851a2cb5328aef57173195e69feb3e1a6723

M: d2e0edf0c32338cf51d275eb85b3c70a696ab524 192.168.1.11:7003

slots:[10923-16383] (5461 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

可用通过 [root@giant-fox tmp]# redis-cli -p 7001 cluster nodes 查看集群信息 任意选择一个端口都可以查看

到这里集群的搭建已经完成了

插槽的概念

插槽是Redis对Key进行分片的单元。在Redis的集群实现中,内置了数据自动分片机
制,集群内部会将所有的key映射到16384个插槽中,集群中的每个数据库实例负责其中部
分的插槽的读写。Redis会将key的有效部分,使用CRC16算法计算出散列值,然后对16384取余数,从而把key分配到插槽中。

#插槽Key跟集群绑定

[root@giant-fox tmp]# redis-cli -c -p 7001

127.0.0.1:7001> set num 123

OK

127.0.0.1:7001> get num

"123"

127.0.0.1:7001> set a 1

-> Redirected to slot [15495] located at 192.168.1.11:7003

OK

192.168.1.11:7003> get num

#可以看到端口发生了变化 因为a的插槽在7003端口上

-> Redirected to slot [2765] located at 192.168.1.11:7001

"123"

#控制某一类实例控制在同意插槽当中

192.168.1.11:7001> set {a}num 11

-> Redirected to slot [15495] located at 192.168.1.11:7003

OK

将7004端口添加到集群当中

[root@giant-fox tmp]# mkdir 7004

[root@giant-fox tmp]# cp 7001/redis.conf 7004/

[root@giant-fox tmp]# sed -i 's/7001/7004/g' 7004/redis.conf

[root@giant-fox tmp]# redis-server 7004/redis.conf

[root@giant-fox tmp]# ps -ef |grep redis

root     16609     1  0 01:46 ?        00:00:01 redis-server 0.0.0.0:7001 [cluster]

root     16628     1  0 01:48 ?        00:00:01 redis-server 0.0.0.0:7002 [cluster]

root     16630     1  0 01:48 ?        00:00:01 redis-server 0.0.0.0:7003 [cluster]

root     16632     1  0 01:48 ?        00:00:01 redis-server 0.0.0.0:8001 [cluster]

root     16646     1  0 01:48 ?        00:00:01 redis-server 0.0.0.0:8002 [cluster]

root     16652     1  0 01:48 ?        00:00:01 redis-server 0.0.0.0:8003 [cluster]

root     16687     1  0 02:03 ?        00:00:00 redis-server 0.0.0.0:7004 [cluster]

[root@giant-fox tmp]# redis-cli cluster nodes

Could not connect to Redis at 127.0.0.1:6379: Connection refused

[root@giant-fox tmp]# redis-cli -p 7001 cluster nodes

634792def7229bbdcca455fd7e0bbefb9a4b8f0e 192.168.1.11:8001@18001 slave d2e0edf0c32338cf51d275eb85b3c70a696ab524 0 1666836369561 3 connected

747408641dec3bb72142471e9b70ec64fa5627c4 192.168.1.11:7002@17002 master - 0 1666836369561 2 connected 5461-10922

59ba851a2cb5328aef57173195e69feb3e1a6723 192.168.1.11:7001@17001 myself,master - 0 1666836369000 1 connected 0-5460

57d5a76bb12eba77460386ee2a6a279f17406336 192.168.1.11:8002@18002 slave 747408641dec3bb72142471e9b70ec64fa5627c4 0 1666836369561 2 connected

4179bbd0454246f65977959784a79831237f9768 192.168.1.11:8003@18003 slave 59ba851a2cb5328aef57173195e69feb3e1a6723 0 1666836369059 1 connected

619d436d000e4c80e33c8e4ebaaae484f5e41b49 192.168.1.11:7004@17004 master - 0 1666836370062 0 connected

d2e0edf0c32338cf51d275eb85b3c70a696ab524 192.168.1.11:7003@17003 master - 0 1666836370062 3 connected 10923-16383

添加成功

#插槽转移

[root@giant-fox tmp]# redis-cli --cluster reshard 192.168.1.11:7001

到此插槽转移成功 其中最下方是问你 需要转移多少插槽 你转移3000个 然后问你转移插槽的ID是哪个填上面7001端口的ID 接受的端口是7004端口的ID 最后done结束

总结: 到此redis的相关知识介绍完毕 如需要资料和资源包会在上一篇的末尾中获取希望大家学有收获

redis搭建主从哨兵模式+分片集群部署(redis系列二)相关推荐

  1. 缓存加速------Redis主从复制,哨兵模式,集群

    目录 前言 一.Redis主从复制 1.Redis主从复制概述 2.Redis主从复制作用 3.Redis主从复制流程 4.搭建Redis主从复制 ①环境准备 ②安装Redis ③修改Redis配置文 ...

  2. Redis 主从复制、哨兵模式、集群

    1.单机模式 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失. 缺点 单机故障,无法保证数据的安全 读写操作无法负载均 ...

  3. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part7(Redis常见使用(部署)方式:单机模式、主从模式、哨兵模式、集群模式)~整起

    Redis持久化:RDB.AOF是针对存储在一台服务器上的数据由于存储过程被打断而发生丢失的情况的.此时,咱们肯定要考虑到,所有鸡蛋都放在一个篮子里是会出问题的. 如果服务器发生了宕机,由于数据恢复是 ...

  4. Redis(主从复制、哨兵模式、集群)概述及部署

    Redis(主从复制.哨兵模式.集群)概述及部署 前言 一.主从复制 (1)主从复制原理 (2)主从复制作用 (3)主从复制流程 (4)搭建主从复制 ①修改master节点配置文件 ②修改Slave节 ...

  5. Redis哨兵模式及集群

    一.redis哨兵模式 哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移 1.哨兵模式的原理 哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 ...

  6. Redis数据库(三)——(主从复制、哨兵模式、集群)

    Redis数据库(三)--(主从复制.哨兵模式.集群) 一.Redis主从复制 1.Redis主从模式介绍 2.Redis主从复制的流程 3.Redis主从复制的作用 4.Redis主从复制的搭建 环 ...

  7. Linux企业化运维--(7)redis服务之redis配置及主从复制、主从自动切换、集群、redis+mysql、gearman实现数据同步

    Linux企业化运维 实验所用系统为Redhat-rhel7.6. 目录 Linux企业化运维 Linux企业化运维--(7)redis服务之redis配置及主从复制.主从自动切换.集群.redis+ ...

  8. Spark基础学习笔记05:搭建Spark Standalone模式的集群

    文章目录 零.本讲学习目标 一.Spark集群拓扑 (一)集群拓扑 (二)集群角色分配 二.搭建集群 (一)私有云上创建三台虚拟机 (二)利用SecureCRT登录三台虚拟机 1.登录master虚拟 ...

  9. Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署

    文章目录 Redis 下载地址 Redis 5.x 单节点 编译安装 Redis 启停 Redis Cluster 4.x VS Redis Cluster 5.x 演进之路 ( Master/Sla ...

最新文章

  1. Mysql 操作技巧
  2. web项目路径如何更改
  3. http响应协议分析
  4. window下eclipse搭建C/C++开发环境(超简单无需插件版) .
  5. (十三)算法设计思想之“动态规划”
  6. CentOS 7安装nginx+php+mysql环境
  7. 【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK
  8. 从Windows到鸿蒙——操作系统的前世今生
  9. synchronized的用法介绍
  10. Android学习之为按钮添加事件监听器的两种方法
  11. System.IndexOutOfRangeException: 无法找到表 0解决办法
  12. 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
  13. 快递公司type字典
  14. 10位Swift和iOS开发大师
  15. 关于ps的图片的批处理
  16. 跨站漏洞解析-小韩网站编程安全系列一
  17. 百万冲顶 获取复活币
  18. 多维联合正态分布代码matlab(以二维为例)
  19. 线性空间,线性子空间,基与维数
  20. 服务器微信了早上好,早上好微信问候语(精选50句)

热门文章

  1. # Java基础——IO流
  2. MYSQL 高级查询练习题 银行系统
  3. 神途boss_神途boss攻略
  4. 十大集成灶火星人电商销售7年蝉联桂冠,再战618战绩如何?拭目以待
  5. 万网域名解析设置方法
  6. 基于Springboot+VUE的智慧食堂设计与实现
  7. win10系统下duet display
  8. python图片压缩限定大小_Python练习小工具——照片压缩及自定义尺寸更改
  9. 极乐技术周报(第十九期)
  10. python数值积分_Python求解数值积分