Redis集群环境搭建以及Java连接Redis集群

清疚 2022-01-27 00:59 1831阅读 0赞

!!!服务器版本为Centos7.3 阿里云

本文档仅为单个服务器下,创建六个不同端口号的reids服务模拟集群环境。

一. 安装Redis5.0

1. 下载redis5.0

进入到usr/local目录,执行下载命令下载redis压缩包

cd usr/local
wget http://download.redis.io/releases/redis-5.0.0.tar.gz

在这里插入图片描述
2.解压后安装
解压redis-5.0.0.tar.gz压缩文件,然后到解压后的目录redis-5.0.0,使用命令安装。

tar -zxvf redis-5.0.0.tar.gz
cd redis-5.0.0
make && make install

二.创建六个测试节点

  1. 创建六个节点文件
    返回到local/usr目录,创建redis_cluster集群文件夹,进入后创建6个文件夹,分别以需要设置的端口号为文件名,然后把redis.5.0.0下的redis.conf分别复制到这六个文件夹中。

cd …/
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005
cp /usr/local/redis-5.0.0/redis.conf ./7000
cp /usr/local/redis-5.0.0/redis.conf ./7001
cp /usr/local/redis-5.0.0/redis.conf ./7002
cp /usr/local/redis-5.0.0/redis.conf ./7003
cp /usr/local/redis-5.0.0/redis.conf ./7004
cp /usr/local/redis-5.0.0/redis.conf ./7005

2. 修改redis.cong配置文件
分别进入到六个文件夹下,修改以下字段,这里建议使用winscp工具直接在工具中修改。
protected-mode设置为yes则为保护模式,redis需要设置密码才能远程访问,如果为no则不需要设置,本文主要是密码模式下的文档。

  1. daemonize yes //redis后台运行
  2. pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002...
  3. port 7000 //端口7000,7001,7002...
  4. cluster-enabled yes //开启集群 把注释#去掉
  5. cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002...
  6. cluster-node-timeout 15000 //去掉注释# 请求超时时间 默认15s
  7. appendonly yes //aof日志开启 每次操作都会记录日志
  8. # bind 127.0.0.1 //bind前面加上注释 否则无法远程连接集群
  9. //关闭保护模式 无需密码直接连接redis集群
  10. protected-mode no //关闭保护模式
  11. //保护模式 连接redis需要密码才可访问
  12. protected-mode yes //开启保护模式 默认模式
  13. requirepass root //设置redis密码 需要全部统一一个密码 root可自定义
  14. masterauth root //设置主节点密码 需要全部统一一个密码

3. 启动redis服务
分别启动redis服务

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

在这里插入图片描述
检查服务是否正常开启

ps -ef | grep redis

在这里插入图片描述

三.创建集群

1. 创建集群
cluster-replicas 1表示每个主节点都有一个从节点,-a后面是redis密码,如果关闭保护模式则不需要,127.0.0.1仅作填充处理,这里需要填自己的服务器IP.

redis-5.0.0/src/redis-cli —cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.4:7005 -a root —cluster-replicas 1

出现下图时输入yes
在这里插入图片描述
完成创建(图片为首次测试结果仅四个节点,实际为六个节点,三个M三个S)
在这里插入图片描述

2. 测试集群
打开端口号为7000的客户端,设置一个key-value值

redis-cli -c -p 7000
set name wohenkuaile

在这里插入图片描述
退出7000端口的服务,进入到7001的服务,获取key为name的值,如果现实如图则集群环境正常

quit
redis-cli -c -p 7001
get name

在这里插入图片描述

四.Java连接Redis集群

1. 在pom文件中添加maven依赖

  1. <!-- Redis -->
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>2.9.0</version>
  6. </dependency>

2. Java代码

  1. public class ConnectReidsCluster {
  2. public static void main(String[] args) {
  3. JedisPoolConfig poolConfig = new JedisPoolConfig();
  4. // 最大连接数
  5. poolConfig.setMaxTotal(1);
  6. // 最大空闲数
  7. poolConfig.setMaxIdle(1);
  8. // 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
  9. poolConfig.setMaxWaitMillis(1000);
  10. Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
  11. nodes.add(new HostAndPort("127.0.0.1", 7000)); //ip填写服务器的ip地址
  12. nodes.add(new HostAndPort("127.0.0.1", 7001)); //127.0.0.1在这里只是作填充
  13. nodes.add(new HostAndPort("127.0.0.1", 7002));
  14. nodes.add(new HostAndPort("127.0.0.1", 7003));
  15. nodes.add(new HostAndPort("127.0.0.1", 7004));
  16. nodes.add(new HostAndPort("127.0.0.1", 7005));
  17. JedisCluster cluster = new JedisCluster(nodes, 5000, 5000, 5, "root", poolConfig);
  18. String name = cluster.get("name");
  19. System.out.println(name);
  20. cluster.set("info", "我很快乐");
  21. System.out.println(cluster.get("info"));
  22. try {
  23. cluster.close();
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

3. 运行结果
在这里插入图片描述

五.一些问题

1. 如果出现Waiting for the cluster to join一直加载
在这里插入图片描述
这种情况需要开放17000-17005(具体为当前redis端口号+10000)
redis集群不仅开放redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,如redis端口为7000,则集群总线端口为17000。

2.控制台报错无法连接到集群

运行后有可能出现以下情况,发现控制台报错,查询后发现是配置文件中没有注释bind 127.0.0.1,导致集群环境无法远程访问到。(如果完全按照上述配置还出现这种情况,请检查端口号是否开放!)
在这里插入图片描述
首先要停止已经开启的集群,然后删除在/usr/local下生成的nodes配置文件,注释掉redis.conf中的bin的,最后按照上面的方法重新开启集群。

(1). 停止集群
命令查到几个redis服务的pid,分别杀掉对应pid的进程。

ps -ef | grep redis
kill -9 (pid)
在这里插入图片描述

(2). 删除/usr/local下的nodes-7000.conf配置文件和存储的数据文件

rm -rf nodes-7000.conf
rm -rf nodes-7001.conf
rm -rf nodes-7002.conf
rm -rf nodes-7003.conf
rm -rf dump.rdb
rm -rf dump.rdbappendonly.aof

在这里插入图片描述
在这里插入图片描述
(3). 注释redis.conf中的bind 127.0.0.1
在这里插入图片描述

(4). 重启开启集群
!!!注意:这里的127.0.0.1仅仅作填充处理,这里需要设置成你的服务器IP,否则可能无法远程连接

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-5.0.0/src/redis-cli —cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

在这里插入图片描述

插入一条之前的数据

redis-cli -c -p 7000
set name wohenkuaile
quit

(5). 再次使用刚刚的代码连接redis集群

发表评论

表情:
评论列表 (有 0 条评论,1831人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis环境

    本文涉及:Redis集群环境的搭建 ◆ 准备节点 ◆ 一个Redis集群至少需要6个节点才能保证组成完整高可用的集群。想要开启集群只需要设置以下两个参数就行: ...

    相关 Redis介绍以及

    [主从:][Link 1] > 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载