老男孩的https://www.jianshu.com/p/2f93bb771469
Redis配置文件
#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安装了。
[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归档包,上传至服务器,解压后编译、安装
[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.创建配置文件
[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备,并将配置文件对应修改
[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.启动这些实例
[root@localhost redis]# redis-server redis.conf
5.1手动命令添加集群节点CLUSTER MEET {IP} {PORT}
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安装
[root@localhost redis]# gem install redis-3.2.2.gem
8.在redis归档包中src目录下有集群工具redis-trib.rb,使用这个工具可以创建集群,--replicas 2的意思是1个主节点需要有2个备份
[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.检查集群状态
[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查看节点状态
问题:
#当创建集群的时候,出现无法连接节点 [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的配置文件没改
扩容
#需要先准备好扩容的节点 ]# ./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
收缩
#收缩节点之前需要将节点上的数据移动到其他节点 ./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配置
#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创建集群
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集群命令获取帮助
redis-cli --cluster help