使用Java管理千台规模Linux服务器

前东家是一家游戏公司,老板很好,当时工作也留下了很多自己原创的管理脚本。现在分享一下在办公环境使用Java、Jsch登录VPN管理Linux的脚本(此处实现JAVA调用Linux上备份Mysql的shell作为示例),希望对运维的朋友有帮助,尽快从繁杂的服务器管理工作中脱离出来。

主要的实现思路:

如果需要先登录VPN才能连接游戏服务器,需要将游戏服务器的ssh端口(一般是22)映射到本地办公电脑的端口上(如5555),然后ssh连接本地办公电脑的5555端口,这样就可以连接到游戏服务器,并可以管理游戏服务器了。

当您学会通过VPN连接Linux服务器后,如果只在内网环境,不使用VPN,就更简单了,此外不再详述。Jsch的example里也有介绍。

代码:使用Jsch透过VPN

1.package com.daily.wednesday;

2.import java.io.IOException;

3.import java.io.InputStream;

4.import java.sql.Connection;

5.import java.sql.DriverManager;

6.import java.sql.ResultSet;

7.import java.sql.SQLException;

8.import java.sql.Statement;

9.import com.daily.util.DataBaseConnection;

10.import com.jcraft.jsch.Channel;

11.import com.jcraft.jsch.ChannelExec;

12.import com.jcraft.jsch.JSch;

13.import com.jcraft.jsch.JSchException;

14.import com.jcraft.jsch.Session;

15.public class BackUpMysql3 {

16. public static void main(String args[]) {

17. // 读取数据库配置

18. DataBaseConnection dataBaseConnection = new DataBaseConnection();

19. String dataBaseConfigForWrite[] = new String[3];

20. dataBaseConfigForWrite = dataBaseConnection.loadDataConfig();

21.22. Connection conn = null;// 数据库连接

23. Statement stmt = null;// 数据库表达式

24. ResultSet rs = null; // 结果集

25. int rowcount = 0;// 总记录数

26. String sql = "select * from servers_maint_wednesday";

27.28. try {

29. conn = DriverManager.getConnection(dataBaseConfigForWrite[0],

30. dataBaseConfigForWrite[1], dataBaseConfigForWrite[2]);

31. stmt = conn.createStatement();

32. rs = stmt.executeQuery(sql);

33. rs.last();

34. rowcount = rs.getRow();// 总记录数

35. rs = stmt.executeQuery(sql);

36. } catch (SQLException e) {

37. e.printStackTrace();

38. }

39. // 定义游戏服务器IP的数组,游戏服务器IP存在数据库中。

40. String privateIpaddress[] = new String[rowcount];

41. String remark[] = new String[rowcount];// 定义游戏区名称

42. String programPath[] = new String[rowcount];// 定义程序路径

43. String backMysqlShellPath[] = new String[rowcount];// 定义mysql备份脚本路径

44.45. int j = 0;

46. try {

47. while (rs.next()) {

48. privateIpaddress[j] = rs.getString("privateipaddress");

1

50. programPath[j] = rs.getString("programpath");

51. backMysqlShellPath[j] = rs.getString("backmysqlshellpath");

52. j++;

53. }

54. } catch (Exception e) {

55. e.printStackTrace();

56. } finally {

57. try {

58. if (rs != null) {

59. rs.close();

60. }

61. if (stmt != null) {

62. stmt.close();

63. }

64. if (conn != null) {

65. conn.close();

66. }

67. } catch (Exception e) {

68. e.printStackTrace();

69. }

70. }

71.72. // 调用mysql备份方法