人若无名,便可专心练剑

raspberry +迅雷远程下载+硬盘 打造自己的NAS

  |   1 评论   |   9,316 浏览


主要资源:

        1, raspberry  2 model B

        2,带隔离usb HUB 一个

        3,废弃笔记本硬盘一个

     

(硬盘分区,硬盘挂载,本文将会详述,如有问题可以留言,或者自行解决)

一:首先下载迅雷嵌入式固件

http://luyou.xunlei.com/thread-12209-1-1.html?_t=1425479152 下载相应版本的固件

二:下载下来后解压

unzip Xware1.0.31_armel_v7a_uclibc.zip -d Xware
三:运行并配置

进入解压目录Xware      

root@raspberrypi:/opt/Xware# ls -al
total 4460
drwxr-xr-x 2 root root    4096 Mar  4 14:29 .
drwxr-xr-x 8 root root    4096 Mar  4 14:29 ..
-rwxrwxr-x 1 root root   24897 Aug 27  2014 ETMDaemon
-rwxrwxr-x 1 root root 4366446 Aug 27  2014 EmbedThunderManager
-rwxrwxr-x 1 root root  131247 Aug 27  2014 portal
-rwxrwxr-x 1 root root   24019 Aug 27  2014 vod_httpserver
然后运行程序
./portal
相应的停止程序:
./portal -s

初始化后,会有如下日志

initing...
try stoppingxunlei service...
killall:ETMDaemon: no process killed
killall:EmbedThunderManager: no process killed
setting xunleiruntime env...
port: 9000 isusable.
your control port is: 9000.
startingxunlei service...
execv:/opt/Xware/ETMDaemon.
getting xunleiservice info...
Connecting to127.0.0.1:9000 (127.0.0.1:9000)
portal.tmp               0T --:--:-- ETA
THE ACTIVE CODE IS: 15MCD2
go tohttp://yuancheng.xunlei.com, bind your device with the active code.
finished.

然后我们访问

http://yuancheng.xunlei.com 然后输入激活code 就可以同我们迅雷vip 帐号绑定(安装详情:http://g.xunlei.com/thread-30-1-1.html)。
这时候我们可以到http://yuancheng.xunlei.com 直接添加任务进行下载
 如图:



root@raspberrypi:/media/disk2/TDDOWNLOAD# ls -al
total 28
drwxrwxrwx 3 root root  4096 Mar  4 14:03 .
drwxr-xr-x 5 root root  4096 Mar  4 14:27 ..
-rwxrwxrwx 1 root root 16342 Mar  4 14:03 CF55EF316F4A9DC599FE86B237A5EB0563CD8145.torrent
drwxrwxrwx 3 root root  4096 Mar  4 14:26 Supernatural.S10E14.HDTV.x264-LOL[ettv]



通过samba服务器,建立文件共享服务器

一:安装samba 服务器


root@raspberrypi:/home/pi#  apt-get install samba samba-common-bin
二:配置配置文件




root@raspberrypi:/home/pi# vim /etc/samba/smb.conf

将原来的备份,然后情况该文件并加入如下内容
[global]
    workgroup = WORKGROUP
    security = user
    guest account = pi
    map to guest = bad user
    wins support = yes
    log level = 1
    max log size = 1000

[usb]
    path = /media/
    read only = no
    force user = pi
    force group = pi
    guest ok = yes
现在我们就可以通过smb协议进行文件共享



下面我们以linux 访问共享服务器为例:




图2:



图3:



:-):这样就简单弄成了一个属于自己的nas

无论在家里还时在公司甚至在网吧,我们随时可以通过迅雷远程下载下载文件到我们的nas服务器,然后回家再欣赏。



win7 安装docker,virtualbox遇到的问题

  |   0 评论   |   4,226 浏览

问题1:无法创建unbuntu 64bit 虚拟机

          安装完virtualbox后,新建虚拟机。类型选择为Linux时,版本下拉选项只有ubuntu 32bit,无ubuntu 64bit。

原因

     64 bit 的虚拟机需要硬件虚拟化支持,而BIOS 默认将它关闭了。

解决方案

     重启计算机,按F2进入BIOS设置

     在CPU设置下面,将“Intel虚拟化技术”状态设置为打开,保存并退出,重启计算机。

     再进入virtualbox就可以看到ubuntu 64bit这个选项了。



问题2:virtualbox不能为虚拟电脑启动一个新任务

     错误详情如下:


      Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 (VERR_UNRESOLVED_ERROR).


     返回 代码:E_FAIL (0x80004005)


     组件:Console


     界面:IConsole {8ab7c520-2442-4b66-8d74-4ff1e195d2b6}


原因

      宿主机win7用的ghost系统,会破解uxtheme.dll文件,导致virtualbox启动失败

解决方案

      使用原版的uxtheme.dll替换c:\windows\system32\uxtheme.dll即可。Windows7 64bit uxtheme.dll这里下载

补充

     这个问题,很多网友都遇到。有的启动失败,是因为VBoxDD.dll的文件路径包含了中文。而我遇到的问题时因为uxtheme.dll文件错误。这个问题的详细说明请参考这篇博文

FastDfs Java Client 的使用

  |   0 评论   |   5,569 浏览

1,获取配置 

String configFilePath = classPath + File.separator + "client.conf";
2,全局初始化配置
 ClientGlobal.init(configFilePath);  
