一般公司都会在集群(eg.Hadoop/Spark集群)上分配许多节点IP,在外网的基础上做的局域网由许多内网(局域网)IP构成。内网相对于互联网世界而言,是虚设的,在公共网络中找不到。鉴于此,为了保护重要数据,会在外网设置一个集群登录入口节点,只具备登录权限,用来跳转到其他节点IP以实现多路复用。
连接与跳转
ssh 账户@外网ip
->通过外网进入登录节点password...
ssh 内网ip
orssh 账户@内网ip
->通过ssh,选择跳转到哪个虚拟机su root
->进入虚拟机后,切换root用户以便切换到仅对数据库有权限的账户dbusersu dbuser
->切换成dbuser,进行数据库操作
隧道
①为了给后台项目和Navicat等数据库工具提供通道连接到客户提供的数据库服务器(在局域网中,只能通过外网找到),需要用隧道做一个映射;
②可在XShell中,进行查看
-隧道窗格
-添加
转移规则;
③紧接着,在本机localhost中找一个没有被占用的端口(eg.3280),源:localhost:3280 –映射–> 局域网IP:5432;
原理
比如客户提供给我们一台postgresql数据库服务器,这款软件的默认端口是5432,但是在局域网中它仅是被分配出来的虚拟机,如果需要通过其他网络连接进来,需要在客户的外网开辟一个端口(不一定为5432)来映射局域网中的这台postgresql数据库。
但往往这种做法是不被采用的,因为它可能会泄露客户的私密数据。
(注:没有在登录节点映射的话是不能外网登录的,建议数据库不要开外网端口)
想要连接这台在客户那里的局域网服务器,可以用我们前面建立的隧道,而不必在客户外网开辟端口映射。
项目的配置文件:
<property name="connection.url">jdbc:postgresql://localhost:3280/数据库名(客户提供的内网数据库名称)</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.username">客户提供的账户名</property>
<property name="connection.password">客户提供的密码</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect<