Redis快速上手篇七(集群-六台虚拟机)

Redis集群

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

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

基本原理

哨兵选举机制,如果过半数节点发现某个异常节点,共同决定更改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。并能在被监视的主服务器下线时自动将下线主服务器下的某个从服务器升级为新的主服务器。

配置集群所需的环境

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

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。

学习可以采用伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号。

分布式集群搭建:

1.在安装目录下新建目录redis_cluster,文件夹下新建文件redis7001.conf

2. vim redis7001.conf

在不同的服务器 这个可以不要

cluster-config-file nodes-7006.conf 伪集群每个节点这个文件一样所以需要加这个

引入的配置文件为安装目录下的 redis.conf 文件复制过来

cp usr/local/bin/redis.conf /usr/local/bin/redis_cluster

include /usr/local/bin/redis_cluster/redis.conf #引入配置文件
port 7001 #端口设置
pidfile "/var/run/redis_7001.pid" #存放进程ID防止启动多个进程副本
dbfilename "dump_7001.rdb" #持久化文件名称
dir "/usr/local/bin/redis_cluster" #持久化保存位置
logfile "/usr/local/bin/redis_cluster/redis_err_7001.log"
cluster-enabled yes    #开启集群
cluster-config-file nodes-7001.conf #节点名称
cluster-node-timeout 15000 #节点过期时间

集群一般不设置密码

3.后台启动,查看启动是否正常

4.关闭 建议使用 shutdown 不要使用 kill杀死进程

一台虚拟机多个节点需要 -h 指定 IP

5.完整克隆第一台虚拟机五次(关机后在进行克隆)

6.启动六台虚拟机并修改 IP 与 .conf

/etc/sysconfig/network-scripts/ifcfg-ens32(这个数值看个人网卡)

/etc/sysconfig/network-scripts/ifcfg-ens+tab(自动补全)

vim /usr/local/bin/redis_cluster/redis7001.conf(文件名不用更改即可)

service network restart         修改网络配置后重启网络服务

(1)

vim /etc/sysconfig/network-scripts/ifcfg-ens32

克隆的五台虚拟机需要删掉此行 UUID

(2)

按esc通过vim 底行指令快速修改

vim /usr/local/bin/redis_cluster/redis7001.conf

cluster-node-timeout 15000        1会被修改

        :%s/7001/7002/g        不会修改 15000

五台克隆的虚拟机均进行以上操作

保证:(1)不在同一个ip

           (2)不在同一个端口启动

如图:

ip                                                                redis运行端口

192.168.253.16                                                7001

192.168.253.21                                                7002

192.168.253.22                                                7003

192.168.253.23                                                7004

192.168.253.24                                                7005

192.168.253.25                                                7006

7.在6个虚拟机分别启动redis

因为没有更改文件名称,可以直接去每个虚拟机粘贴执行即可

 /usr/local/bin/redis-server /usr/local/bin/redis_cluster/redis7001.conf 

ps -ef | grep redis 查看进程

8.创建redis集群

/usr/local/bin/redis-cli  --cluster create  192.168.253.16:7001 192.168.253.21:7002 192.168.253.22:7003 192.168.253.23:7004 192.168.253.24:7005 192.168.253.25:7006 --cluster-replicas 1

cluster-replicas 1

1其实代表的是一个比例,就是主节点数/从节点数的比例。会按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。

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

这里输入 yes        如下图创建集群成功

切记 先开启服务端在连接客户端

9.使用cli连接redis集群

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

/usr/local/bin/redis-cli -c -h 192.168.253.21 -p 7002

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

11.检查集群的状态

/usr/local/bin/redis-cli --cluster check 192.168.253.21:7002

12.添加主节点

新建虚拟机,配置 ip 与 .conf文件,与前六台配置一样。

例如 IP 192.168.253.26 redis服务端口 7007

启动服务后

/usr/local/bin/redis-cli --cluster add-node 192.168.253.26:7007 192.168.253.21:7002

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

13.配置从节点

新建虚拟机 配置 IP 与 端口

例如 IP 192.168.253.27 redis服务端口 7008

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

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

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

列: 添加刚才主节点的从节点

/usr/local/bin/redis-cli --cluster add-node 192.168.253.27:7008 192.168.253.26:7007 --cluster-slave --cluster-master-id 刚才添加的主节点的id

14.重新分配slots

添加的主节点还不能使用,因为没有分配slots,

slot的概念。slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读

/usr/local/bin/redis-cli --cluster reshard 192.168.253.21:7002(要移动插槽的IP)

然后再执行后的输入框 输入 接收插槽的IP的id

最后输入 all 或 done 

all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束

done 代表结束

15.删除主节点

--cluster del-node 节点id

删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以

/usr/local/bin/redis-cli --cluster del-node 节点IP:端口 节点id(要删除节点的slots要移动到的ip的id)

16.删除从节点

--cluster del-node 集群 节点id(要删除的从节点id)

/usr/java/redis/bin/redis-cli --cluster del-node 节点ip:端口 节点id(要删除的从节点id)

17.故障检测

验证集群是否生效

