设为首页 收藏本站

运维网

查看: 444|回复: 0

[经验分享] Centos 7.X部署分布式文件系统:FastDFS+Nginx-DevOps(甘兵)

[复制链接]

尚未签到

发表于 4 天前 | 显示全部楼层 |阅读模式
  1、FastDFS简介
  1.1 介绍

  •   FastDFS是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,FastDFS非常适用于基于文件服务的站点,例如图片分享和视频分享网站。
  •   FastDFS它是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
  •   支持存储服务器在线扩容,支持相同的文件只保存一份,节约磁盘。
  •   FastDFS只能通过Client API访问,不支持POSIX访问方式。
  •   FastDFS适合中大型网站使用,用来存储资源文件(如:图片、文档、视频等)
  1.2 FastDFS组成
  tracker server
  跟踪服务器:用来调度来自客户端的请求。且在内存中记录所有存储组和存储服务器的信息状态。
storage server
  存储服务器:用来存储文件(data)和文件属性(metadata)
client
  客户端:业务请求发起方,通过专用接口基于TCP协议与tracker以及storage server进行交互
  group
  组,也可称为卷:同组内上的文件是完全相同的
文件标识
  包括两部分:组名和文件名(包含路径)
meta data
  文件相关属性:键值对(Key Value Pair)方式
fid
  文件标识符: (例如: group1/M00/00/00/CgEOxVegXB2AdYafAAAB0b8tBbQ9155303 )

  •   group1:存储组的组名;上传完成后,需要客户端自行保存
  •   M00:服务器配置的虚拟路径,与磁盘选项store_path#对应
  •   00/00:两级以两位16进制数字命名的目录
  •   CgEOxVegXB2AdYafAAAB0b8tBbQ9155303:文件名,与原文件名并不相同;由storage server根据特定信息生成。文件名包含:源存储服务器的IP地址、文件创建时间戳、文件大小、随机数和文件扩展名等
  
  1.3 FastDFS同步机制

  •   同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
  •   文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
  •   源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
  提示:上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
  1.4 FastDFS特性
指标说明系统简洁性很简洁,只有两个角色:tracker、storage系统性能很高、没有使用数据库,文件同步直接点对点,不经过tracker中转系统稳定性  高、C语言开发,可支持高并发和负载
RAID方式分组(组内冗余),具有很高的灵活性通信协议专有协议,下载文件支持HTTP属性(meta,data)支持相同内容文件只保存一份支持下载文件时支持文件偏移量支持  2、背景
  在这里,我用3台服务器集群部署,这3台服务器都要部署nginx+fastdfs以及相关模块。3台服务器部署方式都一样,只不过storage服务器有些配置会不同,部署的过程中请大家看清楚在哪里操作,过程有点麻烦,请大家一定要有耐心,一步一步走下去部署是OK的。
  2.1  环境说明
  172.18.18.111(tracker服务器): nginx、fastdfs(运行tracker、storage)、fastfds其它模块
  172.18.18.112(storage服务器):nginx、fastdfs(运行storage)、fastfds其它模块
  172.18.18.113(storage服务器):nginx、fastdfs(运行storage)、fastfds其它模块
  
  2.2 软件包、安装路径
  准备的软件包:
  nginx-1.9.3.tar.gz
  lua-5.1.4.tar.gz
  libfastcommon-1.0.35.zip
  fastdfs-master.zip
  LuaJIT-2.1.0-beta2.tar.gz
  v0.2.19.tar.gz
  GraphicsMagick-1.3.25.tar.gz
  GraphicsMagick-1.3.25.tar
  安装的路径:
服务目录nginx/usr/local/nginx/fastdfs配置  /etc/fdfs/
  fastdfs
