Redis利用阿里云多服务器配置集群

Redis利用阿里云多服务器配置集群

最近想学习一下redis集群的配置,于是就踩了一波坑,这里把遇到的坑给大家列一下,希望能给大家一些帮助。

1. 安全组配置

由于采用的两台阿里云的ECS,一共6个节点,3个master,3个slave,所以原本对防火墙的配置就变成了对阿里云服务器安全组的配置。
主要是针对入方向,如果你像我一样图方便就把对应的端口全暴露出来,具体就是redis.conf中的port,以及redis对应的总线端口暴露出来。具体就是redis.conf文件中的port+10000,如果redis集群的端口是7000 ~ 7005, 那么你需要暴露的端口除了7000~ 7005,还有17000~ 17005。

2. redis.conf的配置

我这里主要是按照网上的一些资料改的,就是对应每一个节点的redis.conf,对应修改其中的内容:

  • 将bind 127.0.0.1 加#注释掉
  • protected-mode yes改为no
  • daemonize的no改为yes,这是让redis启动后台运行
  • port改为你希望的端口,我这里是7000~7005
  • 添加集群相关配置:
    • cluster-enabled yes
    • cluster-config-file node1.conf(数字我就是对应的端口按顺序写的)
    • cluster-node-timeout 5000

3. ruby配置

集群用到redis-trib.rb这个脚本,显然你本来是运行不了rb这个类型的文件的,所以要配置ruby,具体就不详述了,好多其它文章里有写。

这里面主要就是ruby的版本问题,好像需要的是2.3.2以上的版本,所以你下完rvm以后要更新一下ruby的版本。

配置好ruby以后,在启动你的所有redis实例之后就可以创建集群了,调用redis-trib.rb创建集群,具体的语句也不赘述了,这里要注意一点!!!!!! ,你创建集群时候列的ip与端口一定要是你的公网ip和对应的redis端口,不然你没法从外部网络访问。

按照常理来说,前面的安全组都配置好了以后,这里你输入一个yes确认后就可以创建成功了,如果你卡在waiting for the cluster to join...,一般是你的安全组没配置好,如果还是有问题,你可以手动发送cluster meet message,即登录每个redis实例,分别输入cluster meet ip:port,注意,这里你可以对每个实例都输同一个ip和端口,这里主要是为集群建立连接关系,只要大家都连在同一个节点,那么集群各个节点之间就都是互相连接的了。

4. node is not empty的解决方法

当你像我一样卡在waiting for the cluster to join..., 然后按ctrl+c强制中断了以后,再次运行创建集群的rb脚本就会发现之前的结点已经保留了中断之间建立的集群关系。

解决方案:

  • 删除所有node.conf文件
  • 删除dump.rdb和appendonly.aof
  • 用redis-cli进入各个redis实例,flushdb并shutdown
  • 然后重启各个实例,重新运行那个脚本

最后,可以在本地的idea上用jedis访问一下远程的redis集群了.

	import org.junit.Assert;
	import org.junit.Before;
	import org.junit.Test;
	import redis.clients.jedis.HostAndPort;
	import redis.clients.jedis.JedisCluster;
	
	import java.util.HashSet;
	import java.util.Set;
	
	/**
	 * @author Simon
	 * @since 2019/8/20 10:24
	 */
	public class JedisTest {
	    JedisCluster jedisCluster = null;
	    Set<HostAndPort> jedisClusterNodes = new HashSet<>();
	
	    @Before
	    public void before(){
	        jedisClusterNodes.add(new HostAndPort("ip",port1));
	        jedisClusterNodes.add(new HostAndPort("ip",port2));
	        jedisClusterNodes.add(new HostAndPort("ip",port3));
	        jedisClusterNodes.add(new HostAndPort("ip",port4));
	        jedisClusterNodes.add(new HostAndPort("ip",port5));
	        jedisClusterNodes.add(new HostAndPort("ip",port6));
	        jedisCluster = new JedisCluster(jedisClusterNodes);
	    }
	    @Test
	  public void setVal(){
	      jedisCluster.set("foo","bar");
	      String val = jedisCluster.get("foo");
	      Assert.assertEquals(val,"bar");
	    }
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值