设为首页 收藏本站
查看: 824|回复: 0

[经验分享] tenginx+ImageMagick+Lua+FastDfs分布式自动缩略图

[复制链接]
发表于 2019-1-31 14:08:47 | 显示全部楼层 |阅读模式
  1.安装ImageMagick图片处理软件
  [root@node2 ~]# tar xvf ImageMagick-6.4.0-0.tar.gz
  [root@node2 ~]# cd ImageMagick-6.4.0
  [root@node2 ImageMagick-6.4.0]# ./configure --prefix=/usr/local/ImageMagick-6.4.0
  [root@node2 ImageMagick-6.4.0]# make && make install
  [root@node2 ImageMagick-6.4.0]#
  

  2.安装lua脚本语言
  [root@node2 ~]# yum install lua* -y
  

  3.安装tenginx服务(必须先下载ngx_cache_purge和fastdfs-nginx-module模块)
  [root@node2 ~]# tar xvf tengine-2.1.0.tar.gz
  [root@node2 ~]# cd tengine-2.1.0
  [root@node2 tengine-2.1.0]#  --prefix=/usr/local/tenginx-2.1.0 --with-file-aio --with-poll_module --with-pcre=/usr/local/pcre-8.37 --without-http_autoindex_module --without-http_ssi_module --without-maingx_cache_purgel_pop3_module --without-mail_smtp_module --without-mail_imap_module --with-http_lua_module --with-ld-opt=-Wl,-rpath,/usr/local/lib --with-http_realip_module --with-http_concat_module --add-module=/root/ngx_cache_purge-1.6 --add-module=/root/fastdfs-nginx-module/src
  [root@node2 tengine-2.1.0]# make -j4 && make install
  [root@node2 tengine-2.1.0]# vim /usr/local/tenginx-2.1.0/conf/nginx.conf
  server {
    listen 800;
    server_name localhost;
    location / {
       root html  ;
       index  index.html index.htm;
    }
  [root@node2 tengine-2.1.0]# /usr/local/tenginx-2.1.0/sbin/nginx

  

  4.安装fastDFS分布式文件系统
  fastDFS必须有三个节点,一个tracker节点,两个storage节点.tracker节点是管理,监控,维护两个数据节点,文件上传.storage数据节点是做文件存储,校验,容灾.tenginx必须装在storage节点上.
  node1节点:(tracker节点)
  [root@node1 ~]# tar xvf fastdfs-5.04.tar.gz
  [root@node1 ~]# cd fastdfs-5.04
  [root@node1 fastdfs-5.04]# ./make.sh
  [root@node1 fastdfs-5.04]# ./make.sh install
  [root@node1 ~]# vim /etc/fdfs/tracker.conf
  [root@node1 ~]# egrep -v '^#|^$' /etc/fdfs/tracker.conf
  disabled=false      --不禁用服务
  bind_addr=192.168.2.112   --本机的IP地址
  port=22122            --服务端口
  connect_timeout=30      --客户端会话连接超时
  network_timeout=60      --网络连接超时
  base_path=/home/fastdfs   --存储目录
  max_connections=256      --最大连接数
  accept_threads=2        --访问线程
  work_threads=4         --工作线程
  store_group=group1      --组名
  download_server=0       --下载方式(0  是轮循,1  是指定节点)
  reserved_storage_space = 10%   --预留存储空间
  log_level=info         --日志级别
  run_by_group=         --以哪个用户组运行
  run_by_user=
  allow_hosts=*         --允许哪个IP访问
  http.server_port=800    --web访问的端口
  http.check_alive_interval=30
  http.check_alive_type=tcp
  http.check_alive_uri=/status.html
  [root@node1 ~]# egrep -v '^#|^$' /etc/fdfs/client.conf
  connect_timeout=30
  network_timeout=60
  base_path=/home/fastdfs          --存储目录
  tracker_server=192.168.2.112:22122   --tracker节点的IP和端口
  log_level=info
  use_connection_pool = false
  connection_pool_max_idle_time = 3600
  load_fdfs_parameters_from_tracker=false
  use_storage_id = false
  storage_ids_filename = storage_ids.conf
  http.tracker_server_port=800
  [root@node1 ~]#
  

  node2和node3节点:(storage节点)
[root@node2 ~]# tar xvf fastdfs-5.04.tar.gz
[root@node2 ~]# cd fastdfs-5.04
[root@node2 fastdfs-5.04]# ./make.sh
[root@node2 fastdfs-5.04]# ./make.sh install
  [root@node2 fastdfs-5.04]# egrep -v '^#|^$' /etc/fdfs/storage.conf
  disabled=false
  group_name=group1
  bind_addr=192.168.2.114    --本机IP地址
  client_bind=true
  port=23000             --storage节点的端口
  connect_timeout=30
  network_timeout=60
  heart_beat_interval=30
  stat_report_interval=60
  base_path=/home/fastdfs    --存储目录
  max_connections=256
  buff_size = 256KB
  accept_threads=1
  work_threads=4
  disk_rw_separated = true
  disk_reader_threads = 1
  disk_writer_threads = 1
  sync_wait_msec=50
  sync_interval=0
  sync_start_time=00:00
  sync_end_time=23:59
  write_mark_file_freq=500
  store_path_count=1
  store_path0=/home/fastdfs
  subdir_count_per_path=256
  tracker_server=192.168.2.112:22122    --tracker节点的IP和端口
  log_level=info
  run_by_group=
  run_by_user=
  allow_hosts=*
  file_distribute_path_mode=0
  file_distribute_rotate_count=100
  fsync_after_written_bytes=0
  sync_log_buff_interval=10
  sync_binlog_buff_interval=10
  sync_stat_file_interval=300
  thread_stack_size=512KB
  upload_priority=10
  if_alias_prefix=
  check_file_duplicate=0
  file_signature_method=hash
  key_namespace=FastDFS
  keep_alive=0
  use_access_log = false
  rotate_access_log = false
  access_log_rotate_time=00:00
  rotate_error_log = false
  error_log_rotate_time=00:00
  rotate_access_log_size = 0
  rotate_error_log_size = 0
  file_sync_skip_invalid_record=false
  use_connection_pool = false
  connection_pool_max_idle_time = 3600
  http.domain_name=
  http.server_port=800
  [root@node2 fastdfs-5.04]# cd
  [root@node2 ~]# tar xvf fastdfs-nginx-module_v1.16.tar.gz  --加载fastdfs-nginx-module模块配置文件
  [root@node2 ~]# cp -a fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/
  [root@node2 ~]# egrep -v '^$|^#' /etc/fdfs/mod_fastdfs.conf
  connect_timeout=2
  network_timeout=30
  base_path=/home/fastdfs
  load_fdfs_parameters_from_tracker=true
  storage_sync_file_max_delay = 86400
  use_storage_id = false
  storage_ids_filename = storage_ids.conf
  tracker_server=192.168.2.112:22122      --tracker节点的IP和端口
  storage_server_port=23000
  group_name=group1
  url_have_group_name = true
  store_path_count=1
  store_path0=/home/fastdfs
  log_level=info
  log_filename=
  response_mode=proxy
  if_alias_prefix=
  flv_support = true
  flv_extension = flv
  group_count = 0
  [group1]
  group_name=group1
  storage_server_port=23000
  store_path_count=1
  store_path0=/home/fastdfs
  
  [root@node2 ~]# cp fastdfs-5.04/init.d/fdfs_storaged  /etc/init.d/
  [root@node2 ~]# chkconfig --add fdfs_storaged
  [root@node2 ~]# chkconfig fdfs_storaged on
  node3同node2配置是一样的,只是绑定的IP不一样而已
  

  5.在storage节点1上修改tenginx的配置文件
  [root@node2 ~]# vim /usr/local/tenginx-2.1.0/conf/nginx.conf
  
  server {
    listen 800;
    server_name localhost;
    location /lua {
       default_type 'text/plain';
       content_by_lua 'ngx.say("hello,lua")';
       }
    location ~* /group1/M00/  {
        ngx_fastdfs_module;
        set $needCreateImg 0;
        if ( !-f $request_filename) {
           set $needCreateImg "${needCreateImg}1";
        }
  

       if ($uri ~* "/group1/M00/(\d+)/(\d+)/([A-Za-z0-9_-]+).(gif|jpg|jpeg|png).(\d+x\d+).(gif|jpg|jpeg|png)") {
           set $needCreateImg "${needCreateImg}2";
           set $conUri     "/$1/$2/$3.$4.$5.$6";
        }
  

        if ($needCreateImg = "012") {
           set $image_root "/home/fastdfs/data";
           set $file "$image_root$conUri";
              rewrite_by_lua '
                 local index = string.find(ngx.var.conUri, "([0-9]+)x([0-9]+)");
                 local originalUri = string.sub(ngx.var.conUri, 0, index-2);
                 local area = string.sub(ngx.var.conUri, index);
                 index = string.find(area, "([.])");
                 area = string.sub(area, 0, index-1);
  

                 function table.contains(table, element)
                   for _, value in pairs(table) do                 
                     if value == element then
                       return true
                     end
                    end
                    return false
                  end
  

                  local c = "/usr/local/GraphicsMagick-1.3.23/bin/gm convert " .. ngx.var.image_root ..  originalUri  .. " -thumbnail " .. area .. " - ";
                  local f = assert(io.popen(c, "r"))
                  local s = assert(f:read("*a"))
                  f:close()
                  ngx.say(s) ';
                }

             alias /home/fastdfs/data/;
          }
  
  [root@node2 ~]# /usr/local/tenginx-2.1.0/sbin/nginx -s reload
  ngx_http_fastdfs_set pid=5233
  [root@node2 ~]#
  

  6.在tracker节点上传图片
  [root@node2 ~]# fdfs_test /etc/fdfs/client.conf upload 26.jpg
  This is FastDFS client test program v5.02
  

  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.
  

  [2016-09-09 17:07:03] DEBUG - base_path=/home/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 id count: 0
  

  tracker_query_storage_store_list_without_group:
  server 2. group_name=, ip_addr=192.168.2.114, port=23000
  server 3. group_name=, ip_addr=192.168.2.146, port=23000
  

  group_name=group1, ip_addr=192.168.2.114, port=23000
  storage_upload_by_filename
  group_name=group1, remote_filename=M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803.jpg
  source ip address: 192.168.2.114
  file timestamp=2016-09-09 17:07:10
  file size=32187
  file crc32=453560789
  example file url: http://192.168.2.114:800/group1/M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803.jpg
  storage_upload_slave_by_filename
  group_name=group1, remote_filename=M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803_big.jpg
  source ip address: 192.168.2.114
  file timestamp=2016-09-09 17:07:10
  file size=32187
  file crc32=453560789
  example file url: http://192.168.2.114:800/group1/M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803_big.jpg
  [root@node2 ~]#
  

  7.访问图片并切图
  http://192.168.2.114:800/group1/M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803.jpg
  http://192.168.2.114:800/group1/M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803.jpg_200x200.jpg
  http://192.168.2.114:800/group1/M00/00/00/wKgCclfSe76AYHqXAAB9uxsIydU803.jpg_400x400.jpg



  






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670121-1-1.html 上篇帖子: FastDFs 开源的轻量级分布式文件系统部署 下篇帖子: FastDFS专题】fastdfs使用实战(概念篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


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


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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