可以查看Redis的官方文档进行配置http://www.redis.cn/topics/cluster-tutorial.html
搭建Redis集群之前一定要关闭Redis [root@server1 ~]# /etc/init.d/redis_6379 stop新建redis目录 要让集群正常运作至少需要三个主节点,不过刚开始试用集群功能时,强烈建议使用六个节点:其中3个为主节点,而其余3个则是各个主节点的从节点 并创建六个以端口号为名字的子目录,稍后我们在每个目录中运行一个Redis实例
[root@server1 ~]# mkdir /usr/local/rediscluster cd /usr/local/rediscluster [root@server1 rediscluster]# mkdir 700{1..6} 编辑配置文件 在文件夹7001到7006中,各创建一个redis.conf文件,文件的内容可以使用下面的示例配置文件,但记得将配置中的端口号从7000改为与文件夹名字相同的号码。 [root@server1 7001]# cat redis.conf port 7001 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes pidfile "/usr/local/rediscluster/7001/redis.pid" logfile "/usr/local/rediscluster/7001/redis.log" daemonize yes dir "/usr/local/rediscluster/7001" 启动==每个文件都要进行启动,每启动一次要进行查看,以保证程序只能
[root@server1 7001]# redis-server redis.conf查看
ps ax 1332 ? Ssl 0:00 redis-server *:7000 [cluster] 测试 [root@server1 7001]# redis-cli -p 7001 127.0.0.1:7001> info # Cluster cluster_enabled:1 ##集群激活同理配置7002~7006,并启动
ps ax 1348 ? Ssl 0:00 redis-server *:7001 [cluster] 1382 ? Ssl 0:00 redis-server *:7002 [cluster] 1388 ? Ssl 0:00 redis-server *:7003 [cluster] 1394 ? Ssl 0:00 redis-server *:7004 [cluster] 1400 ? Ssl 0:00 redis-server *:7005 [cluster] 1405 ? Ssl 0:00 redis-server *:7006 [cluster] 拷贝ruby脚本 [root@server1 src]# pwd /root/redis-5.0.3/src [root@server1 src]# cp redis-trib.rb /usr/local/bin/ 执行命令 [root@server1 src]# redis-trib.rb /usr/bin/env: ruby: No such file or directory ##报错了,因为没有ruby [root@server1 src]# yum install -y ruby [root@server1 src]# redis-trib.rb WARNING: redis-trib.rb is not longer available! You should use redis-cli instead. ##redis-trib.rb不可用了,用redis-cli [root@server1 ~]# redis-cli --cluster help 创建集群 [root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006–cluster-replicas 1表示为每一个master创建1个slave
端口角色7001-7004master->slave7002-7005master->slave7003-7006master->slave 然后输入yes [OK] All 16384 slots covered. #看到这个表示16384个槽都分配好了查看集群信息
测试集群节点对应关系 [root@server1 redis-5.0.3]# redis-cli --cluster info 127.0.0.1:7001 [root@server1 ~]# redis-cli -c -p 7001 127.0.0.1:7001> set name wsp -> Redirected to slot [5798] located at 127.0.0.1:7002 OK 127.0.0.1:7002> get name "wsp 数据保存在5798个哈希槽中,在7002上 [root@server1 ~]# redis-cli -c -p 7005 127.0.0.1:7005> get name -> Redirected to slot [5798] located at 127.0.0.1:7002 "wsp" #在任意节点都可以获取到信息,但是都会跳转到7002 将一个master(7002)宕掉,对应的slave(7005),key还会保存在7004上 [root@server1 ~]# redis-cli -c -p 7005 127.0.0.1:7005> get name -> Redirected to slot [5798] located at 127.0.0.1:7002 "wsp" 127.0.0.1:7002> SHUTDOWN not connected> 如果再把slave宕掉,整个集群就不能用了 [root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001 Could not connect to Redis at 127.0.0.1:7004: Connection refused Could not connect to Redis at 127.0.0.1:7002: Connection refused 127.0.0.1:7001 (4f5065af...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7003 (0b2f0c60...) -> 0 keys | 5461 slots | 1 slaves. [OK] 0 keys in 2 masters. 0.00 keys per slot on average. [root@server1 ~]# redis-cli -c -p 7001ps aux可以查看到7007、7008端口已经启动,但是redis-cli -c -p 7001并没有查看到7007、7008 还没有将节点添加到集群中
将7007 7008节点添加到集群中 [root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 ##添加节点 查看7007节点信息 [root@server1 7008]# redis-cli -c -p 7007 127.0.0.1:7007> cluster nodes ##查看节点信息 b9ee016d45dde6a0067dd3e19139f1044a621d77 127.0.0.1:7007@17007 myself,master - 0 1554949235000 0 connected redis-cli -c -p 70077007没有slave也没有哈希槽 尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 但是在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,所以要添加一个slave
查看帮助 root@server2 ~]# redis-cli --cluster help add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <arg> 添加7008为7007(master)的slave [root@server1 ~]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id b9ee016d45dde6a0067dd3e19139f1044a621d77 ##master的IP 此时查看7007已经具有slave [root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001 ##查看集群信息从所有节点获取哈希槽,所以新节点获取到的哈西槽中可能有会有数据,即会发生数据的迁移。
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001 ##检查可以看到已经分配哈希槽 检查可以看到新节点已经分配了哈希槽 [root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001分配不均等,可能导致数据不同步
均分哈希槽 [root@server1 ~]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001 查看已经均分哈希槽 [root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001 查看数据 [root@server1 ~]# redis-cli -c -p 7008 127.0.0.1:7008> get name -> Redirected to slot [5798] located at 127.0.0.1:7007 "wsp至此集群完成