Redis集群搭建以及操作

Redis集群搭建以及操作

Redis集群

Redis可以分布式存储,集群
Redis最少需要三个节点,三个节点还需要备份
每个节点的地位都是平等的,每个都有连接
Redis 3.0以上做集群
通过hash slot(槽点)来分配,有16384个槽点(0-16384),平均分配到每个节点上,只有有槽点才能够存储数据,主节点处于工作的状态(槽点),从节点上面没有槽点,当主节点宕机,主节点会把槽点迁移从节点,然后从节点就变成主节点,继续集群的正常运行。

将数据进行crc16的算法,crc16(key)/16384=1545

数据是跟着槽点来走的。

搭建


[root@localhost ~]# tar -zxf redis-4.0.6.tar.gz -C /usr/src
[root@localhost ~]# mv /usr/src/redis-4.0.6/ /usr/local/redis
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# yum -y install gcc* make cmake
[root@localhost redis]# make && make install
[root@localhost redis]# vi redis.conf

在这里插入图片描述
在这里插入图片描述
创建集群文件

[root@localhost redis]# mkdir redis_cluster
[root@localhost redis]# cd redis_cluster/
[root@localhost redis_cluster]# mkdir {7000..7005}
[root@localhost redis_cluster]# ls
7000  7001  7002  7003  7004  7005
[root@localhost redis_cluster]# cp /usr/local/redis/redis.conf 7000/
[root@localhost redis_cluster]# vi 7000/redis.conf

配置文件内的#作为注释 不建议与配置同行 可以换行添加
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@localhost redis_cluster]# cd 7000/
[root@localhost 7000]# cp redis.conf ../7001
[root@localhost 7000]# cp redis.conf ../7002
[root@localhost 7000]# cp redis.conf ../7003
[root@localhost 7000]# cp redis.conf ../7004
[root@localhost 7000]# cp redis.conf ../7005
[root@localhost 7000]# sed -i "s/7000/7001/g" ../7001/redis.conf 
[root@localhost 7000]# sed -i "s/7000/7002/g" ../7002/redis.conf 
[root@localhost 7000]# sed -i "s/7000/7003/g" ../7003/redis.conf 
[root@localhost 7000]# sed -i "s/7000/7004/g" ../7004/redis.conf 
[root@localhost 7000]# sed -i "s/7000/7005/g" ../7005/redis.conf
[root@localhost 7000]# cat ../7001/redis.conf | grep 7001
port 7001
appendfilename "appendonly-7001.aof"   #aof持久化生成的文件
cluster-config-file nodes-7001.conf  #集群节点的配置文件
[root@localhost 7000]# cat ../7002/redis.conf | grep 7002
port 7002
appendfilename "appendonly-7002.aof"   #aof持久化生成的文件
cluster-config-file nodes-7002.conf  #集群节点的配置文件
[root@localhost 7000]# cat ../7003/redis.conf | grep 7003
port 7003
appendfilename "appendonly-7003.aof"   #aof持久化生成的文件
cluster-config-file nodes-7003.conf  #集群节点的配置文件
[root@localhost 7000]# cat ../7004/redis.conf | grep 7004
port 7004
appendfilename "appendonly-7004.aof"   #aof持久化生成的文件
cluster-config-file nodes-7004.conf  #集群节点的配置文件
[root@localhost 7000]# cat ../7005/redis.conf | grep 7005
port 7005
appendfilename "appendonly-7005.aof"   #aof持久化生成的文件
cluster-config-file nodes-7005.conf  #集群节点的配置文件

启动

[root@localhost redis_cluster]# redis-server 7000/redis.conf
[root@localhost redis_cluster]# redis-server 7001/redis.conf
[root@localhost redis_cluster]# redis-server 7002/redis.conf
[root@localhost redis_cluster]# redis-server 7003/redis.conf
[root@localhost redis_cluster]# redis-server 7004/redis.conf
[root@localhost redis_cluster]# redis-server 7005/redis.conf

在这里插入图片描述

