Redis集群
1 | 老男孩的https: //www .jianshu.com /p/2f93bb771469 |
Redis配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #masterauth aaaa #slave连上master时用的密码 #requirepass aaaa #连上数据库后,使用auth认证密码后才能使用 bind 192.168.1.236 #绑定地址 protected-mode yes #保护模式,当没有设置密码和绑定地址时,只能从本机连入 port 7000 #端口 timeout 0 #超时时间,默认为0,不超时 tcp-keepalive 300 #定时发送ack检测存活状态 daemonize yes #在后台执行 pidfile /var/run/redis_7000 .pid #pid文件 loglevel notice #日志级别 logfile "/usr/nacp/cluster/7000/redis7000.log" #日志文件路径 databases 16 #数据库数量 dbfilename dump7000.rdb #数据库文件名 appendfilename appendonly.aof #aof文件名 dir /usr/nacp/cluster/7000/ #数据存放目录,rdb和aof文件会存在这 cluster-enabled yes #开启集群模式 cluster-config- file nodes-7000.conf #集群模式配置文件 save 900 1 #900秒内至少1个key值改变,将持久化存储 save 300 10 #300秒内至少10个key值改变,将持久化存储 save 60 10000 #60秒内至少10000个key值改变,将持久化存储 |
Redis集群
5.0版本之前的集群需要ruby环境的支持,貌似5.0使用redis-cli就可以直接创建了
1.安装这个需要gcc环境和ruby环境,找了好多教程,看到很多都是卡在搞环境上,不过我没有遇到,系统我用的centos7.x,这些环境在安装光盘上都有,把yum源指向光盘就可以直接yum安装了。
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost redis] # mount /dev/cdrom /mnt [root@localhost redis] # vim /etc/yum.repos.d/CentOS-Media.repo [c7-media] name=CentOS-$releasever - Media baseurl= file : ///mnt gpgcheck=1 enabled=1 gpgkey= file : ///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@localhost redis] # yum clean all [root@localhost redis] # yum install gcc ruby -y |
2.创建redis目录,官网下载redis归档包,上传至服务器,解压后编译、安装
1 2 3 4 5 | [root@localhost redis] # mkdir /root/redis [root@localhost redis] # cd /root/redis [root@localhost redis] # tar xvf redis-3.2.7.tar.gz [root@localhost redis] # cd redis-3.2.7 [root@localhost redis] # make && make install |
3.创建配置文件
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost redis] # vim redis.conf port 7001 #端口 bind 0.0.0.0 #绑定地址,默认是127.0.0.1,这里要改一下 daemonize yes #后台运行 logfile /opt/redis_cluster/7001/redis7001 .log pidfile /opt/redis_cluster/7001/redis7001 .pid dir /opt/redis_cluster/7001/data dbfilename redis7001.rdb cluster-enabled yes #开启集群模式 cluster-config- file node_7001.conf #集群配置文件 cluster-node-timeout 15000 #集群通讯超时时间 |
4.创建最少三个文件夹来组成集群,我这里创建了9个,可以组成3主对应6备,并将配置文件对应修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@localhost redis] # tree * 7001 └── redis.conf 7002 └── redis.conf 7003 └── redis.conf 7004 └── redis.conf 7005 └── redis.conf 7006 └── redis.conf 8004 └── redis.conf 8005 └── redis.conf 8006 └── redis.conf |
5.启动这些实例
1 | [root@localhost redis] # redis-server redis.conf |
5.1手动命令添加集群节点CLUSTER MEET {IP} {PORT}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 10.0.0.51:6380> CLUSTER MEET 10.0.0.51 6381 OK 10.0.0.51:6380> CLUSTER MEET 10.0.0.52 6380 OK 10.0.0.51:6380> CLUSTER MEET 10.0.0.53 6380 OK 10.0.0.51:6380> CLUSTER MEET 10.0.0.52 6381 OK 10.0.0.51:6380> CLUSTER MEET 10.0.0.53 6381 OK 10.0.0.51:6380> CLUSTER NODES d03cb38d612802aead8f727b1726a3359c241818 10.0.0.51:6380 myself,master - 0 0 4 connected 67c8128df00b2fa304a41bafbadac25a654f196d 10.0.0.51:6381 master - 0 1562059947079 1 connected a23ec7d444791a0b258ac454ef15cb4d6ab5abd2 10.0.0.53:6381 master - 0 1562059948087 5 connected e57807d4d35daaaca05f4a9705e844eab15c7ce8 10.0.0.52:6381 master - 0 1562059949098 0 connected aa9da67a594dfb357195f12ca4c44001804ee470 10.0.0.53:6380 master - 0 1562059945063 3 connected 5cb6895305520e6a0aa4198a6ea5f2c087530b41 10.0.0.52:6380 master - 0 1562059950108 2 connected |
6.到https://rubygems.org/gems/redis下载对应redis版本的集群插件
7.把插件上传服务器后,使用gem安装
1 | [root@localhost redis] # gem install redis-3.2.2.gem |
8.在redis归档包中src目录下有集群工具redis-trib.rb,使用这个工具可以创建集群,--replicas 2的意思是1个主节点需要有2个备份
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | [root@localhost redis] # ./redis-trib.rb create --replicas 2 \ 192.168.65.128:7001 192.168.65.128:7002 \ 192.168.65.128:7003 192.168.65.129:7004 \ 192.168.65.129:7005 192.168.65.129:7006 \ 192.168.65.129:8004 192.168.65.129:8005 \ 192.168.65.129:8006 >>> Creating cluster >>> Performing hash slots allocation on 9 nodes... Using 3 masters: 192.168.65.128:7001 192.168.65.129:7004 192.168.65.128:7002 Adding replica 192.168.65.129:7005 to 192.168.65.128:7001 Adding replica 192.168.65.129:7006 to 192.168.65.128:7001 Adding replica 192.168.65.128:7003 to 192.168.65.129:7004 Adding replica 192.168.65.129:8004 to 192.168.65.129:7004 Adding replica 192.168.65.129:8005 to 192.168.65.128:7002 Adding replica 192.168.65.129:8006 to 192.168.65.128:7002 M: b40d90617e8269632403e51753309e28f8209267 192.168.65.128:7001 slots:0-5460 (5461 slots) master M: 95cb7c567dca107d98dc3da90623d5e53f742962 192.168.65.128:7002 slots:10923-16383 (5461 slots) master S: 15044ef928cce6ced4774477bc83a430765f0d0f 192.168.65.128:7003 replicates 78941d9a55b406b4d88935cac50661972ff3ff5e M: 78941d9a55b406b4d88935cac50661972ff3ff5e 192.168.65.129:7004 slots:5461-10922 (5462 slots) master S: b8d0811e374f76db231bbd754f4a0be5507a7ba7 192.168.65.129:7005 replicates b40d90617e8269632403e51753309e28f8209267 S: bf7e1cc93311439e6eaa5657322055fa9a4c84c9 192.168.65.129:7006 replicates b40d90617e8269632403e51753309e28f8209267 S: 1a2942513aa21d00610938d9372329e0d3f4e069 192.168.65.129:8004 replicates 78941d9a55b406b4d88935cac50661972ff3ff5e S: 73d08918a9b88e5d7b2582a1603d47a9edd08c31 192.168.65.129:8005 replicates 95cb7c567dca107d98dc3da90623d5e53f742962 S: 28f6ba0997a3e83f36af7a6b0056c65d6f594fc8 192.168.65.129:8006 replicates 95cb7c567dca107d98dc3da90623d5e53f742962 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.65.128:7001) M: b40d90617e8269632403e51753309e28f8209267 192.168.65.128:7001 slots:0-5460 (5461 slots) master 2 additional replica(s) S: b8d0811e374f76db231bbd754f4a0be5507a7ba7 192.168.65.129:7005 slots: (0 slots) slave replicates b40d90617e8269632403e51753309e28f8209267 S: 15044ef928cce6ced4774477bc83a430765f0d0f 192.168.65.128:7003 slots: (0 slots) slave replicates 78941d9a55b406b4d88935cac50661972ff3ff5e S: 1a2942513aa21d00610938d9372329e0d3f4e069 192.168.65.129:8004 slots: (0 slots) slave replicates 78941d9a55b406b4d88935cac50661972ff3ff5e S: 73d08918a9b88e5d7b2582a1603d47a9edd08c31 192.168.65.129:8005 slots: (0 slots) slave replicates 95cb7c567dca107d98dc3da90623d5e53f742962 S: bf7e1cc93311439e6eaa5657322055fa9a4c84c9 192.168.65.129:7006 slots: (0 slots) slave replicates b40d90617e8269632403e51753309e28f8209267 S: 28f6ba0997a3e83f36af7a6b0056c65d6f594fc8 192.168.65.129:8006 slots: (0 slots) slave replicates 95cb7c567dca107d98dc3da90623d5e53f742962 M: 78941d9a55b406b4d88935cac50661972ff3ff5e 192.168.65.129:7004 slots:5461-10922 (5462 slots) master 2 additional replica(s) M: 95cb7c567dca107d98dc3da90623d5e53f742962 192.168.65.128:7002 slots:10923-16383 (5461 slots) master 2 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. |
9.检查集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [root@localhost redis] # ./redis-trib.rb check 127.0.0.1:7001 >>> Performing Cluster Check (using node 127.0.0.1:7001) M: b40d90617e8269632403e51753309e28f8209267 127.0.0.1:7001 slots:0-5460 (5461 slots) master 2 additional replica(s) S: b8d0811e374f76db231bbd754f4a0be5507a7ba7 192.168.65.129:7005 slots: (0 slots) slave replicates b40d90617e8269632403e51753309e28f8209267 S: 15044ef928cce6ced4774477bc83a430765f0d0f 192.168.65.128:7003 slots: (0 slots) slave replicates 78941d9a55b406b4d88935cac50661972ff3ff5e S: 1a2942513aa21d00610938d9372329e0d3f4e069 192.168.65.129:8004 slots: (0 slots) slave replicates 78941d9a55b406b4d88935cac50661972ff3ff5e S: 73d08918a9b88e5d7b2582a1603d47a9edd08c31 192.168.65.129:8005 slots: (0 slots) slave replicates 95cb7c567dca107d98dc3da90623d5e53f742962 S: bf7e1cc93311439e6eaa5657322055fa9a4c84c9 192.168.65.129:7006 slots: (0 slots) slave replicates b40d90617e8269632403e51753309e28f8209267 S: 28f6ba0997a3e83f36af7a6b0056c65d6f594fc8 192.168.65.129:8006 slots: (0 slots) slave replicates 95cb7c567dca107d98dc3da90623d5e53f742962 M: 78941d9a55b406b4d88935cac50661972ff3ff5e 192.168.65.129:7004 slots:5461-10922 (5462 slots) master 2 additional replica(s) M: 95cb7c567dca107d98dc3da90623d5e53f742962 192.168.65.128:7002 slots:10923-16383 (5461 slots) master 2 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. |
进入集群内任意节点可以使用cluster nodes查看节点状态
问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #当创建集群的时候,出现无法连接节点 [root@bogon js] # /usr/nacp/redis-3.2.7/src/redis-trib.rb create --replicas 1 192.168.1.225:7031 192.168.1.225:7032 192.168.1.225:7033 192.168.1.225:7034 192.168.1.225:7035 >>> Creating cluster [ERR] Sorry, can't connect to node 192.168.1.225:7031 #问题可能出现在下面几个点 1.服务没有开启----开启服务 2.服务绑定的地址和创建集群给的地址不一致------查看配置文件中的bind 3.集群带有密码-----查看配置文件中的requirepass 4.之前的集群带有密码,下面这个文件你更改过下面文件的:password => nil, /usr/local/lib/ruby/gems/2 .3.0 /gems/redis-3 .3.0 /lib/redis/client .rb 或者在这 /usr/local/share/gems/gems/redis-3 .2.2 /lib/redis/client .rb 可以用 find / -name client.rb找这个文件在哪 过了很久之后,集群的密码你不需要了,集群的配置文件你给改了,但是ruby的配置文件没改 |
扩容
1 2 3 4 5 6 7 8 9 10 11 12 | #需要先准备好扩容的节点 ] # ./redis-trib.rb add-node 新节点IP:端口 已经存在的节点IP:端口 ] # ./redis-trib.rb reshard 集群节点IP:端口 #打印出进群每个节点信息后,reshard命令需要确认迁移的槽数量,这里我们输入4096个 #(一共有16384个节点0-16383,这里需要写16383/主节点个数取整): How many slots do you want to move (from 1 to 16384)? 4096 #输入新加节点的ID作为目标节点,也就是要扩容的节点,目标节点只能指定一个 What is the receiving node ID? xxxxxxxxx #直接输入all,之后输入yes Source node #1:all #迁移完成后命令会自动退出,这时候我们查看一下集群的状态 . /redis-trib .rb rebalance 10.0.0.51:6380 |
收缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #收缩节点之前需要将节点上的数据移动到其他节点 . /redis-trib .rb reshard 10.0.0.51:6380 #这个数字需要看要被下线节点上有多少个槽位(命令上会有显示出来) #假如有4096个槽位,剩下三个主节点留在集群中 #也就是需要执行三次这个命令,将本槽位的数据分三次移动到留下的三个节点 #数字就是4096/3取整(1365,1365,1366) How many slots do you want to move (from 1 to 16384)? 1365 输入接收槽位的节点ID 输入发送槽位的节点ID done #之后在忘记节点 . /redis-trib .rb del-node 10.0.0.51:6391 节点ID . /redis-trib .rb del-node 10.0.0.51:6390 节点ID |
5.0配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #masterauth nsv123 #requirepass nsv123 bind 192.168 . 1.236 protected - mode yes port 7010 timeout 0 tcp - keepalive 300 daemonize yes pidfile / var / run / redis_7010.pid loglevel notice logfile "/usr/nacp/cluster/nagp/7010/redis7010.log" databases 16 dbfilename dump7010.rdb dir / usr / nacp / cluster / nagp / 7010 / cluster - enabled yes cluster - config - file nodes - 7010.conf |
5.0创建集群
1 | redis - cli - - cluster create - - cluster - replicas 1 192.168 . 1.236 : 7010 192.168 . 1.236 : 7011 192.168 . 1.236 : 7012 192.168 . 1.236 : 7013 192.168 . 1.236 : 7014 192.168 . 1.236 : 7015 |
5.0集群命令获取帮助
1 | redis - cli - - cluster help |
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能