redis搭建主从哨兵模式+分片集群部署(redis系列二)
前言:在前一章了解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系列二)相关推荐
- 缓存加速------Redis主从复制,哨兵模式,集群
目录 前言 一.Redis主从复制 1.Redis主从复制概述 2.Redis主从复制作用 3.Redis主从复制流程 4.搭建Redis主从复制 ①环境准备 ②安装Redis ③修改Redis配置文 ...
- Redis 主从复制、哨兵模式、集群
1.单机模式 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失. 缺点 单机故障,无法保证数据的安全 读写操作无法负载均 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part7(Redis常见使用(部署)方式:单机模式、主从模式、哨兵模式、集群模式)~整起
Redis持久化:RDB.AOF是针对存储在一台服务器上的数据由于存储过程被打断而发生丢失的情况的.此时,咱们肯定要考虑到,所有鸡蛋都放在一个篮子里是会出问题的. 如果服务器发生了宕机,由于数据恢复是 ...
- Redis(主从复制、哨兵模式、集群)概述及部署
Redis(主从复制.哨兵模式.集群)概述及部署 前言 一.主从复制 (1)主从复制原理 (2)主从复制作用 (3)主从复制流程 (4)搭建主从复制 ①修改master节点配置文件 ②修改Slave节 ...
- Redis哨兵模式及集群
一.redis哨兵模式 哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移 1.哨兵模式的原理 哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 ...
- Redis数据库(三)——(主从复制、哨兵模式、集群)
Redis数据库(三)--(主从复制.哨兵模式.集群) 一.Redis主从复制 1.Redis主从模式介绍 2.Redis主从复制的流程 3.Redis主从复制的作用 4.Redis主从复制的搭建 环 ...
- Linux企业化运维--(7)redis服务之redis配置及主从复制、主从自动切换、集群、redis+mysql、gearman实现数据同步
Linux企业化运维 实验所用系统为Redhat-rhel7.6. 目录 Linux企业化运维 Linux企业化运维--(7)redis服务之redis配置及主从复制.主从自动切换.集群.redis+ ...
- Spark基础学习笔记05:搭建Spark Standalone模式的集群
文章目录 零.本讲学习目标 一.Spark集群拓扑 (一)集群拓扑 (二)集群角色分配 二.搭建集群 (一)私有云上创建三台虚拟机 (二)利用SecureCRT登录三台虚拟机 1.登录master虚拟 ...
- Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
文章目录 Redis 下载地址 Redis 5.x 单节点 编译安装 Redis 启停 Redis Cluster 4.x VS Redis Cluster 5.x 演进之路 ( Master/Sla ...
最新文章
- Mysql 操作技巧
- web项目路径如何更改
- http响应协议分析
- window下eclipse搭建C/C++开发环境(超简单无需插件版) .
- (十三)算法设计思想之“动态规划”
- CentOS 7安装nginx+php+mysql环境
- 【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK
- 从Windows到鸿蒙——操作系统的前世今生
- synchronized的用法介绍
- Android学习之为按钮添加事件监听器的两种方法
- System.IndexOutOfRangeException: 无法找到表 0解决办法
- 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
- 快递公司type字典
- 10位Swift和iOS开发大师
- 关于ps的图片的批处理
- 跨站漏洞解析-小韩网站编程安全系列一
- 百万冲顶 获取复活币
- 多维联合正态分布代码matlab(以二维为例)
- 线性空间,线性子空间,基与维数
- 服务器微信了早上好,早上好微信问候语(精选50句)