3,获取一个跟踪节点实例
TrackerClient trackerClient = new TrackerClient();  
TrackerServer trackerServer = trackerClient.getConnection();
4,根据跟踪节点获取存储节点实例
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
说明:
如果需要获取所有存储节点:
String group_name = null;  
StorageServer[] storageServers = trackerClient.getStoreStorages(trackerServer, group_name);
5,上传文件
NameValuePair[] meta_list = new NameValuePair[1];  //添加文件属性
File file = new File("D:/mzl/工作资料/fastDFS/testFile/500fd9f9d72a6059496335a02b34349b033bba1d.jpg");  
FileInputStream fis = new FileInputStream(file);  
byte[] file_buff = null;  
if(fis != null){  
int len = fis.available();  
file_buff = new byte[len];  
fis.read(file_buff);  
}
String[] results = storageClient.upload_file(file_buff, "jpg", meta_list);
results 结果中包含有文件名所在组名,及文件保存路径名
格式:upload_file(字节流,拓展名,文件属性);
6,获取上传文件相关信息


storageClient.get_file_info(group_name, remote_filename)



具体代码已经托管Github, 传送门:https://github.com/c2y2/fastDFSDemo



分布式文件系统fastDFS+Nginx 集成

  |   0 评论   |   8,612 浏览
架构:
跟踪节点(tracker) :跟踪器主要做调度工作,在访问上起负载均衡的作用
                                   比如我们上传文件时需先向tacker节点申请存储节点,tracker根据资源情况给我们返回一台存储节点,并通过返回的存储节点上传到存储节点服务器(存储节点间数据自动同步)

存储节点(storager):存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,
                                   FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,
                                   以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。
                                   文件metadata是文件属性列表,可以 包含多个键值对


环境:Centos6.5
tracker:192.168.3.111 cluster1  nginx1:用作负载
storager:   192.168.3.112 cluster2  nginx2:用于存储节点1文件获取  192.168.3.113 cluster3 nginx3:用于存储节点2文件获取 


环境准备:
 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel git libevent

 另外需要安装额外的commonlib包:



 需要准备一个用户和一个用户组:
 useradd fastdfs -M -s /sbin/nologin (默认会创建一个用户组)
 
 useradd nginx -M -s /sbin/nologin (默认会创建一个用户组) 

安装:
(注:无论tracker节点,还是storager节点安装都一样 ,安装记录只以tracker为准 。但是如果安装nginx集成则有点不一样,nginx只需在storage节点安装fastdfs-nginx-module模块
       下载安装文件: fastdfs:

1,下载
当前目录:/home/cluster1
[root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs.git 
下载nginx 
[root@localhost cluster1]# git clone https://github.com/nginx/nginx.git
下载fastdfs-nginx-module 模块
[root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
 2,安装
   [root@localhost cluster1]#  cd fastdfs
   [root@localhost cluster1]# ./make.sh && ./make.sh install
安装nginx:
  [root@localhost cluster1]#cd nginx
  [root@localhost cluster1]#    ./configure --user=nginx --group=nginx 
  如果为存储节点编译安装时需要加载集成插件
  [root@localhost cluster2]#    ./configure --user=nginx --group=nginx   --add-module=/home/cluster3/fastdfs-nginx-module/src

说明:安装后程序会默认安装到系统bin目录下
3,拷贝几个额外的配置文件(安装后/etc/fdfs/ 目录下已经有这么几个默认文件:client.conf.sample   storage.conf.sample  tracker.conf.sample)
    [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/httpd.conf /etc/fdfs/  (如果要用httpserver 或者使用nginx作为文件获取服务器必须要这个文件)
    [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/mime.types /etc/fdfs/ 
4,关闭防火墙或则建立防火墙规则(很重要
      

配置:
(注意:配置tracker 和storager 存在区别)

1,tracker 配置
     a,创建相关数据存放目录
          [root@localhost cluster1]# mkdir -p /data/fastdfs/tracker
     b, copy配置模板文件
           [root@localhost cluster1]#   cp -rv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
      c, 配置copy的后文件
           [root@localhost cluster1]#   vim  /etc/fdfs/tracker.conf
           将该文件做以下修改:
               base_path=/data/fastdfs/tracker
               store_lookup=0
               store_group=g1 #(上传文件时存放的组名)
               store_path=0
               run_by_group=fastdfs
               run_by_user=fastdfs
               rotate_error_log=true

            默认会启动自带的httpserver 我们可以注销掉相关配置:
               # HTTP port on this tracker server
               #http.server_port=8080
               # check storage HTTP server alive interval seconds
               # <= 0 for never check
               # default value is 30
               #http.check_alive_interval=30
               # check storage HTTP server alive type, values are:
               #   tcp : connect to the storge server with HTTP port only,
               #        do not request and get response
               #   http: storage check alive url must return http status 200
               # default value is tcp
               #http.check_alive_type=tcp

               # check storage HTTP server alive uri/url
               # NOTE: storage embed HTTP server support uri: /status.html
               #http.check_alive_uri=/status.html
       d:配置服务项并注册为服务
               [root@localhost  cluster1]# cp /home/cluster1/fastdfs/init.d/fdfs_trackerd /etc/init.d/
               [root@localhost  cluster1]# chkconfig --add fdfs_trackerd
               [root@localhost  cluster1]# chkconfig fdfs_trackerd on


tracker节点nginx配置:
  [root@localhost  cluster1]# vim /usr/local/nginx/conf/nginx.conf
     user nginx nginx;
    pid        /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 1024;
    events {
    use epoll;
    worker_connections  1024;
     }
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  /usr/local/nginx/logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream server_g1{
                server 192.168.3.112:80;
                server 192.168.3.113:80;
        }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       # location / {
        #    root   html;
         #   index  index.html index.htm;
        #}

        location / {
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}
}
2,配置storager (使用cluster2,另外cluster3 也如此 )
             a,创建相关数据存放目录
          [root@localhost cluster2]# mkdir -p /data/fastdfs/storage/data
           b, copy配置模板文件
           [root@localhost cluster2]#   cp -rv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
           [root@localhost cluster2]#   cp -rv  /home/cluster2/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
          c, 配置copy的后文件
           [root@localhost cluster2]#   vim  /etc/fdfs/storage.conf
               将该文件做以下修改:
                    group_name=g1  #(和tracker节点 保持一致性)
                    base_path=/data/fastdfs
                    store_path_count=1
                    store_path0=/data/fastdfs/storage
                    tracker_server=192.168.3.111:22122 #tracker 节点 
                    run_by_group=fastdfs
                    run_by_user=fastdfs
                    file_distribute_path_mode=1 #文件分布式路径模式 开启
                    rotate_error_log=true #开启错误日志

              默认会启动自带的httpserver 建议注销掉相关配置:  
                       # use the ip address of this storage server if domain_name is empty,
                       # else this domain name will ocur in the url redirected by the tracker server
                       #http.domain_name=
                       # the port of the web server on this storage server
                      #http.server_port=80

         配置mod_fastdfs.conf 插件配置文件其他项保持不变或者根据自己需要配置
     tracker_server=192.168.3.111:22122
     group_name=g1
     url_have_group_name = true
     store_path_count=1
     store_path0=/data/fastdfs/storage  

注意:mod_fastdfs.conf 先关属性配置必须和storage.conf 配置保持一致

          d:修改httpd.conf 文件 
               #http.anti_steal.secret_key=FastDFS1234567890
               #http.anti_steal.token_check_fail=/home/yuqing/fastdfs/conf/anti-steal.jpg


               配置Nginx 配置
               [root@localhost cluster2]# vim /usr/local/nginx/conf/nginx.conf
               user nginx nginx;
                pid /usr/local/nginx/logs/nginx.pid;
       worker_rlimit_nofile 1024;
     events {
         use epoll;
         worker_connections  1024;
     }
     
     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"';

          sendfile        on;
          #tcp_nopush     on;
          #keepalive_timeout  0;
           keepalive_timeout  65;
           #gzip  on;
         server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        access_log /usr/local/nginx/logs/access.log main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /g1/M00{
                root /data/fastdfs/storage/data;
                ngx_fastdfs_module;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }
      }                         
          e: 配置并注册成为系统服务(我们也可以不注册成为系统服务,使用全路径名启动)
               [root@localhost cluster2]# cp /home/cluster2/fastdfs/init.d/fdfs_storaged/ /etc/init.d/fdfs_storaged
               [root@localhost cluster2]# chkconfig --add fdfs_storaged
               [root@localhost cluster2]# chkconfig fdfs_storaged on
3,测试
      a, 启动tracker节点
             [root@localhost cluster1]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
              查看是否启动成功(我们可以使用ps或者netstat 命令查看端口22122)

               nginx 启动:
            [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
      b, 启动storage节点
              [root@localhost ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
                查看是否启动成功(我们可以使用ps或者netstat 命令查看端口 23000)
              nginx 启动:
            [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
                
     配置客户端进行上传或者下载(实例为:命令行上传下载   另外官方提供了 java的lib包 也可以使用java 实现上传下载)
       c:配置客户端配置
               我们以cluster2 为客户机
             [root@localhost cluster2]# pwd
               /home/cluster2
             [root@localhost cluster2]#vim client.conf
             加入如下内容并保存:
               base_path=/data/fastdfs
               tracker_server=192.168.3.111:22122    
       测试上传文件:
          [root@localhost cluster2]# fdfs_upload_file client.conf nginx.tar.gz   #格式 fdfs_upload_file  配置文件 需要上传的文件
          g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz #上传成功后返回的路径
          测试下载文件 
           [root@localhost cluster2]# fdfs_download_file client.conf g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls
client.conf  fastdfs  fastdfs-nginx-module  libfastcommon  mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz  nginx  nginx.tar.gz  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls -al
total 531072
drwx------.  6 cluster2 cluster2      4096 Jan 20 17:54 .
drwxr-xr-x.  3 root     root          4096 Dec 23 02:59 ..
-rw-------.  1 cluster2 cluster2       603 Jan 16 06:18 .bash_history
-rw-r--r--.  1 cluster2 cluster2        18 Oct 16 06:56 .bash_logout
-rw-r--r--.  1 cluster2 cluster2       176 Oct 16 06:56 .bash_profile
-rw-r--r--.  1 cluster2 cluster2       124 Oct 16 06:56 .bashrc
-rw-r--r--   1 root     root            60 Jan 20 17:42 client.conf
drwxr-xr-x  11 root     root          4096 Jan 20 07:36 fastdfs
drwxr-xr-x   4 root     root          4096 Jan 20 07:52 fastdfs-nginx-module
drwxr-xr-x   5 root     root          4096 Jan 20 07:36 libfastcommon
-rw-rw-r--.  1 cluster2 cluster2 478325708 Jan  5 08:07 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
-rw-------.  1 cluster2 cluster2        23 Jan  6 00:57 .ndb_mgm_history
drwxr-xr-x  10 root     root          4096 Jan 20 08:00 nginx
-rw-r--r--   1 root     root      32716800 Jan 20 08:11 nginx.tar.gz  #(先前上传的源文件)
-rw-r--r--   1 root     root      32716800 Jan 20 17:54 wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz (刚刚下载的文件)

文件校验:
     [root@localhost cluster2]# md5sum nginx.tar.gz 
     ba70c99623327cf632a45c10ef4bb423  nginx.tar.gz
     [root@localhost cluster2]# md5sum wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
     ba70c99623327cf632a45c10ef4bb423  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
我们下载的文件内容和我们原来上传的文件内容一致

另外我们可以检查运行状态
[root@localhost cluster2]#fdfs_monitor client.conf

添加nginx后用图片进行测试:
          [root@localhost cluster2]# fdfs_upload_file client.conf 500fd9f9d72a6059496335a02b34349b033bba1d.jpg 
                    g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                然后我们直接用浏览器进行访问:
                nginx1:http://192.168.3.111/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                         
                         
                nginx3:http://192.168.3.113/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                         

注意:权限很重要,如果你不知道具体权限怎么设置 请强数据存放目录设置为 777 
          如:数据存放路径/data/fastdfs/storage
          我们设置权限: chmod -R 777  /data/fastdfs


一些常见错误:
ngx_http_fastdfs_process_init pid=17609
ERROR - file: ini_file_reader.c, line: 315, include file "http.conf" not exists, line: "#include http.conf"
ERROR - file: /usr/local/src/fastdfs-nginx-module/src//common.c, line: 155, load conf file
"/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
 [alert] 17607#0: worker process 17609 exited with fatal code 2 and cannot be respawned

解决方案:

你看下安装包的conf目录下,有几个配置文件,把http.conf,mime.types,拷贝到/etc/fdfs/下,http.conf里有 个配置应该是token验证的功能,如果你要打开

,应该把路径配置正确














分布式文件系统fastDFS部署与配置

  |   0 评论   |   5,266 浏览
架构:
跟踪节点(tracker) :跟踪器主要做调度工作,在访问上起负载均衡的作用
                                   比如我们上传文件时需先向tacker节点申请存储节点,tracker根据资源情况给我们返回一台存储节点,并通过返回的存储节点上传到存储节点服务器(存储节点间数据自动同步)
存储节点(storager):存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,
                                   FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,
                                   以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。
                                   文件metadata是文件属性列表,可以 包含多个键值对


环境
tracker:192.168.3.111 cluster1
storager:   192.168.3.112 cluster2  192.168.3.113 cluster3
环境准备:
 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel git libevent

另外需要安装额外的commonlib包:

 需要准备一个用户和一个用户组:


 useradd fastdfs -M -s /sbin/nologin 


(默认会创建一个用户组)

安装:
(注:无论tracker节点,还是storager节点安装都一样 ,安装记录只以tracker为准)
       下载安装文件: fastdfs:

1,下载
当前目录:/home/cluster1
[root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs.git
 2,安装
[root@localhost cluster1]#  cd fastdfs
[root@localhost cluster1]# ./make.sh && ./make.sh install
说明:安装后程序会默认安装到系统bin目录下
3,拷贝几个额外的配置文件(安装后/etc/fdfs/ 目录下已经有这么几个默认文件:client.conf.sample   storage.conf.sample  tracker.conf.sample)
[root@localhost cluster1]#cp -rv /home/cluster1/fastdfs/conf/httpd.conf /etc/fdfs/  #(如果要用httpserver 或者使用nginx作为文件获取服务器必须要这个文件)
[root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/mime.types /etc/fdfs/ 
4,关闭防火墙或则建立防火墙规则(很重要
      
配置:
(注意:配置tracker 和storager 存在区别)
1,tracker 配置
     a,创建相关数据存放目录
          
[root@localhost cluster1]# mkdir -p /data/fastdfs/tracker
     b, copy配置模板文件
     
[root@localhost cluster1]#   cp -rv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
      c, 配置copy的后文件          
[root@localhost cluster1]# vim /etc/fdfs/tracker.conf
           将该文件做以下修改:
               
             base_path=/data/fastdfs/tracker
             store_lookup=0
             store_group=g1 #(上传文件时存放的组名)
             store_path=0
             run_by_group=fastdfs
             run_by_user=fastdfs
             rotate_error_log=true

            默认会启动自带的httpserver 我们可以注销掉相关配置:
             
 # HTTP port on this tracker server
 #http.server_port=8080
 # check storage HTTP server alive interval seconds
 # <= 0 for never check
# default value is 30
 #http.check_alive_interval=30
# check storage HTTP server alive type, values are:
 #   tcp : connect to the storge server with HTTP port only,
#        do not request and get response
 #   http: storage check alive url must return http status 200
# default value is tcp
 #http.check_alive_type=tcp

# check storage HTTP server alive uri/url
 # NOTE: storage embed HTTP server support uri: /status.html
 #http.check_alive_uri=/status.html

       d:配置服务项并注册为服务
             
 [root@localhost  cluster1]# cp /home/cluster1/fastdfs/init.d/fdfs_trackerd /etc/init.d/
 [root@localhost  cluster1]# chkconfig --add fdfs_trackerd
 [root@localhost  cluster1]# chkconfig fdfs_trackerd on

2,配置storager (使用cluster2,另外cluster3 也如此 )
             a,创建相关数据存放目录
          
[root@localhost cluster2]# mkdir -p /data/fastdfs/storage/data
           b, copy配置模板文件
           
[root@localhost cluster2]#   cp -rv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
          c, 配置copy的后文件
         
  [root@localhost cluster2]#   vim  /etc/fdfs/storage.conf
               将该文件做以下修改:
                   
group_name=g1  #(和tracker节点 保持一致性)
base_path=/data/fastdfs
store_path_count=1
store_path0=/data/fastdfs/storage
tracker_server=192.168.3.111:22122 #tracker 节点 
run_by_group=fastdfs
run_by_user=fastdfs
file_distribute_path_mode=1 #文件分布式路径模式 开启
rotate_error_log=true #开启错误日志

              默认会启动自带的httpserver 建议注销掉相关配置:  
                       
# use the ip address of this storage server if domain_name is empty,
# else this domain name will ocur in the url redirected by the tracker server
#http.domain_name=
# the port of the web server on this storage server
#http.server_port=80
          d:修改httpd.conf 文件 
             
#http.anti_steal.secret_key=FastDFS1234567890
#http.anti_steal.token_check_fail=/home/yuqing/fastdfs/conf/anti-steal.jpg
          e: 配置并注册成为系统服务(我们也可以不注册成为系统服务,使用全路径名启动)
            
[root@localhost cluster2]# cp /home/cluster2/fastdfs/init.d/fdfs_storaged/ /etc/init.d/fdfs_storaged
[root@localhost cluster2]# chkconfig --add fdfs_storaged
[root@localhost cluster2]# chkconfig fdfs_storaged on
3,测试
      a, 启动tracker节点
          
[root@localhost  cluster1]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
              查看是否启动成功(我们可以使用ps或者netstat 命令查看端口22122)
      b, 启动storage节点
             
[root@localhost  cluster2]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
                查看是否启动成功(我们可以使用ps或者netstat 命令查看端口 23000)
      
     配置客户端进行上传或者下载(实例为:命令行上传下载   另外官方提供了 java的lib包 也可以使用java 实现上传下载)
       c:配置客户端配置
               我们以cluster2 为客户机
            
[root@localhost cluster2]# pwd
/home/cluster2
[root@localhost cluster2]#vim client.conf
             加入如下内容并保存:
             
base_path=/data/fastdfs
tracker_server=192.168.3.111:22122 
   
       测试上传文件:
          [root@localhost cluster2]# fdfs_upload_file client.conf nginx.tar.gz   #格式 fdfs_upload_file  配置文件 需要上传的文件
          g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz #上传成功后返回的路径
          测试下载文件 
          
 [root@localhost cluster2]# fdfs_download_file client.conf g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls
client.conf  fastdfs  fastdfs-nginx-module  libfastcommon  mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz  nginx  nginx.tar.gz  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls -al
total 531072
drwx------.  6 cluster2 cluster2      4096 Jan 20 17:54 .
drwxr-xr-x.  3 root     root          4096 Dec 23 02:59 ..
-rw-------.  1 cluster2 cluster2       603 Jan 16 06:18 .bash_history
-rw-r--r--.  1 cluster2 cluster2        18 Oct 16 06:56 .bash_logout
-rw-r--r--.  1 cluster2 cluster2       176 Oct 16 06:56 .bash_profile
-rw-r--r--.  1 cluster2 cluster2       124 Oct 16 06:56 .bashrc
-rw-r--r--   1 root     root            60 Jan 20 17:42 client.conf
drwxr-xr-x  11 root     root          4096 Jan 20 07:36 fastdfs
drwxr-xr-x   4 root     root          4096 Jan 20 07:52 fastdfs-nginx-module
drwxr-xr-x   5 root     root          4096 Jan 20 07:36 libfastcommon
-rw-rw-r--.  1 cluster2 cluster2 478325708 Jan  5 08:07 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
-rw-------.  1 cluster2 cluster2        23 Jan  6 00:57 .ndb_mgm_history
drwxr-xr-x  10 root     root          4096 Jan 20 08:00 nginx
-rw-r--r--   1 root     root      32716800 Jan 20 08:11 nginx.tar.gz  #(先前上传的源文件)
-rw-r--r--   1 root     root      32716800 Jan 20 17:54 wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz (刚刚下载的文件)

文件校验:
     [root@localhost cluster2]# md5sum nginx.tar.gz 
     ba70c99623327cf632a45c10ef4bb423  nginx.tar.gz
     [root@localhost cluster2]# md5sum wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
     ba70c99623327cf632a45c10ef4bb423  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
我们下载的文件内容和我们原来上传的文件内容一致

另外我们可以检查运行状态
[root@localhost cluster2]#fdfs_monitor client.conf

注意:权限很重要,如果你不知道具体权限怎么设置 请强数据存放目录设置为 777 
          如:数据存放路径/data/fastdfs/storage
          我们设置权限: chmod -R 777  /data/fastdfs

mysql date_format 格式化参数详解

  |   0 评论   |   3,228 浏览

函数表达式:

DATE_FORMAT(date,format)

以下为有效的格式化参数:

Format Description
%a Abbreviated weekday name
%b Abbreviated month name
%c Month, numeric
%D Day of month with English suffix
%d Day of month, numeric (00-31)
%e Day of month, numeric (0-31)
%f Microseconds
%H Hour (00-23)
%h Hour (01-12)
%I Hour (01-12)
%i Minutes, numeric (00-59)
%j Day of year (001-366)
%k Hour (0-23)
%l Hour (1-12)
%M Month name
%m Month, numeric (00-12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss AM or PM)
%S Seconds (00-59)
%s Seconds (00-59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00-53) where Sunday is the first day of week
%u Week (00-53) where Monday is the first day of week
%V Week (01-53) where Sunday is the first day of week, used with %X
%v Week (01-53) where Monday is the first day of week, used with %x
%W Weekday name
%w Day of the week (0=Sunday, 6=Saturday)
%X Year of the week where Sunday is the first day of week, four digits, used with %V
%x Year of the week where Monday is the first day of week, four digits, used with %v
%Y Year, four digits
%y Year, two digits


Example

The following script uses the DATE_FORMAT() function to display different formats. We will use the NOW() function to get the current date/time:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

The result would look something like this:

Nov 04 2008 11:45 PM
11-04-2008
04 Nov 08
04 Nov 2008 11:45:34:243

[转]推荐!国外程序员整理的Java资源大全

  |   0 评论   |   4,718 浏览

构建

这里搜集了用来构建应用程序的工具。

  • Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置,所以维护起来相当困难。
  • Gradle:Gradle采用增量构建。Gradle通过Groovy编程而不是传统的XML声明进行配置。Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。

字节码操作

编程操作Java字节码的函数库。

  • ASM:通用底层字节码操作及分析。
  • Javassist:尝试简化字节码编辑。
  • Byte Buddy:使用“流式API”进一步简化字节码生成。

代码分析

软件度量和质量评估工具。

  • Checkstyle:对编程规范和标准进行静态分析。
  • FindBugs:通过字节码静态分析找出潜在Bug。
  • PMD:对源代码中不良编程习惯进行分析。
  • SonarQube:通过插件集成其它分析组件,提供评估最终结果报告。

编译器

创建分析器、解释器和编译器的框架。

  • ANTLR:功能完备的自顶向下分析复杂框架。
  • JavaCC:相对ANTLR更具体,上手略为简单。支持语法语法超前预测(syntactic lookahead)。

持续集成

支持持续集成、测试和应用发布的工具。

  • Bamboo:Atlassian的持续集成(CI)解决方案,包含很多其它产品。
  • CircleCI:提供托管服务,可免费试用。
  • Codeship:提供托管服务,提供有限免费计划。
  • Go:ThoughtWork开源持续集成解决方案。
  • Jenkins:提供基于服务器的部署服务。
  • TeamCity:JetBrain持续集成方案,提供免费版。
  • Travis:提供托管服务,常用于开源项目。

数据库

简化数据库交互的工具、库。

  • Flyway:使用Java API轻松完成数据库迁移。
  • H2:小型SQL数据库,以内存操作著称。
  • JDBI:便捷的JDBC抽象。
  • jOOQ:基于SQL schema生成类型安全代码。
  • Presto:针对大数据的分布式SQL查询引擎。
  • Querydsl:针对Java的类型安全统一查询。

日期和时间

处理日期和时间的函数库。

  • Joda-Time:Java 8出现之前,它是日期、时间处理的标准函数库。
  • Time4J:Java高级日期、时间函数库。

依赖注入

帮助代码实现控制反转模式的函数库。

  • Dagger :编译期的注入框架,没有使用反射,主要用于Android开发。
  • Guice:轻量级注入框架,功能强大可与Dagger媲美。

开发库

从基础层次上改进开发流程。

  • AspectJ:面向切面编程扩展,与程序无缝连接。
  • Auto:源代码生成器集合。
  • DCEVM:通过修改JVM,在运行时可无限次重定义已加载的类。OpenJDK 7、8已提供支持,详情可查看这个分支(fork)
  • JRebel:商用软件,无需重新部署可即时重新加载代码及配置。
  • Lombok:代码生成器,旨在减少Java冗余代码。
  • RxJava:使用JVM中可观察序列,创建异步、基于事件应用程序的函数库。
  • Spring Loaded:另一个JVM类重载代理。
  • vert.x:JVM多语言事件驱动应用框架。

分布式应用

用来开发分布式、具有容错性应用程序的函数库和框架。

  • Akka:构建并发、分布式和具有容错功能的事件驱动应用程序所需的工具包和运行时。
  • Apache Storm:分布式实时计算系统。
  • Apache ZooKeeper:为大型分布式系统,使用分布式配置、同步和命名注册提供协调服务。
  • Hazelcast:分布式、高可扩展性内存网格。
  • Hystrix:为分布式系统提供延迟和容错处理。
  • JGroups:一组提供可靠消息传输的工具包,可用来创建集群。集群中的节点可互相发送消息。
  • Quasar:为JVM提供轻量级线程和Actor。

更多点击标题查看详细。。。。。。

from:http://javaweb.org/?p=1649


rdp 中间人攻击

  |   0 评论   |   3,606 浏览

This post seeks to demonstrate why users learning to ignore those certificate warnings for SSL-based RDP connection could leave them open to “Man-In-The-Middle” attacks. The MiTM attack demonstrated displays keystrokes sent during an RDP session. We conclude with some advice on how to avoid being the victim of such an attack.

Types of RDP connections

Before we start, let’s first clarify which of the various RDP connection types this post is about. There are 3 types of connection:

  • RDP Security Layer
  • SSL (TLS 1.0)
  • CredSSP (SSL with NLA)

It’s the middle one we’ll demonstrate an attack on in this post. On the Terminal Server, SSL is configured like this (with any NLA checkboxes unticked):

RDP configuration used

RDP configuration used

2003-rdp-setting-not-vulnerable

image-1

RDP configuration used

RDP configuration usedSome connections may also be vulnerable if the server is set to “Negotiate” its Security Layer to – as that could result in SSL being used.

SSL certificate warning

If users are used to dismissing a warnings like this one each time they connect, then this post is relevant to them:

ssl-warning


image-2


Attack overview


At a high level, the attack will proceed in a similar way to any SSL MiTM attack:

  1. Have the victim connect to a PoC tool (rdp-ssl-mitm.py) on our system instead of the RDP server they’re trying to reach
  2. Using the RDP protocol, our tool will negotiate the use of SSL
  3. At the point the connection is upgraded to SSL, our tool will negotiate an SSL connection with the RDP client using its own (untrusted) SSL certificate. This will give our tool access to data sent by the RDP client in cleartext
  4. Our tool also needs to create an SSL connection with the legitimate RDP server down which it will send data from the RDP client

The only complication to this attack is that our tool has to talk the RDP protocol briefly before creating the required SSL connections.

1. Having the victim connect to us

In a real attack, we’d need to have the RDP client connect to our system instead of the target server. This could be achieved using ARP spoofing, DNS spoofing or some other method. Rather than cloud the demonstration with such details, we’ll assume this is step is possible and just type the IP address of the attacker system into the victim RDP client.

On our attacker system (192.168.190.170), we start our PoC tool. We tell it forward connections to the legitimate RDP server 192.168.2.96:


?
$ ./rdp-ssl-mitm.py -r 192.168.2.96:3389
[+] Listeningforconnections on 0.0.0.0:3389


And we simply enter the IP address of the attacker system into the RDP client (the client connects from 192.168.190.1):

rdp-attack-prior-to-logon


image-3

We enter the attacker IP address to avoid the complexity of ARP spoofing


2. Talk RDP to the client to negotiate the use of SSL


The negotiation of SSL is quite short within the RDP protocol:

Message #1: Client > MiTM > Server

?
03 00 00 13 0e e0 00 00 00 00 00 01 00 08 00 *03*
00 00 00


This message is fairly static and our tool just passes it through to the server unaltered. The *03* means that the client supports RDP Security Layer, SSL and CredSSP.

Message #2: Server > MiTM > Client

?
03 00 00 13 0e d0 00 00 12 34 00 02 00 08 00 *01*
00 00 00


In the next message the server chooses the protocol to use. The *01* in this case means the the server has chosen SSL (not CredSSP which would be *02*). Again, we pass this message back to the client unaltered.

Note that if the server were to select CredSSP (*02*), then the demonstration would fail. We’re attacking SSL, not CredSSP.

3. Create SSL connection with RDP client

Message #3: Client > MiTM

The 3rd message is the start of an SSL connection. Here is the SSL Client Hello message beginning *16 03 01*… (03 01 being the version of SSL used: SSL 3.1 AKA TLS 1.0).

?
*16 03 01* 00 5a 01 00 00 56 03 01 52 21 ac be 63
20 ce de 4b a5 90 18 f0 66 97 ee 9d 54 14 e3 1c
... snip ...


Our tool does not forward this data directly to the server. Instead it responds with a “SSL Server Hello” message and proceeds to complete the SSL connection with the client.

The SSL certificate we present to the RDP client is issued to fred and this is displayed in the mstsc SSL warning shown to the user:

fred


image-4

The certificate presented by our PoC tool causes this security warning


The details of the SSL certificate differ to those the user would normally see – if the user were to check. To refine the attack we could make the certificate details match more closely, but we’d never get the signature to be the same as the normal certificate, so there’d always be a difference.


4. Create SSL connection with RDP server

Simultaneously, our tool also sends and SSL Client Hello to the RDP server and creates a second SSL connection.

Displaying key strokes

Our tool is now in a position to display the cleartext messages about keystrokes (for example) sent by the RDP client. It is relatively easy to determine what sort of message is sent when a key is pressed. The following two 4-byte messages are sent when the ‘p’ key is pressed:

?
44 04 00 19
44 04 01 19


The 3rd byte is the direction of key (00 means key-down, 01 means key-up).  The 4th byte is the key scan code.  If we look up 0×19 we find it corresponds to the p key.

In the general case, the scan-code to character mapping depends which keyboard you’re using. In the PoC tool I implemented the mapping for for QWERTY keyboards, so if you have a UK/US keyboard, it should translate the majority of scan-codes to the correct characters. Note that we don’t get know whether characters are uppercase or lowercase. We’d have to manually track the status of CAPS Lock and SHIFT keys.

Without getting too bogged down in the details, here’s some sample output from the PoC tool that shows keystrokes being logged – in particular an administrator logging in with username Administrator, 

password Password:


?
$ ./rdp-ssl-mitm.py -r 192.168.2.96:3389
[+] Listeningforconnections on 0.0.0.0:3389
[+] Incoming connection from 192.168.190.1:60370
[+] New outgoing request to 192.168.2.96:3389 (SSL: 0)
[+] Connected
[+] Detected incoming SSL connection. Turning self into SSL socket
[+] Incoming connection from 192.168.190.1:60374
[+] New outgoing request to 192.168.2.96:3389 (SSL: 0)
[+] Connected
[+] Detected incoming SSL connection. Turning self into SSL socket
<LShift-down>A<LShift-up>DMINISTRATOR<Tab><LShift-down>P<LShift-up>ASSWORD<Enter>


Conclusions

Learning to ignore SSL certificate warnings is as bad for RDP connection as it is for HTTPS websites. The results are similar: users quickly become vulnerable to “Man-In-The-Middle” attacks. Such attacks can harvest usernames, passwords, keystrokes and other sensitive data.

Using SSL certificates that are signed by a Certificate Authority the RDP client trusts will result in no warning under normal operation, so is highly recommended.

This attack doesn’t work if the server mandates NLA, so using NLA is also highly recommended.

It’s important to note that this isn’t a vulnerability in the RDP Client or Server software. Nor is this a  new discovery. It’s a weakness in way RDP is sometimes used which stems from users ignoring security warnings. At a technical level, this is a fairly vanilla SSL MiTM attack.

It might be interesting to extend this work by recording screen captures; or by injecting images of login boxes to encourage users to part of with other credentials. There would also be an opportunity to attack any drives that the RDP client has mapped for drive redirection – see Attacking the RDP Clients for inspiration. These would be pretty demanding coding challenges, though!



from:https://labs.portcullis.co.uk/blog/ssl-man-in-the-middle-attacks-on-rdp/

from:http://www.freebuf.com/articles/network/29288.html

linux 内核参数优化

  |   0 评论   |   3,225 浏览

目录

1linux内核参数注释

2、两种修改内核参数方法

3、内核优化参数生产配置

参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观。

学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗?

参考文章:

linux内核TCP相关参数解释

http://os.chinaunix.net/a2008/0918/985/000000985483.shtml

linux内核参数优化

http://blog.chinaunix.net/uid-29081804-id-3830203.html

linux内核调整和内核参数详解

http://blog.csdn.net/cnbird2008/article/details/4419354

1linux内核参数注释

以下表格中红色字体为常用优化参数

根据参数文件所处目录不同而进行分表整理

下列文件所在目录:/proc/sys/net/ipv4/

名称

默认值

建议值

描述

tcp_syn_retries

5

1

对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定的)

tcp_synack_retries

5

1

对于远端的连接请求SYN,内核会发送SYN  ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。

tcp_keepalive_time

7200

600

TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

防止两边建立连接但不发送数据的攻击。

tcp_keepalive_probes

9

3

TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

tcp_keepalive_intvl

75

15

探测消息未获得响应时,重发该消息的间隔时间(秒)。默认值为75秒。 (对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)

tcp_retries1

3

3

放弃回应一个TCP连接请求前﹐需要进行多少次重试。RFC规定最低的数值是3

tcp_retries2

15

5

在丢弃激活(已建立通讯状况)TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)

tcp_orphan_retries

7

3

在近端丢弃TCP连接之前﹐要进行多少次重试。默认值是7个﹐相当于 50 - 16分钟﹐视 RTO 而定。如果您的系统是负载很大的web服务器﹐那么也许需要降低该值﹐这类 sockets 可能会耗费大量的资源。另外参的考tcp_max_orphans(事实上做NAT的时候,降低该值也是好处显著的,我本人的网络环境中降低该值为3)

tcp_fin_timeout

60

2

对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。

tcp_max_tw_buckets

180000

36000

系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)(事实上做NAT的时候最好可以适当地增加该值)

tcp_tw_recycle

0

1

打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求﹐请不要随意修改这个值。(NAT的时候,建议打开它)

tcp_tw_reuse

0

1

表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)

tcp_max_orphans

8192

32768

系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制。如果内存大更应该增加这个值。(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)

tcp_abort_on_overflow

0

0

当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。(对待已经满载的sendmail,apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)

tcp_syncookies

0

1

只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies目的是为了防止syn flood攻击。

tcp_stdurg

0

0

使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释,因此如果您在 Linux打开它﹐或会导致不能和它们正确沟通。

tcp_max_syn_backlog

1024

16384

对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明)

tcp_window_scaling

1

1

该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323)。(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0

tcp_timestamps

1

1

Timestamps 用在其它一些东西中﹐可以防范那些伪造的sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)Timestamp 会让它知道这是个 '旧封包'(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。)

tcp_sack

1

1

使用 Selective ACK﹐它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)

tcp_fack

1

1

打开FACK拥塞避免和快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)[这个是TCP连接靠谱的核心功能]

tcp_dsack

1

1

允许TCP发送"两个完全相同"SACK

tcp_ecn

0

0

TCP的直接拥塞通告功能。

tcp_reordering

3

6

TCP流中重排序的数据报最大数量 (一般有看到推荐把这个数值略微调整大一些,比如5)

tcp_retrans_collapse

1

0

对于某些有bug的打印机提供针对其bug的兼容性。(一般不需要这个支持,可以关闭它)

tcp_wmemmindefaultmax

4096

16384

131072

8192

131072

16777216

发送缓存设置

min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。

default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。

max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)

tcp_rmemmindefaultmax

4096

87380

174760

32768

131072

16777216

接收缓存设置

tcp_wmem

tcp_memmindefaultmax

根据内存计算

786432

1048576 1572864

low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。即低于此值没有内存压力。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )

high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)

一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

tcp_app_win

31

31

保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

tcp_adv_win_scale

2

2

计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale BOOLEAN>0)

tcp_low_latency

0

0

允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项一般情形是的禁用。(但在构建Beowulf 集群的时候,打开它很有帮助)

tcp_westwood

0

0

启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN通信来说应该启用这个选项。

tcp_bic

0

0

为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于WAN 通信应该启用这个选项。

ip_forward

0

NAT必须开启IP转发支持,把该值写1

ip_local_port_range:minmax

32768

61000

1024

65000

表示用于向外连接的端口范围,默认比较小,这个范围同样会间接用于NAT表规模。

ip_conntrack_max

65535

65535

系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值),同时这个值和你的内存大小有关,如果内存128M,这个值最大81921G以上内存这个值都是默认65536


所处目录/proc/sys/net/ipv4/netfilter/

文件需要打开防火墙才会存在

名称

默认值

建议值

描述

ip_conntrack_max

65536

65536

系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值),同时这个值和你的内存大小有关,如果内存128M,这个值最大81921G以上内存这个值都是默认65536,这个值受/proc/sys/net/ipv4/ip_conntrack_max限制


ip_conntrack_tcp_timeout_established

432000

180

已建立的tcp连接的超时时间,默认432000,也就是5天。影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack: table full的问题建议:对于NAT负载相对本机的 NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改

