Redisson集群管理工具提供了通过程序化的方式,像redis-trib.rb
脚本一样方便地管理Redis集群的工具。
以下范例展示了如何创建三主三从的Redis集群。
ClusterNodes clusterNodes = ClusterNodes.create()
.master("127.0.0.1:7000").withSlaves("127.0.0.1:7001", "127.0.0.1:7002")
.master("127.0.0.1:7003").withSlaves("127.0.0.1:7004")
.master("127.0.0.1:7005");
ClusterManagementTool.createCluster(clusterNodes);
主节点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没有从节点。
以下范例展示了如何将一个节点踢出集群。
ClusterManagementTool.removeNode("127.0.0.1:7000", "127.0.0.1:7002");
// 或
redisson.getClusterNodesGroup().removeNode("127.0.0.1:7002");
将从节点127.0.0.1:7002从其主节点127.0.0.1:7000里踢出。
以下范例展示了如何将数据槽在集群的主节点之间迁移。
ClusterManagementTool.moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
// 或
redisson.getClusterNodesGroup().moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
将番号为23,419,4712和8490的数据槽从127.0.0.1:7002节点迁移至127.0.0.1:7000节点。
以下范例展示了如何将一个范围的数据槽在集群的主节点之间迁移。
ClusterManagementTool.moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
// 或
redisson.getClusterNodesGroup().moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
将番号范围在[51, 9811](含)之间的数据槽从127.0.0.1:7002节点移动到127.0.0.1:7000节点。
以下范例展示了如何向集群中添加从节点。
ClusterManagementTool.addSlaveNode("127.0.0.1:7000", "127.0.0.1:7003");
// 或
redisson.getClusterNodesGroup().addSlaveNode("127.0.0.1:7003");
将127.0.0.1:7003作为从节点添加至127.0.0.1:7000所在的集群里。
以下范例展示了如何向集群中添加主节点。
ClusterManagementTool.addMasterNode("127.0.0.1:7000", "127.0.0.1:7004");
// 或
redisson.getClusterNodesGroup().addMasterNode("127.0.0.1:7004");
将127.0.0.1:7004作为主节点添加至127.0.0.1:7000所在的集群里。 Adds master node 127.0.0.1:7004 to cluster where 127.0.0.1:7000 participate in
Redisson Node指的是Redisson在分布式运算环境中作为独立节点运行的一种模式。Redisson Node的功能可以用来执行通过分布式执行服务或分布式调度执行服务发送的远程任务,也可以用来为分布式远程服务提供远端服务。 所有这些功能全部包含在一个JAR包里,您可以从这里下载
Redisson Node采用的是与Redisson框架同样的配置方法,并同时还增加了以下几个专用参数。值得注意的是ExecutorService使用的线程数量可以通过threads参数来设定。
默认值:0 用来指定执行MapReduce任务的工作者的数量 0 代表当前CPU核的数量
默认值:null 用一个Map结构来指定某个服务的工作者数量,Map的Key是服务名称,用value指定数量。
默认值:null
Redisson Node启动完成后调用的初始化监听器。
以下是JSON格式的配置文件范例,该范例是在集群模式配置方法基础上,增加了Redisson Node的配置参数。
{
"clusterServersConfig":{
"nodeAddresses":[
"//127.0.0.1:7004",
"//127.0.0.1:7001",
"//127.0.0.1:7000"
],
},
"threads":0,
"executorServiceThreads": 0,
"executorServiceWorkers": {"myExecutor1":3, "myExecutor2":5},
"redissonNodeInitializer": {"class":"org.mycompany.MyRedissonNodeInitializer"}
}
以下是YAML格式的配置文件范例,该范例是在集群模式配置方法基础上,增加了Redisson Node的配置参数。
---
clusterServersConfig:
nodeAddresses:
- "//127.0.0.1:7004"
- "//127.0.0.1:7001"
- "//127.0.0.1:7000"
scanInterval: 1000
threads: 0
executorServiceThreads: 0
executorServiceWorkers:
myService1: 123
myService2: 421
redissonNodeInitializer: ! {}
Redisson Node提供了在启动完成后,执行RedissonNodeInitializer指定的初始化监听器的机制。这个机制可以用在启动完成时执行注册在类路径(classpath)中分布式远程服务的实现,或其他必要业务逻辑。比如,通知其他订阅者关于一个新节点上线的通知:
public class MyRedissonNodeInitializer implements RedissonNodeInitializer {
@Override
public void onStartup(RedissonNode redissonNode) {
RMap map = redissonNode.getRedisson().getMap("myMap");
// ...
// 或
redisson.getRemoteService("myRemoteService").register(MyRemoteService.class, new MyRemoteServiceImpl(...));
// 或
reidsson.getTopic("myNotificationTopic").publish("New node has joined. id:" + redissonNode.getId() + " remote-server:" + redissonNode.getRemoteAddress());
}
}
Redisson Node也可以以嵌入式方式运行在其他应用当中。
// Redisson程序化配置代码
Config config = ...
// Redisson Node 程序化配置方法
RedissonNodeConfig nodeConfig = new RedissonNodeConfig(config);
Map workers = new HashMap();
workers.put("test", 1);
nodeConfig.setExecutorServiceWorkers(workers);
// 创建一个Redisson Node实例
RedissonNode node = RedissonNode.create(nodeConfig);
// 或者通过指定的Redisson实例创建Redisson Node实例
RedissonNode node = RedissonNode.create(nodeConfig, redisson);
node.start();
//...
node.shutdown();
另外不要忘记添加-Xmx或-Xms之类的参数。
无现有Redis环境:
有现有Redis环境: