视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Sequoiadb测试体验系列之六–Java开发3
2020-11-09 14:58:48 责编:小采
文档


上一篇笔记中更新了在集合中的删除,更新,查询等操作。这次尝试一下SequoiaDB的集群操作。包括复制组的创建和删除,复制组的启动和停止,在复制组中添加、删除、启动、停止节点,获取复制组中的主从节点等。 import java.util.ArrayList;import java.util.L

上一篇笔记中更新了在集合中的删除,更新,查询等操作。这次尝试一下SequoiaDB的集群操作。包括复制组的创建和删除,复制组的启动和停止,在复制组中添加、删除、启动、停止节点,获取复制组中的主从节点等。

import java.util.ArrayList;
import java.util.List;

import org.bson.BSONObject;
import org.bson.BasicBSONObject;

import com.sequoiadb.base.Node.NodeStatus;
import com.sequoiadb.base.DBCursor;
import com.sequoiadb.base.Node;
import com.sequoiadb.base.ReplicaGroup;
import com.sequoiadb.base.Sequoiadb;
import com.sequoiadb.exception.BaseException;

public class BlogRG {


	static String rgName = "testRG";
	static String hostName = "sdbserver1";

	public static void main(String[] args) {

	
	//连接数据库
	String host = "192.168.20.46";
	String port = "11810";
	String usr = "admin";
	String password = "admin";

	Sequoiadb sdb = null;

	try {
	sdb = new Sequoiadb(host + ":" + port, usr, password);
	} catch (BaseException e) {
	e.printStackTrace();
	System.exit(1);
	}
	
	//打印有关复制组信息(名称、个数)
	printGroupInfo(sdb);
	
	//清除环境,删掉重复的复制组
	if(isGroupExist(sdb,rgName)){
	System.out.println("Removing the old replica group...");
	sdb.removeReplicaGroup(rgName);
	}
	
	printGroupInfo(sdb);
	
	//添加新复制组
	System.out.println("Adding the new replica group...");
	ReplicaGroup rg = sdb.createReplicaGroup(rgName);
	
	printGroupInfo(sdb);
	
	//打印复制组内节点信息
	System.out.println("Tere are " + rg.getNodeNum(NodeStatus.SDB_NODE_ALL) + " nodes in the group.");
	
	//添加三个新的节点
	Node node1 = addNode(rg,50000);
	Node node2 = addNode(rg,50010);
	Node node3 = addNode(rg,50020);
	
	//打印复制组内节点信息
	System.out.println("Tere are " + rg.getNodeNum(NodeStatus.SDB_NODE_ALL) + " nodes in the group.");

	//获取复制组的主从节点
	Node master = rg.getMaster();
	System.out.println("The master node is " +master.getPort());
	System.out.println("The slave node is " + rg.getSlave().getPort());
	
	//停止主节点
	System.out.println("stoping the master node...");
	master.stop();
	
	//等待主节点停止
	while(rg.getMaster().getPort() == master.getPort()){
	try{
	Thread.sleep(2000);
	} catch (Exception e){
	}
	}

	//查看新选举的主节点
	System.out.println("re-selecting the master node...");
	System.out.println("The master node is " + rg.getMaster().getPort());
	
	

	}
	

	private static void printGroupInfo(Sequoiadb sdb){
	ArrayList names = sdb.getReplicaGroupNames();
	int count = 0;
	System.out.print("The replica groups are ");
	for (Object name : names){
	count++;
	System.out.print((String)name + ", ");
	}
	System.out.println("\nThere are " + count + " replica groups in total.");
	}
	
	private static boolean isGroupExist(Sequoiadb sdb, String rgName){
	ArrayList names = sdb.getReplicaGroupNames();
	for (Object name : names){
	if(rgName.equals((String)name))
	return true;
	}
	return false;
	}
	
	private static Node addNode(ReplicaGroup rg, int port){
	if(rg.getNode(hostName,port)!= null)
	rg.removeNode(hostName, port, null);
	Node node = rg.createNode(hostName,port,"/opt/sequoiadb/database/test/" + port,null);
	System.out.println("starting the node " + port + "...");
	node.start();
	return node;
	}

}

上面的代码在数据库中添加新的复制组,并在新的复制组内添加三个主节点,数据组自动选举出新的主节点,停止主节点后,复制组内重新选举新的主节点。

运行以上代码后的结果是:

The replica groups are SYSCatalogGroup, datagroup, testRG, 
There are 3 replica groups in total.
Removing the old replica group...
The replica groups are SYSCatalogGroup, datagroup, 
There are 2 replica groups in total.
Adding the new replica group...
The replica groups are SYSCatalogGroup, datagroup, testRG, 
There are 3 replica groups in total.
Tere are 0 nodes in the group.
starting the node 50000...
starting the node 50010...
starting the node 50020...
Tere are 3 nodes in the group.
The master node is 50000
The slave node is 50010
stoping the master node...
re-selecting the master node...
The master node is 50020
可以看出,程序开始运行时,数据库内有三个复制组,其中testRG是上次运行遗留下来的无用复制组,另外两个是数据库默认的两个复制组。通过removeReplicaGroup()方法删除多余的testRG复制组,之后通过createReplicaGroup()添加新的testRG复制组,并且在新建的组内通过createNode()和start()添加并启动50000,50010,50020三个新的节点。通过getMaster()和getSlave()方法获取组内的主从节点,并利用stop()停止主节点50000,主节点完全停止后,组内将重新自动选举出新的主节点50020。

运行完成后,通过shell控制台查看数据库testRG复制组的详细情况:

>rg.getDetail()
{
 "Group": [
 {
 "HostName": "sdbserver1",
 "dbpath": "/opt/sequoiadb/database/test/50000",
 "Service": [
 {
 "Type": 0,
 "Name": "50000"
 },
 {
 "Type": 1,
 "Name": "50001"
 },
 {
 "Type": 2,
 "Name": "50002"
 }
 ],
 "NodeID": 1053
 },
 {
 "HostName": "sdbserver1",
 "dbpath": "/opt/sequoiadb/database/test/50010",
 "Service": [
 {
 "Type": 0,
 "Name": "50010"
 },
 {
 "Type": 1,
 "Name": "50011"
 },
 {
 "Type": 2,
 "Name": "50012"
 }
 ],
 "NodeID": 1054
 },
 {
 "HostName": "sdbserver1",
 "dbpath": "/opt/sequoiadb/database/test/50020",
 "Service": [
 {
 "Type": 0,
 "Name": "50020"
 },
 {
 "Type": 1,
 "Name": "50021"
 },
 {
 "Type": 2,
 "Name": "50022"
 }
 ],
 "NodeID": 1055
 }
 ],
 "GroupID": 1023,
 "GroupName": "testRG",
 "PrimaryNode": 1055,
 "Role": 0,
 "Status": 0,
 "Version": 4,
 "_id": {
 "$oid": "53d9d38e14a63a88c621edd8"
 }
}
Return 1 row(s).
Takes 0.4716s.
可以看出组内有三个节点,主节点(PrimaryNode)为1055,也就是50020。

下载本文
显示全文
专题