1. 安装ruby环境
Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gem list –local查看本地是否已安装redis扩展。
最简便的方法就是用apt或yum包管理器安装RubyGems后执行gem install redis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展(国外链接可能无法下载,可以从CSDN下载):
apt-get install ruby gem install redis
2. 安装redis
3. 创建集群文件及文件夹
mkdir redis-cluster cd redis-cluster mkdir 9000 9001 9002 9003 9004 9005 redis-cluster/ ├── 9000 │ └── redis.conf.9000 ├── 9001 │ └── redis.conf.9001 ├── 9002 │ └── redis.conf.9002 ├── 9003 │ └── redis.conf.9003 ├── 9004 │ └── redis.conf.9004 └── 9005 └── redis.conf.9005
结果如下图所示:
4. 拷贝redis.conf
ubuntu redis配置文件路径
cd /etc/redis
进入redis配置文件目录,将redis.conf复制redis-cluster文件夹中
cp redis.conf /home/user/redis-cluster
4.1主要修改信息如下:
绑定地址:bind 127.0.0.1 # 绑定的ip 不能绑定到127.0.0.1、0.0.0.0或localhost,否则指导客户端重定向时会报”Connection refused”的错误。
绑定端口号:port 9000 # 端口号和文件夹名一样
备份文件名存储位置:dir /home/user/redis-cluster/9000
集群超时时间:cluster-node-timeout 15000。 集群超时时间结点超时多久则认为它宕机了。
开启集群:cluster-enabled yes
集群配置文件:cluster-config-file nodes-9000.conf 这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。
后台运行:appendonly yes
槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
输出日志:logfile “./redis.log”
不同信息在redis.conf位置:
4.2 ip绑定 绑定本机ip
4.2修改端口号
4.3 开启
4.4 数据存储位置
dbfilename 备份文件名
4.5 开启集群
4.6 集群配置文件
然后分别将redis0cluster中redis.conf配置文件复制到新建的6个文件夹中(9000,9001,9002,9003,9004,9005)
复制redis.conf配置文件
cp redis.conf /home/user/redis-cluster/9000 cp redis.conf /home/user/redis-cluster/9001 cp redis.conf /home/user/redis-cluster/9002 cp redis.conf /home/user/redis-cluster/9003 cp redis.conf /home/user/redis-cluster/9004 cp redis.conf /home/user/redis-cluster/9005
5. 分别启动redis-server
redis-server /home/user/redis-cluster/9000/redis.conf redis-server /home/user/redis-cluster/9001/redis.conf redis-server /home/user/redis-cluster/9002/redis.conf redis-server /home/user/redis-cluster/9003/redis.conf redis-server /home/user/redis-cluster/9004/redis.conf redis-server /home/user/redis-cluster/9005/redis.conf
6. 查看redis-server是否正常启动
ps -ef|grep redis-server
结果如下
7. 创建redis集群
redis-trib.rb(能否创建集群主要靠它)存放的路径
cd /usr/share/doc/redis-tools/examples/
复制redis-trib.rb到指定目录
cp redis-trib.rb /home/user/redis-cluster/
redis集群启动
启动集群命令
./redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005
结果如下:
>>> ./redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 >>> Creating cluster # 自动输入的命令 >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 Adding replica 127.0.0.1:9004 to 127.0.0.1:9000 Adding replica 127.0.0.1:9005 to 127.0.0.1:9001 Adding replica 127.0.0.1:9003 to 127.0.0.1:9002 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 127.0.0.1:9000 slots:0-5460 (5461 slots) master M: 89af1208bca79d22f9c051bb86d40de1ebaf92b4 127.0.0.1:9001 slots:5461-10922 (5462 slots) master M: c95629b3e17abaf3b0cef022359b49f4498a4d8a 127.0.0.1:9002 slots:10923-16383 (5461 slots) master S: 736a7abdbec3fd16bd610900cfed8ecd7f9b008b 127.0.0.1:9003 replicates 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 S: 5f94b10bfe0ba249767da82161bdfdb14b5092aa 127.0.0.1:9004 replicates 89af1208bca79d22f9c051bb86d40de1ebaf92b4 S: 58481f44f290203a644503946b3d6f2b9bd53916 127.0.0.1:9005 replicates c95629b3e17abaf3b0cef022359b49f4498a4d8a 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 127.0.0.1:9000) M: 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 127.0.0.1:9000 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 736a7abdbec3fd16bd610900cfed8ecd7f9b008b 127.0.0.1:9003 slots: (0 slots) slave replicates 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 S: 5f94b10bfe0ba249767da82161bdfdb14b5092aa 127.0.0.1:9004 slots: (0 slots) slave replicates 89af1208bca79d22f9c051bb86d40de1ebaf92b4 S: 58481f44f290203a644503946b3d6f2b9bd53916 127.0.0.1:9005 slots: (0 slots) slave replicates c95629b3e17abaf3b0cef022359b49f4498a4d8a M: 89af1208bca79d22f9c051bb86d40de1ebaf92b4 127.0.0.1:9001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: c95629b3e17abaf3b0cef022359b49f4498a4d8a 127.0.0.1:9002 slots:10923-16383 (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
8. 连接集群
redis-cli -c -h 127.0.0.1 -p 9000
注意:如果遇到MOVED 5798错误
请阅读:http://www.chenxm.cc/post/695.html
8.1 关闭集群
ps -ef | grep redis | awk '{print $2}' | xargs kill
9. 简单测试
>>> redis-cli -c -h 192.168.3.99 -p 9000 127.0.0.1:9002> set foo bar OK 127.0.0.1:9002> set hello world -> Redirected to slot [866] located at 192.168.3.212:9000 OK 127.0.0.1:9000> get foo -> Redirected to slot [12182] located at 192.168.3.212:9002 "bar" 127.0.0.1:9002> get hello -> Redirected to slot [866] located at 192.168.3.212:9000 "world"
10 内部原理分析
前面我们已经学习过,用Redis提供的redis-trib或create-cluster脚本能几步甚至一步就建立起一个Redis集群。这一部分我们为了深入学习,所以要暂时抛开这些方便的工具,完全手动建立一遍上面的3主3从集群。
10.1 集群发现:MEET
最开始时,每个Redis实例自己是一个集群,我们通过cluster meet让各个结点互相“握手”。这也是Redis Cluster目前的一个欠缺之处:缺少结点的自动发现功能。
10.2 角色设置:REPLICATE
结点全部“握手”成功后,就可以用cluster replicate命令为结点指定角色了,默认每个结点都是Master。
10.3 槽指派:ADDSLOTS
设置好主从关系之后,就可以用cluster addslots命令指派16384个槽的位置了。有点恶心的是,ADDSLOTS命令需要在参数中一个个指明槽的ID,而不能指定范围。这里用Bash 3.0的特性简化了,不然就得用Bash的循环来完成了:
总结:
这是一篇完整的Redis集群部署,只要按照文章中的步骤做,那么保证你能成功搭建一个redis集群。
接下来可能就是动态扩容、增加节点和减少节点,重新分配槽大小等,当然,还有最重要的就是怎么和我们程序结合起来,以及如何更好的把 Redis 缓存集群发挥出应有的效果,这些才是最重要的。
参考:https://blog.csdn.net/dc_726/article/details/48552531
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。