构建redis集群

参考官方文档,搭建一个简单的redis集群

前提:有个redis的编译版本

1. 创建目录

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

2. 在7000-7005每一个目录中,创建redis.conf文件,7000的文件内容如下,其他目录的修改对应端口号

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

3. 将编译的redis-server文件挪到cluster-test目录中

4. 启动每一个实例,7000如下

cd 7000
../redis-server ./redis.conf

5. 将编译后的redis-cli挪到cluster-test目录,如果是低版本的redis(3或者4),则使用redis-trib.rb

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.1:7005 \
--cluster-replicas 1

6. 会有一次配置的确认,输入yes,当看到如下信息,则表示创建成功

[OK] All 16384 slots covered

 

 

创建好之后,尝试用java代码进行操作

1. 引入maven依赖

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

2. 增加个工具类

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Set;

/**
 * @author page
 * @since 2021/1/20 16:01
 */
public class RedisClusterUtil {

    private static JedisCluster jedisCluster = null;

    private static final String HOST = "192.168.92.130";

    static {
        HostAndPort hostAndPort = new HostAndPort(HOST, 7000);
        HostAndPort hostAndPort1 = new HostAndPort(HOST, 7001);
        HostAndPort hostAndPort2 = new HostAndPort(HOST, 7002);

        Set<HostAndPort> hostAndPortSet = new HashSet<>();
        hostAndPortSet.add(hostAndPort);
        hostAndPortSet.add(hostAndPort1);
        hostAndPortSet.add(hostAndPort2);

        HostAndPort hostAndPort3 = new HostAndPort(HOST, 7003);
        HostAndPort hostAndPort4 = new HostAndPort(HOST, 7004);
        HostAndPort hostAndPort5 = new HostAndPort(HOST, 7005);
        hostAndPortSet.add(hostAndPort3);
        hostAndPortSet.add(hostAndPort4);
        hostAndPortSet.add(hostAndPort5);
        jedisCluster = new JedisCluster(hostAndPortSet);
    }

    /**
     * 获取指定 key 的值
     *
     * @param key
     * @return
     */
    public static String getString(String key) {
        return jedisCluster.get(key);
    }

    /**
     * 设置指定 key 的值
     *
     * @param key
     * @param value
     */
    public static void setString(String key, String value) {
        jedisCluster.set(key, value);
    }
}

3. 调用工具类测试,发现连不上。之后修改多个文件后解决

  3.1 删除每个文件夹中的appendonly.aof,dump.rdb,nodes.conf

  3.2 修改redis.conf,增加如下内容

bind 192.168.92.130
protected-mode no

  3.3 查看7000-7005端口是否放开

firewall-cmd --query-port=7000/tcp

  3.4 如果3.3中结果为no,则放开对应端口

firewall-cmd --add-port=7000/tcp

  3.5 代码里连接的host也改为虚拟机的ip,本文中为:192.168.92.130

  3.6 重启集群,解决

posted @ 2021-01-21 17:32  到三国卖栗子  阅读(139)  评论(0编辑  收藏  举报