基于专线,cosfs异地代理内网挂载腾讯云对象存储
1.前言
#此文服务器地址均为内网ip,相关公网地址均已打码或改写,需根据实际情况修改。
业务系统部署在的香港IDC,但是想要在服务器上基于专线内网挂载广州腾讯云的对象存储cos,实现异地更高效的读写。
实现起来是没有问题的,但是小坑有点多,感觉这个方案以后会是个比较常用的方案,所以以写成博客,不管是腾讯,阿里,等等等,均可参考此篇博客原理操作,希望你能从中获得灵感
2.方案介绍
#大致架构如下,相信聪明的你配上我牛皮的作图手艺,理解起来肯定没啥问题。
#专线实施这块咋们就不细聊,需要专门网络工程师协助,你可简单理解为香港和广州两台服务器之间拉了一个网线直连~比走公网效率高,真.顺着网线过去找你~
#七层HTTP代理,咋们用nginx实现,简单还高效,很香。
#不管是啥云,对于访问对象存储,基本都有一个特点,就是支持内网访问(符合一定条件),不可能说我得对象存储跟服务器隔得很近,搞不好在一个机柜上,你让我从公网访问它。
#阿里云对于对象存储策略是是直接提供内网连接地址(可能有些其他规则限制,可以自行查阅文档了解下:http://help.aliyun.com)
#腾讯云对对象存储的策略是,不直接提供内网连接地址,就给一个域名,但是这个域名可不是普通的域名,这个域名,你如果在跟对象存储同地域的服务器上ping的话是内网(需使用默认的腾讯dns服务器),在外网ping的话,就是外网,这说明如果环境符合,是可以直接通过一个地址内网访问对象存储的,也就如下图,都是广州地域,服务器默认解析至内网,那么现在已知,广州代理服务器是直接内网访问对象存储的。
#那么,我们开始操作吧,让香港服务器也能内网调用对象存储!
3.环境信息
#服务器
10.17.58.10 Centos7 cosfs工具包(cos挂载客户端) 172.16.0.8 Centos7 nginx工具包(七层代理实现)
4.部署实施
4.1代理服务器部署
#红色部分需依据实际情况填写,配置这个的目的是给香港服务器暴露对象存储的地址(对象存储的调用逻辑这个小坑很关键,需要基于A,B两个域名分别代理至A,B,为啥要把基于和目标配置一样呢,请看4.1最后一张图,就是为做地址伪装做支持,因为1.1.1.1是不能直接访问到192.168.1.1的,但是又必须遵循域名格式需求)
#client_max_body_size 1000m 最大上传值,根据实际情况填写,太小会影响挂载对象存储后的写操作体验,写入大文件时会失败。
>yum -y install nginx
>cat /etc/nginx/nginx.conf
worker_processes 1; #根据cpu核数修改 error_log logs/error.log; events { worker_connections 10240; use epoll; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; server{ listen 80; server_name <bucket-name>.<cos-domain>; #根据你得对象存储地址填写,例如:b1-6666666666.cos.ap-guangzhou.myqcloud.com charset utf-8; location /{ client_max_body_size 1000m; proxy_pass https://<bucket-name>.<cos-domain>; #同上 } } server { listen 80; server_name <cos-domain>; #这里仅映射到对象存储域名即可,例如:cos.ap-guangzhou.myqcloud.com charset utf-8; location / { client_max_body_size 1000m; proxy_pass https://<cos-domain>; #同上 } } }
#检查配置并启动
>nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
>nginx
>netstat -antp |grep LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4124/nginx: master
4.2 对象存储cos挂载客户端部署
#hosts配置,修改本地dns解析,将cos地址解析至跳板机,需添加两条解析记录[ip:cos-domain],[ip:bucket-name.cos-domain]
>vi /etc/hosts
172.16.0.8 cos-domain #例如cos.ap-guangzhou.myqcloud.com 172.16.0.8 bucket-name.cos-domain #例如b1-**********.cos.ap-guangzhou.myqcloud.com
#创建挂载点
>mkdir /mount-cos
#cosfs工具包部署
>yum -y install automake gcc-c++ git libcurl-devel libxml2-devel fuse-devel make openssl-devel
>git clone https://github.com/tencentyun/cosfs /usr/cosfs
>cd /usr/cosfs
>./autogen.sh
>./configure
>make
>make install
#创建ak,skj记录文件并基于跳板机挂载(挂载时域名填写的是腾讯cos地址,但是本地做了hosts配置,将会映射到跳板机)
#命令构成:echo <BucketName-APPID>:<SecretId>:<SecretKey> > /etc/passwd-cosfs (ak|sk获取:https://console.cloud.tencent.com/cam/capi)
>echo b1-6666666666:AKIDg6TZNkakakakakakakak:JciRt35qKaomSryuZiehsksksksksksk > /etc/passwd-cosfs
>chmod 600 /etc/passwd-cosfs
#命令构成: cosfs <BucketName-APPID> <MountPoint> -ourl=<CosDomainName> -odbglevel=info -oallow_other
> cosfs b1-6666666666 /mount-cos -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -onoxattr -oallow_other
4.3 验收测试
#挂载后验证
#写入100M文件测试(受到10M专线限制,这个速度是正常的)
#观察流量走向(图中192.168.100.102是专线idc边界ip,你可将其理解为就是香港客户端(10.17.58.10)即可)(iftop -i 网卡 -n)