一般公司都会在集群(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.Driverproperty>
<property name="connection.username">客户提供的账户名property>
<property name="connection.password">客户提供的密码property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialectproperty>
Navicat的连接
- ①下载
Navicat for PostgreSQL
;
②新建连接;
③在常规里面填写如下信息:主机名或IP:localhost
端口:3280
初始数据库:postgres(默认创建)or具体的数据库名称
用户名:客户提供的账户名
密码:客户提供的密码
service postgresql-9.4 restart
-> 重启postgresql指令,但service命令都是要root权限,所以一般很少会这么重启;
export PGHOME=/opt/PostgreSQL/9.4
export PATH=$PGHOME/bin:$PATH
export PGDATA=$PGHOME/data
export LD_LIBRARY_PATH=$PGHOME/lib
#export完环境变量之后,才能使用下面的命令
pg_ctl stop
pg_ctl start
psql #进入postgresql的命令
没有设置环境变量,也可通过这条指令进入数据库:
bin/psql -U postgres
- ①进入/opt/PostgreSQL/9.4/data/postgresql.conf,修改postgresql.conf配置文件中数据库存放的目录:
data_directory = '/data/pg_data'
;
②进入/opt/PostgreSQL/9.4/data中,可以看到,有许多文件和文件夹。
base pg_clog pg_hba.conf pg_log pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION postgresql.auto.conf postmaster.opts
global pg_dynshmem pg_ident.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_xlog postgresql.conf
③把所有文件拷贝到新指向的路径cp -r 文件1,文件2,文件3... /data/pg_data
;
④重启生效。
公司的局域网中,前后端开发隔离,在开发测试阶段可以选择本机开启项目跨域,供局域网的其他主机,即前端开发人员进行API接口的调用。
所以我们可以在tomcat中配置跨域的信息,以让局域网中的小伙伴们访问后台项目。
在….apache-tomcat-8.0.35\wtpwebapps\ROOT目录底下,放入clientaccesspolicy.xml和crossdomain.xml;
【clientaccesspolicy.xml】
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
grant-to>
policy>
cross-domain-access>
access-policy>
【crossdomain.xml】
<cross-domain-policy>
<allow-access-from domain="*" />
cross-domain-policy>
方法一:
Jersey框架提供Web Service的API,作为控制层,吐出JSON供前台(网页、APP等)使用。
@GET
@Path("year_month")
@Produces(MediaType.TEXT_PLAIN)//输出"text/plain"的介质类型
public Response getInfo() {
...
return Response.ok(JSONArray.toString())
.header("Access-Control-Allow-Origin", "*").build();//把JSON格式的对象或数组转换为字符串,然后建立响应给前台的一个报文头,表示允许任意IP访问服务端内容。
}
方法二:
在web.xml中配置过滤器,该过滤器使用现成的过滤方案(cors-filter-1.7.jar、java-property-utils-1.9.jar)
<filter>
<filter-name>CORSfilter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilterfilter-class>
<init-param>
<param-name>cors.allowOriginparam-name>
<param-value>*param-value>
init-param>
<init-param>
<param-name>cors.supportedMethodsparam-name>
<param-value>GET,POST,HEAD,PUT,DELETEparam-value>
init-param>
<init-param>
<param-name>cors.supportedHeadersparam-name>
<param-value>Accept,Origin,X-Requested-With,Content-Type,Last-Modifiedparam-value>
init-param>
<init-param>
<param-name>cors.exposedHeadersparam-name>
<param-value>Set-Cookieparam-value>
init-param>
<init-param>
<param-name>cors.supportsCredentialsparam-name>
<param-value>trueparam-value>
init-param>
filter>
<filter-mapping>
<filter-name>CORSfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
①假如外网机器IP为A,数据库服务器为B1,Web服务器为B2;
②在B2上装Tomcat,端口号为8080,要把端口映射到外网A,才能供外网的访客访问。即A:任意一个没被占用端口->B2:8080
③因为B1和B2是属于同一个网段(内网),所以B2的项目可以直接访问内网的B1数据。
④在部署项目之前,只需要改数据库配置文件的ip和端口为:A:端口
即可.
⑤用ftp传文件,发现tomcat目录并没有权限访问,这时候可以先传到外网的目录。然后通过外网登录节点,进入到指定文件夹。
scp 项目war包 用户名@IP:Tomcat路径/webapps
然后再进入B2查看,即可看到新上传的项目。
“腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL”,由此可见postgresql对数据分析的项目至关重要,它处理百万级千万级的数据量是游刃有余的,本身的功能也很强大。
可参看:
http://www.zhihu.com/question/20010554
http://blog.csdn.net/james_wade63/article/details/50772041
作者: @nanphonfy
Email: nanphonfy (Nfzone) gmail.com 请将(Nfzone)换成@