/usr/local/fastDFS/  Storage_data
/usr/local/fastDFS/storage/安装包/usr/src  3、部署FastDFS
  3.1、安装libfastcommon(tracker和storage服务器操作)
  安装fastDFS前,首先下载最新版本的libfastcommon进行安装,上传至/usr/src目录中。下载地址https://github.com/happyfish100/libfastcommon/releases

  •   解压、配置和编译:
  #cd /usr/src/
  #unzip libfastcommon-1.0.35.zip
  #cd libfastcommon-1.0.35/
  #./make.sh
  #./make.sh install
  提示:确认make没有错误后,执行安装,64位系统默认会复制到/usr/lib64下。

  •   设置环境变量、创建软链接:
  #export LD_LIBRARY_PATH=/usr/lib64/
  #ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
  3.2、安装fastdfs(tracker和storage服务器操作)
  下载最新版本的fastDFS,上传至/usr/src/目录中。下载地址:https://github.com/happyfish100/fastdfs

  •   解压、编译:
  #cd /usr/src/
  #unzip fastdfs-master.zip
  #cd fastdfs-master/
  #./make.sh
  #./make.sh install
  提示:确认make没有错误后,执行安装,默认会安装到/usr/bin中,以及会在/etc/fdfs生成以.sample结尾的4个文件,如下所示:
  #ll /etc/fdfs/
  -rw-r--r-- 1 root root 1461 Aug 12 15:48 client.conf.sample
  -rw-r--r-- 1 root root 7927 Aug 12 15:48 storage.conf.sample
  -rw-r--r-- 1 root root  105 Aug 12 15:48 storage_ids.conf.sample
  -rw-r--r-- 1 root root 7389 Aug 12 15:48 tracker.conf.sample
  # ll /usr/bin/fdfs_*
  -rwxr-xr-x 1 root root  317432 Aug 12 15:48 /usr/bin/fdfs_appender_test
  -rwxr-xr-x 1 root root  317208 Aug 12 15:48 /usr/bin/fdfs_appender_test1
  -rwxr-xr-x 1 root root  304064 Aug 12 15:48 /usr/bin/fdfs_append_file
  -rwxr-xr-x 1 root root  303800 Aug 12 15:48 /usr/bin/fdfs_crc32
  -rwxr-xr-x 1 root root  304120 Aug 12 15:48 /usr/bin/fdfs_delete_file
  -rwxr-xr-x 1 root root  304856 Aug 12 15:48 /usr/bin/fdfs_download_file
  -rwxr-xr-x 1 root root  304448 Aug 12 15:48 /usr/bin/fdfs_file_info
  -rwxr-xr-x 1 root root  322360 Aug 12 15:48 /usr/bin/fdfs_monitor
  -rwxr-xr-x 1 root root 1111640 Aug 12 15:48 /usr/bin/fdfs_storaged
  -rwxr-xr-x 1 root root  327376 Aug 12 15:48 /usr/bin/fdfs_test
  -rwxr-xr-x 1 root root  326592 Aug 12 15:48 /usr/bin/fdfs_test1
  -rwxr-xr-x 1 root root  453880 Aug 12 15:48 /usr/bin/fdfs_trackerd
  -rwxr-xr-x 1 root root  305048 Aug 12 15:48 /usr/bin/fdfs_upload_appender
  -rwxr-xr-x 1 root root  306072 Aug 12 15:48 /usr/bin/fdfs_upload_file
  3.3 配置tracker服务器(在tracker服务器操作)

  •   复制tracker样例配置文件,并重命名
  #cd /etc/fdfs/
  #cp tracker.conf.sample tracker.conf

  •   修改tracker配置文件
  #vim tracker.conf
  bind_addr=172.18.18.111     #绑定服务IP,如果不填则表示所有的
  port=22122             #提供服务的端口
  base_path=/usr/local/fastDFS    #存储日志和数据的根目录
  store_group=group1    #设当上一个参数设定为1 时 (store_lookup=1,即指定组名时),必须设置本参数为系统中存在的一个组名。如果选择其他的上传方式,这个参数就没有效了。
  store_server=1     #选择哪个storage server 进行上传操作,1表示根据ip 地址进行排序选择第一个服务器(IP地址最小者)
  download_server=1         #选择哪个 storage server 作为下载服务器,1表示哪个为源storage server 就用哪一个
  http.server_port=80        #HTTP服务端口,默认为8080,你也可以不用改,但是测试访问你要带8080端口访问
  其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

  •   创建bash_path指定路径
  #mkdir /usr/local/fastDFS/
  #mkdir -p /usr/local/fastDFS/storage/data
  3.4 配置storage服务器(tracker和storage服务器操作)

  •   复制storage样例配置文件,并重命名:
#cd /etc/fdfs/  #cp storage.conf.sample  storage.conf

  •   修改tstorage配置文件
  #vim storage.conf
  group_name=group1                       #指定此 storage server 所在 组
  bind_addr=                              #绑定服务IP,可以不用填写(如果是tracker服务器,也可以配置tracker服务器自身IP地址)
  base_path=/usr/local/fastDFS            #储日志和数据的根目录
  store_path0=/usr/local/fastDFS/storage  #第1个存储目录
  tracker_server=172.18.18.111:22122      #tracker服务器的IP和端口,如果有多个tracker服务器可以写多行
  http.server_port=80                     #HTTP服务端口,默认为8888,你也可以不用改,但是测试访问你要带8080端口访问
  其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html
  3. 5修改tracker服务器客户端配置文件(tracker服务器操作)

  •   复制client样例配置文件,并重命名
  #cd /etc/fdfs/
  #cp client.conf.sample  client.conf

  •   修改client.conf配置文件:
#cd /etc/fdfs/  #cp client.conf.sample client.conf
  #vim client.conf
  base_path=/usr/local/fastDFS              #修改路径
  tracker_server=172.18.18.111:22122    #tracker服务器IP和端口,有多个tracker服务器可以写多条配置
  4、文件上传测试
  4.1 启动tracker服务(tracker服务器操作)
  
  #/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
  检查FastDFS Tracker Server是否启动成功:
  #ps -ef | grep fdfs_trackerd
  root     27077 25738  0 15:11 pts/2    00:00:00 grep --color=auto fdfs_trackerd
  root     31854     1  0 Nov20 ?        00:02:34 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
  
  4.2 启动storage服务(tracker和storage服务器操作)
  到了这里,有些朋友可能会问我,为什么我启动storage服务也要在tracker服务器上操作呢?大家有没有注意,我在2.1的步骤中,就声明了tracker服务器同时运行(tracker、storage)这两个服务,所以不要觉得奇怪。
  # /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
  # ps -ef | grep fdfs_storaged
  root     27234 25738  0 15:15 pts/2    00:00:00 grep --color=auto fdfs_storaged
  root     31863     1  0 Nov20 ?        00:03:37 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
  4.3 执行文件上传(tracker服务器操作)

  •   我先放张测试图片(test.jpg)至/home目录下:
  #ll /home
  drwx------. 14 admin admin    4096 Apr 22  2017 admin
  -rw-r--r--   1 root  root  4121391 Dec  7 17:13 test.jpg

  •   使用fdfs_test命令来测试上传,格式如下:
  #fdfs_test /etc/fdfs/client.conf upload  /home/test.jpg
  This is FastDFS client test program v5.11
  Copyright (C) 2008, Happy Fish / YuQing
  FastDFS may be copied only under the terms of the GNU General
  Public License V3, which may be found in the FastDFS source kit.
  Please visit the FastDFS Home Page http://www.csource.org/
  for more detail.

  [2017-12-27 15:20:21] DEBUG - base_path=/usr/local/fastDFS, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server>  tracker_query_storage_store_list_without_group:
  server 1. group_name=, ip_addr=172.18.18.111, port=23000
  group_name=group1, ip_addr=172.18.18.111, port=23000
  storage_upload_by_filename
  group_name=group1, remote_filename=M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg
  source ip address: 172.18.18.111
  file timestamp=2017-12-27 15:20:21

  file>  file crc32=4134714274
  example file url: http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg
  storage_upload_slave_by_filename
  group_name=group1, remote_filename=M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg
  source ip address: 172.18.18.111
  file timestamp=2017-12-27 15:20:21

  file>  file crc32=4134714274
  example file url: http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg
  如下图的结果,能返回文件ID,说明图片上传成功:
DSC0000.jpg

  说明:刚才把test.jpg的图片上传至fastdfs了,如果要用浏览器访问测试上面给出的url地址,还需要安装nginx服务。

  •   用fdfs_delete_file命令来测试删除(这里我不做删除的测试了,我下面还要用到这张上传的图片),如下操作:
# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg4、安装LuaJIT、nginx-lua-module、GraphicsMagick模块(tracker和storage服务器操作)
  4.1 安装LuaJIT

  •   下载最新的LuaJIT,然后上传至/usr/src目录下:
  #cd /usr/src
  #wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz

  •   解压、配置:
  # tar zxf LuaJIT-2.1.0-beta2.tar.gz
  # cd LuaJIT-2.1.0-beta2
  # make
  # make install
  4.2 安装nginx_devel_kit(NDK)模块

  •   下载最新的nginx_devel_kit模块,然后上传至/usr/src目录下:
  #cd /usr/src
  # wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz

  •   解压、配置:
  # tar zxf LuaJIT-2.1.0-beta2.tar.gz
  # cd LuaJIT-2.1.0-beta2
  # make
  # make install
  4.3 安装lua_nginx_module模块

  •   下载最新的nginx_devel_module模块,然后上传至/usr/src目录:
  #cd /usr/src
  # wget https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz
  4.4 安装GraphicsMagick模块(免费的图片编辑、合成等功能的软件)

  •   下载最新的GraphicsMagick模块,然后上传至/usr/src目录:
  #cd /usr/src
  #wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.5.tar.gz

  •   安装ImageMagick依赖包:
  # yum -y install libpng-devel libpng
  # yum -y install libjpeg-devel libjpeg
  # yum -y install libtool-ltdl libtool-ltdl-devel
  #yum -y install ImageMagick ImageMagick-devel

  •   编译、配置:
  # cd GraphicsMagick-1.3.25
  # ./configure
  #make && make install
  
  PS: 将会默认在一下目录中安装相应文件:
  /usr/local/bin
  /usr/local/include
  /usr/local/lib
  /usr/local/share
  提示:整个第4步可根据公司的业务情况来增加这些模块,如果你们公司不需要用到这些模块,这一步可以省略......
  
5、安装fastdfs-nginx-module模块(在所有storage节点安装,相当于在tracker和storage服务器操作)
  5.1 fastdfs-nginx-module作用说明
  FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设 Tracker 服务器将文件上传到了 ip01,上传成功后文件 ID 已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 ip02,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 ip02 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)。
  5.2 下载fastdfs-nginx-module
  下载最新的fastdfs-nginx-module,然后上传至/usr/src目录下:
  #cd /usr/src
  #wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
  #unzip master
  
  5.3 安装nginx依赖包
  
#yum -y install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel  5.3 编译安装nginx(把刚才几个模块编译添加进去)
  
  # cd /usr/src
  #tar -zxvf nginx-1.9.3.tar.gz
  # cd nginx-1.9.3
  # ./configure --prefix=/usr/local/nginx --user=www --group=www \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --with-pcre  \
  --with-http_ssl_module \
  --with-stream  \
  --add-module=/usr/src/fastdfs/ngx_devel_kit-0.2.19/ \
  --add-module=/usr/src/fastdfs/lua-nginx-module-0.10.2/ \
  --add-module=/usr/src/fastdfs/fastdfs-nginx-module-master/src
  #make
  #make install
  
  如果出现如下错误:
  ./configure: error: ngx_http_lua_module requires the Lua library.
  解决:

  •   安装lua的相关依赖:yum install readline-dev readline-devel
  •   安装lua5.1:
  下载lux5.1的包
  # tar -zxvf lua-5.1.4.tar.gz
  # cd lua-5.1.4
  # make linux test
  # make install
  然后在重新:
  ./configure
  make &&  make install
  5.4 复制fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改
  
  #cp /usr/src/fastdfs-nginx-module/src/mod_fastdfs.conf      /etc/fdfs/
  #vim /etc/fdfs/mod_fastdfs.conf
  修改以下内容:
  base_path=/usr/local/fastDFS                          #存储数据库根目录
  tracker_server=172.18.18.111:22122                #tracker服务器IP和端口
  url_have_group_name = true                            #url中包含group名称
  store_path0=/usr/local/fastDFS/storage
  log_filename=/usr/local/fastDFS/logs/mod_fastdfs.log  #mod_fastdfs日记存放路径
  group_count = 1
  在文件末尾添加:
  [group1]
  group_name=group1
  storage_server_port=23000
  store_path_count=1
  store_path0=/usr/local/fastDFS/storage
  #手动创建mod_fastdfs.log日志文件
  #touch  /usr/local/fastDFS/log/mod_fastdfs.lo
  
  5.5 复制 fastdfs-mast的部分配置文件到/etc/fdfs 目录
  
  #cd /usr/src/fastdfs-master/conf
  #cp http.conf mime.types /etc/fdfs/
  5.6 nginx配置、启动

  •   创建www用户
  #groupadd www
  #useradd -g www www

  •   修改fastDFS目录属组权限:
#chown  -R www:www /usr/local/fastDFS/

  •   修改nginx.conf文件:
  #vim /usr/local/nginx/conf/nginx.conf
  user  www;
  worker_processes  auto;
  server {
  listen       80;
  server_name  localhost;
  location / {
  root   html;
  index  index.php index.html index.htm;
  location /group1/M00 {
  ngx_fastdfs_module;
  alias /usr/local/fastDFS/storage/data;
  set $image_root "/usr/local/fastDFS/storage/data";
  if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") {
  set $image_dir "$image_root/$3/$4/";
  set $image_name "$5";
  set $file "$image_dir$image_name";
  }
  if ($image_name ~ "([a-zA-Z0-9_\-]+)_([0-9]+x[0-9]+|water)?(q[0-9]{1,2})?.([a-zA-Z0-9]+)") {
  set $a  "$1";
  set $b  "$2";
  set $c  "$3";
  set $d  "$4";
  set $e  "$5";
  set $f  "$6";
  set $file "$file";
  }
  }
  }
  说明:
  A、/etc/fdfs/storage.conf 中的配置 http.server_port=8888 ,默认端口是8888,我改成 80,如果大家没有修改这个默认端口,那么nginx配置监听的端口也要改成8888。
  B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:
  location ~/group([0-9])/M00 {
  ngx_fastdfs_module;
  }

  •   启动nginx服务:
  #/usr/local/nginx/sbin/nginx  -t
  ngx_http_fastdfs_set pid=6715
  nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  #/usr/local/nginx/sbin/nginx
  6、用http的方式测试刚才上传的图片
  http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg
  测试如下图所示:
DSC0001.jpg

  到这里有点难为情了,上面这张是笔者自己的照片,在电脑上随手拿了一张图片就上传了,唯一一张图片,当然,读者朋友们觉得很帅的话也可以收藏起来,哈哈!!
  然后,我们来测试一下图片能不能裁剪(前提条件是你要配置了4.4的操作步骤),修改下面红色的字体为裁剪的大小,然后在浏览器中访问:
  http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_400x400.jpg
DSC0002.jpg

  通过上图可以看到,我这里可以把上传的图片进行裁剪,图片确实裁剪小了,是OK的。
  7、fastDFS一些简单操作命令
  
  #重启storage服务:
  # /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
  #重启tracker服务:
  # /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
  #关闭storage服务:
  # killall fdfs_storaged
  #关闭tracker服务:
  # killall fdfs_trackered
  #查看集群状态:
  #/usr/bin/fdfs_monitor   /etc/fdfs/storage.conf
  #上传操作:
  #fdfs_test  /etc/fdfs/client.conf  upload  文件具体url
  #删除操作:
  #fdfs_delete_file  /etc/fdfs/client.conf  上传后的路径
  比如:
  #fdfs_delete_file  /etc/fdfs/client.conf group1/M00/00/00/ZciEZlepkl6Abj28AAAPOSSdASU225_big.gif)
  8、Java API 客户端配置
1.前往GitHub下载Java_client代码。https://github.com/fzmeng/fastdfs.client
2.在你的项目src/java/resources 下加入文件 fastdfs_client.conf
  注意修改tracker服务器Ip地址:
  connect_timeout = 2
  network_timeout = 30
  charset = ISO8859-1
  http.tracker_http_port = 80
  http.anti_steal_token = no
  tracker_server=172.18.18.111:22122
  default_group_name=group1
  当然,还有php及其它客户端连接到fastdfs,我就不挨个介绍了,感兴趣的朋友可以自行百度或留言讨论,最后要感谢张秋方大师笔者才能才能顺利完成此篇文稿。
  参考文章:
  http://blog.51cto.com/xinzong/1834466
  https://github.com/qieangel2013/nginxLuaGmFastdfs



运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表