redis 5.0版本 集群搭建不需要我们安装ruby就可以搭建成功,并且redis给我们提供了快速搭建脚本,执行utils/create-cluster/ 目录下的create-cluster脚本 就可以快速搭建,该脚本提供以下几个命令供我们使用
1、下载安装redis
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
$ make install
2、端口开启,需要开启7001-7006和17001-17006(具体情况看你自己需要开启哪些,图片中的不想相干端口开不开都行)这一步先做也行后做也可以,反正都要开,不如早点开了
3、脚本修改
要想外部服务器访问到我们搭建的集群,我们需要对脚本修改一下:
start部分增加如下配置
–bind 指定我们要绑定的ip(服务器ip) --requirepass 指定我们的密码 --protected-mode no 关闭安全模式(外部应用可以连接到redis)
create 部分 修改如下:
stop 部分 修改如下:
修改后保存
然后在utils/create-cluster目录下执行./create-cluster start
并用 ps -ef|grep redis查看redis集群是否启动成功,如图所示就启动好了
然后执行 ./create-cluster create,出现以下界面就证明集群基本部署成功了(主要是主备分配,分槽等操作完成,个人理解就是这个操作替换了低版本的ruby手动分槽什么的),记住输入“yes”,不要输入“y”
任意取一个节点测试:这样则证明集群部署完成
如果还不放心可以使用 cluster nodes 和 cluster info 查看集群信息,可以看到主备已经分好,状态也是 “ok”,那就集群肯定没问题
使用RedisDesktopManager工具测试连接(这个工具很垃圾,点多了或者什么的就卡死,没办法,谁让他免费呢,改天自己写一个…)
工具可以连接上证明代码也可以连接,但是这块卡了我好久,本来只是想写一个测试类,测一下连接,但是从网上找的代码都是那一套,把所有端口都加进去,但是一直爆“redis Could not get a resource from the pool”或者其他问题,然后我就按着网上的解决办法改啊改,好几天没进展(单机版可以ping通,但是set不进去值,也get不到值)
最后好奇的改了一下代码,代码如下:
public static void main(String[] args) {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
// 最大连接数
config.setMaxTotal(8);
// 最大空闲数
config.setMaxIdle(100);
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
// Could not get a resource from the pool
config.setMaxWaitMillis(7000);
HostAndPort hostAndPort1 = new HostAndPort("**.**.**.***", 7001);
// HostAndPort hostAndPort2 = new HostAndPort("**.**.**.***", 7002);
// HostAndPort hostAndPort3 = new HostAndPort("**.**.**.***", 7003);
// HostAndPort hostAndPort4 = new HostAndPort("**.**.**.***", 7004);
// HostAndPort hostAndPort5 = new HostAndPort("**.**.**.***", 7005);
// HostAndPort hostAndPort6 = new HostAndPort("**.**.**.***", 7006);
Set<HostAndPort> hostAndPortSet = new HashSet<>();
hostAndPortSet.add(hostAndPort1);
// hostAndPortSet.add(hostAndPort2);
// hostAndPortSet.add(hostAndPort3);
// hostAndPortSet.add(hostAndPort4);
// hostAndPortSet.add(hostAndPort5);
// hostAndPortSet.add(hostAndPort6);
JedisCluster jedis = new JedisCluster(hostAndPortSet,1000,30,3,"madong123",config);
jedis.setnx("test2", "000000");
System.out.println(jedis.get("000000"));
try {
jedis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
结果:
到此,懂得人都明白,redis集群部署和应用算是告一段落