Cassandra启停工具

         由于Cassandra没有控制集群所有节点的工具,如果服务器比较多的话会比较麻烦,所以抽空写了一个Cassandra启停工具。

          此实现是使用JSCH。JCSH实现打成jar后,脚本调用jar包,通过ssh给配置的cassandra服务器发送命令,达到启停Cassandra的目的。基本步骤如下:

 

1、JSCH代码实现发送命令。

/**
 *         Cassandra control tool
 * 
 */
public class CassCtrl {

	private static JSch jsch;
	private static Session session;

	private static void connect(String host, int port, String user,
			String passwd) throws JSchException {
		jsch = new JSch();
		session = jsch.getSession(user, host, port);
		session.setPassword(passwd);
		Properties config = new Properties();
		config.put("StrictHostKeyChecking", "no");
		session.setConfig(config);
		session.connect();
	}

	public static boolean execCmd(String host, int port, String user,
			String passwd, String command) throws JSchException, IOException {
		BufferedReader reader = null;
		BufferedReader result = null;
		ChannelShell exec = null;
		command += "\n";
		try {
			connect(host, port, user, passwd);
			exec = (ChannelShell) session.openChannel("shell");
			exec.setInputStream(new ByteArrayInputStream(command.getBytes()));
			exec.connect();
			/*----------------打印执行结果---------------------*/
			InputStream is = exec.getInputStream();

			result = new BufferedReader(new InputStreamReader(is));
			String result_str = null;
			while ((result_str = result.readLine()) != null) {
				// System.out.println(result_str);
			}
			return true;
		} finally {
			try {
				if (reader != null) {
					reader.close();
				}
				if (result != null) {
					result.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (exec != null) {
				exec.disconnect();
			}
			if (session != null) {
				session.disconnect();
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		StringBuffer buffer = new StringBuffer();
		if (args.length != 5) {
			for (String str : args) {
				buffer.append(str).append(",");
			}
			System.out.println("your args is ["
					+ ((buffer.length() > 0) ? buffer.deleteCharAt(buffer
							.length() - 1) : "") + "]");
			System.err.println("Usage: host port user password command");
		} else {
			boolean flag = false;
			try {
				flag = execCmd(args[0], Integer.valueOf(args[1]), args[2],
						args[3], args[4]);
			} catch (Throwable e) {
				e.printStackTrace();
			}
			buffer.append(flag ? "success" : "failed");
			System.out.println("host[" + args[0] + "] exec command[" + args[4]
					+ "] " + buffer.toString());
		}
	}

}


2、配置CASS_HOME

最好在每台Cassandra服务器上都配置一下CASS_HOME,如下:

 JAVA_HOME=/home/jdk1.6.0_30
 JRE_HOME=/home/jdk1.6.0_30/jre
 CASS_HOME=/home/cass/apache-cassandra-1.2.0
 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASS_HOME/bin
 PATH=$PATH:$HOME/bin
 export JAVA_HOME JRE_HOME CASS_HOME PATH CLASSPATH

3、stop-server配置

将$CASS_HOME/bin/stop-server文件最后两行的注释去掉,可以直接执行这个脚本停止Cassandra. user=whoami pgrep -u $user -f cassandra | xargs kill -9

4、jar包

可以将第1部分代码用eclipse(或其他工具)export成Runable jar file(将引用的jar也打到这个jar),如文件名为CassControl.jar。

5、cassandra服务器配置信息(node.properties)和执行脚本(ctrl-cass.sh)

cassandra服务器配置信息(node.properties)以#host port user password的方式存储。如:

192.168.0.141 22 cass 123456	
192.168.0.142 22 cass 123456
192.168.0.143 22 cass 123456
192.168.0.144 22 cass 123456

执行脚本(ctrl-cass.sh)如下:

#!/bin/sh

if [ -n "$JAVA_HOME" ]; then
	JAVA="$JAVA_HOME/bin/java"
else
   JAVA=java
fi

if [ -z "$CASS_HOME" ]; then
    echo "You must set the CASS_HOME" >&2
    exit 1
fi

execute(){
	cat node.properties | (while read line; 
			do 
			 HOST=`echo $line | cut -d ' ' -f 1`;
			 PORT=`echo $line | cut -d ' ' -f 2`;
			 USER=`echo $line | cut -d ' ' -f 3`;
			 PASSWORD=`echo $line | cut -d ' ' -f 4`;
			 $JAVA -jar CassControl.jar $HOST $PORT $USER $PASSWORD $CASS_HOME/bin/$1
			 #echo $HOST $PORT $USER $PASSWORD;
		      done)
}


case "$1" in
	'start-all')
		execute 'cassandra;exit;'
		;;
	'stop-all')
		execute 'stop-server;exit;'
		;;
	*)	

	echo "Usage: $0 { start-all | stop-all }"
	exit 1
esac

exit 0

6、上传脚本到服务器

将jar包、服务器配置信息(node.properties)和脚本(ctrl-cass.sh)上传到linux服务器(需在同级目录)。

7、执行说明

执行ctrl-cass.sh脚本要带1个参数,可以为start-all或者stop-all。

./ctrl-cass.sh start-all
./ctrl-cass.sh stop-all

 

你也可以在Github上查看相关代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值