Redis各集群搭建之集群模式

1,887 阅读1分钟

Redis高可用:主从模式、哨兵模式、集群模式

github source

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

redis.config文件配置, port端口号与文件名称保持一致

port 7005 
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
redis-cli --cluster help
alwynxudeMacBook-Pro:cluster-test alwynxu$ ./redis-trib.rb create --replicas 1 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

得到如下提示:

WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead.

All commands and features belonging to redis-trib.rb have been moved
to redis-cli.
In order to use them you should call redis-cli with the --cluster
option followed by the subcommand name, arguments and options.

Use the following syntax:
redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]

Example:
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

To get help about all subcommands, type:
redis-cli --cluster help
alwynxudeMacBook-Pro:cluster-test alwynxu$ 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

7000端口服务作为主节点

7004端口服务作为从节点

通过redis-cli进行连接

通过redisson连接

@Configuration
public class RedissonConfig {

    @Bean
    RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);
        RedissonClient redissonClient = Redisson.create(config);
        return redissonClient;
    }

    @Bean("redissonClusterClient")
    RedissonClient redissonClusterClient() {
        Config config = new Config();
        config.useClusterServers().addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001", "redis://127.0.0.1:7002", "redis://127.0.0.1:7003", "redis://127.0.0.1:7004", "redis://127.0.0.1:7005");
        RedissonClient client = Redisson.create(config);

        return client;
    }
}
    @RequestMapping("/map")
    public String getMap() {
        RMap<Object, Object> map01 = redissonClient.getMap("map01");
        map01.put("one", "1");
        RList<Object> list01 = redissonClusterClient.getList("list01");
        list01.add("one");
        list01.add("two");
        list01.add("three");
        return null;
    }

    @RequestMapping("getKey/{key}")
    public RList<Object> getKey(@PathVariable("key") String key) {
        RList<Object> list = redissonClusterClient.getList(key);
        // 获取集群节点
        Collection<ClusterNode> nodes = redissonClusterClient.getClusterNodesGroup().getNodes();
        return list;
    }
    

若127.0.0.1:7005服务挂了之后,由于是从节点,所以master正常工作。 若127.0.0.1:7001服务挂了之后,会将从节点提升为master。当127.0.0.1:7001重启后会作为127.0.0.1:7005的从节点继续服务。

集群添加从节点,将127.0.0.1:7005添加为127.0.0.1:7001的从节点

redis-cli --cluster add-node 127.0.0.1:7005 127.0.0.1:7001 --cluster-slave

只能添加为主节点的从节点