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)
blank

相关推荐

  • 解决ORA-01008: 并非所有变量都已绑定(详解问题所在)

    解决ORA-01008: 并非所有变量都已绑定(详解问题所在)将executeUpdate(sql)或executeQuery(sql)括号中的sql删除。问题代码:publicstaticvoidmain(String[]args)throwsException{Connectionconnection=null;Statementstatement=null;connection=DBHelper.getConnection();Stringsql=”up

  • NHibernate详解

    NHibernate详解什么是NHibernate:       NHibernate是一个基于.Net的针对关系型数据库的对象持久化类库。Nhibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具。NHibernate从数据库底层来持久化你的.Net对象到关系型数据库。NHibernate为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,N

  • Linux系统定时任务「建议收藏」

    Linux系统定时任务定时任务CrondCrond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6linux操作系统之后,默认便会启动Crond任务调度服务。Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定…

  • 卸载npm和安装npm_使用`npm uninstall`卸载npm软件包「建议收藏」

    卸载npm和安装npmTouninstallapackageyouhavepreviouslyinstalledlocally(usingnpminstall<package-name>inthenode_modulesfolder,run要卸载以前在本地npminstall<package-name>(使用node_modul…

  • windows定时任务schtasks命令详细解

    SCHTASKS/Create[/Ssystem[/Uusername[/P[password]]]][/RUusername[/RPpassword]]/SCschedule[/MOmodifier][/Dday][/Mmonths][/Iidletime]/TNtaskname/TRtaskrun[/STstarttim…

  • BM3D 图像去噪

    BM3D 图像去噪BM3D图像去噪论文:Imagedenoisingbysparse3-Dtransform-domaincollaborativefiltering代码:python代码介绍:图像去噪算法:BM3D 加性噪声方程,其中噪声η\etaη常常用均值为0的高斯噪声近似表示: BM3D去噪算法结合了空间算法非局部去噪方法Non-localmethod,和转换算法transformmethod。算法主要分两步,每一步又分为三小步:相似块分组、协同滤波和聚合。.

发表回复

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

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