关闭一个主节点查看对应的备用节点是不是能够顶替主节点成为主节点

存/取数据的时候查看对应的端口号

(关闭主节点以后需要耐心等待一会儿 让他重新分配一下空间)

关闭的时候一定要使用shutdown命令不要使用kill命令

/usr/java/redis/bin/redis-cli -h 192.168.253.21 -p 7002 shutdown

关闭之后查看7006是否成为了主节点

7006变成了主节点 证明集群配置成功

下图为正常的

10-20秒左右查看集群状态发现 7006 已经成为主机,集群配置成功

主节点恢复后,主从关系会如何?主节点回来变成从机。

如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?

如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为yes ,那么 ,整个集群都挂掉

如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为no ,那么,该插槽数据全都不能使用,也无法存储。

redis.conf中的参数 cluster-require-full-coverage

什么是slots

[OK] All 16384 slots covered.

一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,

集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

name 2 [0-5460]

集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

节点 A 负责处理 0 号至 5460 号插槽。

节点 B 负责处理 5461 号至 10922 号插槽。

节点 C 负责处理 10923 号至 16383 号插槽。

在集群中录入值

在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。

redis-cli客户端提供了 –c 参数实现自动重定向。

如 redis-cli -c –p 7000登入后,再录入、查询键值对可以自动重定向。

不在一个slot下的键值,是不能使用mget,mset等多键操作。

可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。(按组分配插槽)

Redis 集群优点

实现扩容

分摊压力

无中心配置相对简单

Redis 集群的不足

多键操作是不被支持的

多键的Redis事务是不被支持的

由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

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

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

相关文章

C++中的std::cout与std::cerr、std::clog

本文用于记录C中std::cout与std::cerr、std::clog的异同 std::cerr 是C标准库中的标准错误输出流,用于向标准错误设备输出信息,通常用于报告程序的错误和异常情况。与之相对的,std::cout 是标准输出流,用于向标准输出设备输出一般…

金属压铸件自动化3D全尺寸测量设备自动外观检测三维检测-CASAIM

铸造作为现代装备制造工业的基础共性技术之一,铸件产品既是工业制造产品,也是大型机械的重要组成部分,被广泛运用在航空航天、工业船舶、机械电子和交通运输等行业。 铸件形状复杂,一般的三坐标或者卡尺圆规等工具难以获取多特征…

蓝牙 - BLE SPP实现举例 (Bluecode Protocol Stack)

这里以一个无线扫描枪设备为例,这个设备会通过蓝牙通讯协议连接一个底座,使用的是BLE SPP进行通讯。 扫描枪用来扫条码,解析出条码信息后,将数据通过无线传输给底座,底座再通过USB将数据传送给电脑。 底座是Central d…

C语言KR圣经笔记 2.8自增和自减 2.9位运算 2.10赋值

2.8 自增和自减操作符 C提供了两个不同寻常的操作符,用于对变量进行自增和自减。自增操作符对操作数加上1,而自减操作符 -- 对操作数减去1。我们已经频繁使用 对变量进行自增,如: if (c \n)nl; 不寻常之处在于 和 -- 既能用作…

如何将 ONLYOFFICE 桌面版编辑器 7.5 安装到 Red Hat、CentOS 及衍生产品上

使用桌面版的 ONLYOFFICE 在线编辑器,您可使用本地文件操作,无需保持互联网连接状态。 ONLYOFFICE 桌面编辑器是什么 ONLYOFFICE 桌面编辑器是一款全面的办公工具,提供了文本文档、电子表格、演示文稿、可填写表单和 PDF 查看和编辑功能。它…

百度富文本上传图片后样式崩塌

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 问题描述:上传图片后,图片会变得很大,当点击的时候更是会顶开整个的容器的高跟宽 原因&#…

mac 安装homebrew ,golang

mac 安装homebrew ,golang 安装homebrew安装golang选择 apple arm 版本安装配置环境变量 安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"回车执行指令后,根据提示操作。具体包括以下提示操作&am…

CXL技术交流群问题讨论记录(1)

🔥点击查看精选 CXL 系列文章🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/134131924】。…

Vue 的双向数据绑定是如何实现的?

目录 1. 响应式数据 2. v-model 指令 3. 实现原理 4. 总结 Vue.js 是一款流行的前端 JavaScript 框架,它以其强大的双向数据绑定能力而闻名。双向数据绑定使得数据在视图和模型之间保持同步,并且任一方的变化都会自动反映到另一方。那么,…

2016年亚太杯APMCM数学建模大赛B题化学元素对变形钢筋性能的影响求解全过程文档及程序

2016年亚太杯APMCM数学建模大赛 B题 化学元素对变形钢筋性能的影响 原题再现 热轧带肋钢筋通常被称为变形钢筋,它主要用于钢筋混凝土构件的骨架,在使用中需要一定的机械强度、弯曲和变形性能、制造焊接性。钢中的化学成分是影响热轧钢最终组织性能的基…

计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

reactos 可调试光盘映像

链接:https://pan.baidu.com/s/13M9BZN4IDrWLc3bjnHO79g?pwd0gst 提取码:0gst