ip_conntrack_tcp_timeout_time_wait

120

120

time_wait状态超时时间,超过该时间就清除该连接

ip_conntrack_tcp_timeout_close_wait

60

60

close_wait状态超时时间,超过该时间就清除该连接

ip_conntrack_tcp_timeout_fin_wait

120

120

fin_wait状态超时时间,超过该时间就清除该连接


文件所处目录/proc/sys/net/core/

名称

默认值

建议值

描述

netdev_max_backlog


1024

16384

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,对重负载服务器而言,该值需要调高一点。

somaxconn 


128

16384

用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。对繁忙的服务器,增加该值有助于网络性能

wmem_default


129024

129024

默认的发送窗口大小(以字节为单位)

rmem_default


129024

129024

默认的接收窗口大小(以字节为单位)

rmem_max


129024

873200

最大的TCP数据接收缓冲

wmem_max

129024

873200

最大的TCP数据发送缓冲


2、两种修改内核参数方法:

1、使用echo value方式直接追加到文件里echo "1" >/proc/sys/net/ipv4/tcp_syn_retries,但这种方法设备重启后又会恢复为默认值

2、把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效


3、内核生产环境优化参数

这儿所列参数是老男孩老师生产中常用的参数:

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

对比网上其他人的生产环境优化参数,需要优化的参数基本差不多,只是值有相应的变化。具体优化值要参考应用场景,这儿所列只是常用优化参数,是否适合,可在上面查看该参数描述,理解后,再根据自己生产环境而设。

其它相关linux内核参数调整文章:

Linux内核参数优化

http://flandycheng.blog.51cto.com/855176/476769

优化linux的内核参数来提高服务器并发处理能力

http://www.ha97.com/4396.html

nginxweb服务器linux内核参数优化

http://blog.csdn.net/force_eagle/article/details/6725243


From:http://yangrong.blog.51cto.com/6945369/1321594