背景
通过Dataphin公共云多租户的方式,可以实现零部署成本、零运维成本构建智能大数据研发与治理平台。Dataphin部署在阿里云上,已有的数据源部署在本地机房,因此数据上云第一步,首先要打通网络。本文将介绍本地IDC机房的数据源网络打通的不同方案。
方案1 公网直连 + IP白名单 + 数据库加密方案
网络架构
操作步骤
在Dataphin侧添加需要访问的数据源的白名单
- 入口:Dataphin->规划->项目管理->(已创建的项目)信息设置
- 在安全设置 -> 沙箱白名单中添加需要访问的数据库的域名或IP地址
获取Dataphin公共云多租户的公网IP
下面提供多种方式获取Dataphin公共云多租户的公网IP的出网IP:
- 方案一:通过帮助文档中获取Datapin多租户的出网IP地址:https://help.aliyun.com/zh/dataphin/user-guide/appendix-dataphin-network-ip-address?spm=a2c4g.11186623.0.i3#title-soy-3el-8b7
- 方案二:通过数据源的配置页面获取公网出网IP。请注意,不同的地域的IP地址不同,可在产品页面中查看:
- 入口:Dataphin->管理中心->数据源管理->新建数据源
在本地服务器上添加Dataphin公网IP的白名单
需要网工配合,在本地服务器上设置允许开放公网访问,将上一步得到的Dataphin公网IP添加至访问白名单。
Dataphin数据源测试连接
- 入口:Dataphin->管理中心->数据源管理->添加数据源->类型选择 公网数据库
- 在Dataphin中新建数据源,填写好配置信息后点击测试连接
数据库加密
为了安全考虑,可以开启数据库SSL加密,但是需要注意:一方面需要服务端开启加密需要维护SSL证书,有一定的成本和风险;另一方面数据库连接时连接串后面需要加上相应的加密参数,具体可参考:
https://blog.csdn.net/hrbhanyu/article/details/61196443
https://blog.csdn.net/ilovewqf/article/details/102519919
注意:目前Dataphin只支持MySQL和达梦数据库的加密传输SSL协议,若数据源为其他数据库类型且有安全性的要求,目前暂不支持加密传输SSL协议链接。
创建好数据源后可以使用Dataphin数据集成功能测试下大表的同步速度和稳定性,不在这里细述。
方案2 阿里云ECS服务 + 混合云 + 反向代理方案
网络架构
操作步骤
开通ECS和VPC
购买开通ECS,选择ecs.c5.xlarge(计算型 4C8G +40GB 高效云盘)的ECS,建议先选择按量付费的模式,确定连通后再转为包年包月。
VPC创建请参考:https://help.aliyun.com/document_detail/65398.html
建立VPN连接
建立VPC到本地数据中心的连接
使用IPsec-VPN建立VPC到本地数据中心的VPN连接,从而实现本地数据中心与VPC的互通。
注意使用IPsec-VPN功能建立VPC到本地数据中心的VPN连接,确保满足以下条件:
- 检查本地数据中心的网关设备。阿里云VPN网关支持标准的IKEv1和IKEv2协议。因此,只要支持这两种协议的设备都可以和云上VPN网关互连,例如华为、华三、山石、深信服、Cisco ASA、Juniper、SonicWall、Nokia、IBM 和 Ixia等。
- 本地数据中心的网关已经配置了静态公网IP。
- 本地数据中心的网段和专有网络的网段不能重叠。
创建VPN网关
根据以下步骤完成操作,创建VPN网关,参考文档:
https://help.aliyun.com/zh/vpn/user-guide/create-and-manage-a-vpn-gateway?spm=a2c4g.11186623.0.i2
- 登录专有网络管理控制台。
- 在左侧导航栏,单击VPN > VPN网关。
- 在VPN网关页面,单击创建VPN网关。
- 在购买页面,根据以下信息配置VPN网关,然后单击立即购买完成支付。
- 实例名称:输入VPN网关的实例名称。
- 地域:选择VPN网关的地域。
说明:确保VPC的地域和VPN网关的地域相同。
- VPC: 选择要连接的VPC。
- 带宽规格:选择一个带宽规格。带宽规格是VPN网关所具备的公网带宽。
- IPsec-VPN: 选择开启IPsec-VPN功能。
- SSL-VPN: 选择是否开启SSL-VPN功能。SSL-VPN功能允许您从任何位置的单台计算机连接到专有网络。
- SSL连接数: 选择您需要同时连接的客户端最大规格。
说明:本选项只有在选择开启了SSL-VPN功能后才可配置。
- 计费周期:选择购买时长。
- 返回VPN网关页面,查看创建的VPN网关。 刚创建好的VPN网关的状态是准备中,约两分钟左右会变成正常状态。正常状态表明VPN网关完成了初始化,可以正常使用了。
说明:VPN网关的创建一般需要1-5分钟。
创建用户网关
根据以下步骤完成操作,创建用户网关。
- 在左侧导航栏,单击VPN > 用户网关。
- 选择用户网关的地域。
- 在用户网关页面,单击创建用户网关。
- 在创建用户网关页面,根据以下信息配置用户网关,然后单击确定。
- 名称:输入用户网关的名称。
- IP地址:输入VPC要连接的本地数据中心网关设备的公网IP。
- 描述:输入用户网关的描述信息。
创建IPsec连接
根据以下步骤完成操作,创建IPsec连接。
- 在左侧导航栏,单击VPN > IPsec连接。
- 选择创建IPsec连接的地域。
- 在IPsec连接页面,单击创建IPsec连接。
- 在创建IPsec连接页面,根据以下信息配置IPsec连接,然后单击确定。
- 名称:输入IPsec连接的名称。
- VPN网关: 选择已创建的VPN网关。
- 用户网关:选择要连接的用户网关。
- 本端网段:输入已选VPN网关所属VPC的网段。
- 对端网段:输入本地数据中心的网段。
- 是否立即生效:选择是否立即协商。
- 是:配置完成后立即进行协商。
- 否:当有流量进入时进行协商。
- 预共享密钥:输入共享密钥,该值必须与本地网关设备的预共享密钥一致。
其他选项使用默认配置。
在本地网关设备中加载VPN配置
根据以下步骤完成操作,在本地网关设备中加载VPN配置。
- 在左侧导航栏,单击VPN > IPsec连接。
- 选择IPsec连接的地域。
- 在IPsec连接页面,找到目标IPsec连接,然后单击操作列下的下载对端配置。
- 根据本地网关设备的配置要求,将下载的配置添加到本地网关设备中。详细信息,请参见本地网关配置。
注意:下载配置中的RemotSubnet和LocalSubnet与创建IPsec连接时的本端网段和对端网段是相反的。因为从阿里云VPN网关的角度看,对端是用户IDC的网段,本端是VPC网段;而从本地网关设备的角度看,LocalSubnet就是指本地IDC的网段,RemotSubnet则是指阿里云VPC的网段。
配置VPN网关路由
根据以下步骤完成操作,配置VPN网关路由。
- 在左侧导航栏,单击VPN > VPN网关。
- 选择VPN网关的地域。
- 在VPN网关页面,找到目标VPN网关,单击实例ID/名称列下的实例ID。
- 在目的路由表页签,单击添加路由条目。
- 在添加路由条目页面,根据以下信息配置目的路由,然后单击确定。
- 目标网段:输入本地IDC侧的私网网段。
- 下一跳:选择IPsec连接实例。
- 发布到VPC:选择是否将新添加的路由发布到VPC路由表。本例选择是。
- 权重:选择权重值。本例选择100。
连接测试
登录到阿里云VPC内一台无公网IP的ECS实例,并通过ping命令ping本地数据中心内一台服务器的私网IP地址,验证通信是否正常。
连接测试方法:
- 使用ping命令测试到本地数据中心服务器的网络质量:(xxx.xxx.xxx.xxx表示后端服务器ip)
[root@iZuf61cvux96rhus9ufhq0Z conf]# ping -c 100 xxx.xxx.xxx.xxx 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=61 time=7.52 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=61 time=7.38 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=61 time=7.10 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=61 time=7.55 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=5 ttl=61 time=7.11 ms ........ --- xxx.xxx.xxx.xxx ping statistics --- 100 packets transmitted, 100 received, 0% packet loss, time 99121ms rtt min/avg/max/mdev = 6.999/7.454/8.415/0.267 ms
若统计结果的packet loss为0%,rrt avg在10ms以内,证明网络情况良好。
- 使用telnet命令确定后端服务器接口情况:
[root@iZuf61cvux96rhus9ufhq0Z conf]# telnet xxx.xxx.xxx.xxx 1521 Trying xxx.xxx.xxx.xxx... Connected to xxx.xxx.xxx.xxx. Escape character is '^]'.
若出现以上接口,表示端口已经处于监听的状态。
反向代理 + keeplive配置
安装nginx作为反向代理
- mkdir -p /usr/local/src && cd /usr/local/src
- wget https://nginx.org/download/nginx-1.16.1.tar.gz //下载nginx最新稳定版
- tar zxvf nginx-1.16.1.tar.gz && cd /usr/local/src/nginx-1.16.1 //解压安装包
- yum install lrzsz python-devel gcc gcc-c++ pcre pcre-devel patch unzip zlib zlib-devel openssl openssl-devel git jemalloc -y //安装依赖包
- ./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --with-http_v2_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-pcre-jit --with-pcre --with-stream //编译nginx,注意一定要安装stream用于四层代理
- make && make install //安装nginx
- cd /usr/local/nginx/conf/ && cp nginx.conf nginx.conf.bak //备份nginx默认配置
- vim nginx.conf 替换为以下配置:
user nobody; worker_processes 8; events { worker_connections 1024; } stream { server{ listen 61521 so_keepalive=on; ## 配置监听端口和socket连接的keepalive,否则无法支持长连接 proxy_pass xxx.xxx.xxx.xxx :1521; ##配置反向代理的数据库ip和端口,ip端口自行替换 proxy_timeout 72h; ## 配置代理的超时时间为72小时 } }
- v i /etc/init.d/nginx //添加nginx开机自启
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="//usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
- chmod a+x /etc/init.d/nginx && chkconfig --add /etc/init.d/nginx //增加至开机自启
- service nginx status && service nginx restart //启动nginx
测试反向代理是否生效:
使用netstat命令查看端口是否监听:
[root@iZuf61cvux96rhus9ufhq0Z conf]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:61521 0.0.0.0:* LISTEN 1333/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1346/sshd
以上61521端口已监听。
- 在阿里云ECS安全组内,添加Dataphin的ip段,获取方式:
方案一:通过帮助文档中获取Datapin多租户的出网IP地址:https://help.aliyun.com/zh/dataphin/user-guide/appendix-dataphin-network-ip-address?spm=a2c4g.11186623.0.i3#title-soy-3el-8b7
方案二:通过数据源的配置页面获取公网出网IP。请注意,不同的地域的IP地址不同,可在产品页面中查看:
- 入口:Dataphin->管理中心->数据源管理->新建数据源
- 在任意非nginx代理服务器使用telnet命令至nginx代理服务器,确认接口情况:
lzy@liangzhongyideMacBook-Pro: telnet xxx.xxx.xxx.xxx 61521 Trying xxx.xxx.xxx.xxx... Connected to xxx.xxx.xxx.xxx. Escape character is '^]'.
以上确认61521端口可以连通。
- 在Dataphin上创建数据源 > 类型选择ECS(VPC)自建数据库,配置连接信息并进行连通性测试,如果连通性测试成功则表示能正常连接,反向代理配置成功。
- 使用Dataphin同步数据进行实际业务测试。
其它说明
- 网络连接高质量要求:VPN 连接可能会受到 Internet 抖动、阻塞等公网质量问题而中断。若业务对网络连接质量要求很高时,可以考虑阿里云高速通道接入,但因为采用了专线的方式接入,成本比较高。对于一般的数据中台数据上云VPN方案已够,具体参考:https://help.aliyun.com/document_detail/44852.html
- 成本方面:反向代理方案只需ECS和VPN带宽费用,不需要购买公网地址,价格不高,一般企业都可接受。