[root@localhost redis_cluster]# ln -s /usr/local/redis/src/redis-trib.rb /usr/bin/
[root@localhost redis_cluster]# yum -y install ruby
[root@localhost ~]# ls
anaconda-ks.cfg  redis-3.3.0.gem  redis-4.0.6.tar.gz
[root@localhost ~]# gem install redis-3.3.0.gem 
Successfully installed redis-3.3.0
Parsing documentation for redis-3.3.0
Installing ri documentation for redis-3.3.0
1 gem installed

创建集群

[root@localhost ~]# redis-trib.rb create --replicas 1 192.168.1.80:7000 192.168.1.80:7001 192.168.1.80:7002 192.168.1.80:7003 192.168.1.80:7004 192.168.1.80:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.1.80:7000
192.168.1.80:7001
192.168.1.80:7002
Adding replica 192.168.1.80:7003 to 192.168.1.80:7000
Adding replica 192.168.1.80:7004 to 192.168.1.80:7001
Adding replica 192.168.1.80:7005 to 192.168.1.80:7002
M: 0346e92df4a532e42f4dbccadc754d260f474a9b 192.168.1.80:7000
   slots:0-5460 (5461 slots) master
M: 376598db2e01e17eeb36278fd3d7933ceb7e0570 192.168.1.80:7001
   slots:5461-10922 (5462 slots) master
M: e46f0a194a1393dd4f5f020683b093c54d3cbd56 192.168.1.80:7002
   slots:10923-16383 (5461 slots) master
S: 711093acffe39f4f1495e1abf8209f9c0f6ef33e 192.168.1.80:7003
   replicates 0346e92df4a532e42f4dbccadc754d260f474a9b
S: 79bf2c6bf3c95d886a451dc46c3095c1b199ac16 192.168.1.80:7004
   replicates 376598db2e01e17eeb36278fd3d7933ceb7e0570
S: 4c958bc1b24c7594d22587f5440a604445ea32c5 192.168.1.80:7005
   replicates e46f0a194a1393dd4f5f020683b093c54d3cbd56
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.80:7000)
M: 0346e92df4a532e42f4dbccadc754d260f474a9b 192.168.1.80:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: e46f0a194a1393dd4f5f020683b093c54d3cbd56 192.168.1.80:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 376598db2e01e17eeb36278fd3d7933ceb7e0570 192.168.1.80:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 711093acffe39f4f1495e1abf8209f9c0f6ef33e 192.168.1.80:7003
   slots: (0 slots) slave
   replicates 0346e92df4a532e42f4dbccadc754d260f474a9b
S: 79bf2c6bf3c95d886a451dc46c3095c1b199ac16 192.168.1.80:7004
   slots: (0 slots) slave
   replicates 376598db2e01e17eeb36278fd3d7933ceb7e0570
S: 4c958bc1b24c7594d22587f5440a604445ea32c5 192.168.1.80:7005
   slots: (0 slots) slave
   replicates e46f0a194a1393dd4f5f020683b093c54d3cbd56
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

Redis-trib.rb 命令字 选项参数
Create 创建集群
选项
–replicas 给主节点指定从节点的个数
Redshard 槽点重分配
Check 检查集群
Info集群信息
Add-node 添加节点,默认为主节点
Add-node的选项 –slave 添加从节点
Del-node 删除节点,如果需要删除的主节点,需要将主节点的槽点提前释放,然后进行槽点从分配

检测集群
在这里插入图片描述
尝试存储
在这里插入图片描述
添加节点
1 添加从节点

[root@localhost ~]# cd /usr/local/redis/redis_cluster/
[root@localhost redis_cluster]# mkdir 7006
[root@localhost redis_cluster]# cp 7000/redis.conf 7006/
[root@localhost redis_cluster]# sed -i "s/7000/7006/g" 7006/redis.conf 
[root@localhost redis_cluster]# redis-server 7006/redis.conf

在这里插入图片描述

