Redis高可用:主从模式、哨兵模式、集群模式
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
只能添加为主节点的从节点