工作之余学习代码,视频里讲到单机多节点redis集群部署,但是有一个问题就是如果机器挂掉了那么集群也挂掉了。于是自己就改了一下,改成了多机多集群部署。
先说说遇到的坑,解决办法会在文章最后给出(因为里面有些命令需要配置了之后才能用),感觉能踩的坑都让我踩遍了:
1、搭集群时需要使用到ruby脚本,但是使用yum -y install ruby之后,运行gem install redis-3.2.2.gem会出现错误:
ERROR: Error installing redis-4.0.0.gem:
redis requires Ruby version >= 2.2.2.
2、redis创建集群失败,原因是redis.conf文件中的 bind 配置错误:
can't connect to node 192.168.*.*
3、redis创建集群时显示错误:
[ERR] Node 192.168.186.91:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
4、redis创建集群时无错误,但是一直处于Waiting for the cluster to join ……状态非常久,使用cluster meet ip port命令无效
现在开始部署步骤
1、visualbox搭建服务器集群
2、在每台机器上安装redis实例和ruby工具
3、把redis-trib.rb移动到/usr/local/bin目录中
redis-trib.rb都在redis的源码包中的src目录中
4、配置每个节点的redis.conf文件
要部署几个redis实例就需要几个redis.conf文件,这里需要修改每个redis的配置redis.conf文件
bind 192.168.56.103 这里的IP改成当前redis实例所在机器的IP port 7003 这里的port改成当前redis实例通信的port pidfile /var/run/redis_7003.pid 这个随便什么名字都可以,不过每个配置文件里的一定不能相同,我改成了port标识的 cluster-enabled yes 一定要改,开启redis的集群功能 cluster-config-file nodes-7003.conf 这个随便什么名字都可以,不过每个配置文件里的一定不能相同,我改成了port标识的
5、iptables和firewall配置
需要在iptables或者firewall中添加redis的通信端口和redis总线端口,iptables和firewall建议只用一个,如果不想用的话关闭就行了,省去一部分麻烦
6、接下来启动所有的redis实例,进行集群“会面”了。连接不同的节点,激动人心的时刻到了
请不要照抄,依次类比你自己的IP和redis端口,修改即可
redis-trib.rb create --replicas 1 192.168.56.102:7001 192.168.56.102:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.104:7005 192.168.56.104:7006
会出现以下提示,在这里Can I set the above configuration (type 'yes' to accept): yes
请输入yes
>>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.56.102:7001 192.168.56.103:7003 192.168.56.104:7005 Adding replica 192.168.186.91:7003 to 192.168.56.102:7001 Adding replica 192.168.186.91:7004 to 192.168.56.103:7003 Adding replica 192.168.186.91:7005 to 192.168.56.104:7005 M: 319da27d8668a15d2d2d02afe433247694343459 192.168.56.102:7001 slots:0-5460 (5461 slots) master M: 3da756265e301ac0210760f13e990473f87a3017 192.168.56.103:7003 slots:5461-10922 (5462 slots) master M: 6f336da48c892d8e0c541a864765978ebfbca6d5 192.168.56.104:7005 slots:10923-16383 (5461 slots) master S: ff4cf9d8a141d85c478b9af0358c93bca342c236 192.168.56.102:7002 replicates 319da27d8668a15d2d2d02afe433247694343459 S: 43c2e0d7799e84b449803a68d557c3431e9e047e 192.168.56.103:7004 replicates 3da756265e301ac0210760f13e990473f87a3017 S: 3f174fae106cb6cf7e7f21ed844895ed7c18f793 192.168.56.104:7006 replicates 6f336da48c892d8e0c541a864765978ebfbca6d5 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.... [OK] All 16384 slots covered.
最后测试测试redis集群
redis-cli -h 192.168.56.102 -c -p 7001