[root@localhost redis_cluster]# redis-trib.rb add-node --slave --master-id 0346e92df4a532e42f4dbccadc754d260f474a9b 192.168.1.80:7006 192.168.1.80:7000

在这里插入图片描述
2 添加主节点

[root@localhost redis_cluster]# mkdir 7007
[root@localhost redis_cluster]# cp 7000/redis.conf 7007/
[root@localhost redis_cluster]# sed -i "s/7000/7007/g" 7007/redis.conf 
[root@localhost redis_cluster]# redis-server 7007/redis.conf 
[root@localhost redis_cluster]# redis-trib.rb add-node 192.168.1.80:7007 192.168.1.80:7000

在这里插入图片描述
槽点重分配

[root@localhost redis_cluster]# redis-trib.rb reshard 192.168.1.80:7000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3 删除节点

[root@localhost ~]# redis-trib.rb del-node 192.168.1.80:7000 4c958bc1b24c7594d22587f5440a604445ea32c5
>>> Removing node 4c958bc1b24c7594d22587f5440a604445ea32c5 from cluster 192.168.1.80:7000
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

在这里插入图片描述

Redis,是开源的key-value缓存框架,由c语言编写,数据完全存储在内存空间中,支持数据持久性,支持数据持久性,支持master-slave模式的数据备份。

Mysql和redis的区别:mysql是持久数据化存储,存储在磁盘当中,会涉及到一些io。存储速度会较慢。Redis存储数据在内存当中,大幅度的提高了大数量的web访问速度。
Mysql+redis就是一个内存+磁盘关系的映射,redis存储在内存中,mysql存储在磁盘中,这样的话,web每次访问redis如果没有数据就再去mysql读取数据,大大的提高了运行速度。

Php默认从redis索取缓存数据,只有redis过期或删除,php才会从数据库索求数据。

Redis的所有数据是保存在内存中,两种同步方式
半持久化模式:RDB(全量同步)
RDB是redis默认同步方式
不定期的通过异步方式保存到磁盘上,快照最终结果。
在恢复最大数据集时的速度比AOF的恢复速度要快。
全持久化模式:(增量同步)
把每一次数据变化都写入到一个aof里面
没有rdb同步的快,但采用了高并发机制,对系统内存要求高。

只保证最终数据一致性,使用于微博粉丝,秒杀,抢红包等场景,

Redistribution

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101773.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • hibernateTemplate update 只更新被修改字段

    hibernateTemplate update 只更新被修改字段如果你用hibernateTemplate操作数据库,感觉的确很省代码,一行代码解决数据库增改删查,但当你做到一个功能只更新一个字段,你就有点懵逼了,怎么试就是不行,总的就是下面的异常报错。当你用hibernateTemplate模板去update或者saveOrUpdate某个对象的时候发现报某字段不能为空的异常,而你的封装对象属性里却实做了某字段的修改,一时就蒙了。其实也不难发现,一…

  • goland激活码20213月最新在线激活

    goland激活码20213月最新在线激活,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • pycharm 2021.12.12激活码-激活码分享

    (pycharm 2021.12.12激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • lea 指令_lea指令的功能

    lea 指令_lea指令的功能leaw#2个字节leal#4个字节leaq#8个字节leabase_address(offset_address,index,size),%rax根据括号里的源操作数来计算地址,然后把地址加载到目标寄存器中。计算地址base_address+offset_address+index*size,然后把最终地址载到寄存器rax中。lea不引用源操作数里的寄存器,只是单…

    2022年10月29日
  • php表单加入Token防止重复提交的方法分析

    php表单加入Token防止重复提交的方法分析

    2021年10月18日
  • js读取本地json文件_jquery读取本地json文件

    js读取本地json文件_jquery读取本地json文件1.首先编写一个json文件:demo.json[{“name”:”张三”,”sex”:”男”,”email”:”zhangsan@123.com”},{“name”:”李四”,”sex”:”男”,”email”:”lisi@123.com”},{“name”:”王五”,”sex”:”女”,”email”:”wangwu@123.com…

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号