100万UDP数据包的程序究竟有多难,利用rsync与crond服务器进行WEB服务备份

在Linux 上,编写三个每秒接收 100万UDP数据包的主次毕竟有多难?,udp有多难

在Linux 上,编写一个每秒接收 100万UDP数据包的先后毕竟有多难?
写的不易,转发一下

接纳rsync与crond服务器实行WEB服务备份,rsynccrond

应用rsync与crond服务器实行WEB服务备份
场景:
某商家里有一台Web服务器,里面包车型大巴多寡很关键,可是只要硬盘坏了,数据就能够放任。
近日首长必要你把数据在其他机器上做叁个备份。要求如下:
天天早上00点在Web服务器A上包裹备份系统布局文件、网址先后目录及拜见日志并通过
rsync命令推送到服务器B上备份保留。
备份思路:能够事先在本土按日期打包,然后在推送到备份服务器上。
具体须要如下:
1)Web服务器A和备份服务器B的备份目录必须为/backup。
2)系统布局文件包含但不限于:
a.定期职务服务的布置文件
b.开启自运维文件的配置/etc/rc.d/rc.local
c.通常脚本的目录/server/scripts
d.防火墙iptabls的布署文件/etc/sysconfig/iptables
e.其余供给备份的目录
3)Web服务器站点目录假定为/var/html/www
4)Web服务器A访谈的日记路线假定为(/app/logs)
5)
Web服务器保留打包后的7天的备份数据。备份服务器B上保存3个月的数额别本。
6)备份服务器B上依据备份数据的服务器的IP为目录保存,打包的文书遵照时间名字保存。
逻辑架构图:。。。。。
特地表达:
1)专门的学业中领导很或许不会告知你什么去做,只会提要求,比如:小崔,WEB服务器相当的重要,请您把
多少在其他服务器备份一份。
2)逻辑架构图更不容许是老总给你画,而是你理解了老董的情趣,然后本人想出备份的方案,最终,在
实践前您做的三个图纸而已。

条件认证:
192.168.0.252 web
192.168.0.251 backup

泛泛出技能点:
A、在备份服务器B上实践rsync服务,A是客户端。
B、在A上对主要数据开始展览备份,施行上正是写二个备份脚本。
C、做一个按时职责,施行B步骤中的备份脚本。

起来安排
A、在备份服务器B上执行rsync服务,A是客户端。
一、什么是rsync

  rsync,remote
synchronize顾名思意就清楚它是一款完毕远程同步作用的软件,它在协同文件的还要,
可以保险原来文件的权位、时间、软硬链接等附加音讯。 rsync是用 “rsync
算法”提供了三个客户机和
长途文件服务器的文件同步的快速方法,并且能够经过ssh方式来传输文件,那样其保密性也非常好,别的
它仍旧无需付费的软件。
  rsync 包蕴如下的一些特色:

  能立异任何目录和树和文件系统;
  有选拔性的涵养符号链链、硬链接、文件属于、权限、设备以及时光等;
  对于安装来讲,无别的特别权限供给;
  对于五个文件来讲,内部流程裁减文件等待的延时;
  能用rsh、ssh 或直接端口做为传输入端口;
  帮忙无名rsync 同步文件,是手不释卷的镜像工具;
始发表署rsync服务
1、明确安装rsync软件包
[[email protected]
~]# rpm -qa|grep rsync
rsync-3.0.6-12.el6.x86_64
2、配置rsync配置文件
rsync配置文件如下:/etc/rsyncd.conf
###rsyncd.conf start###
uid=rsync
gid=rsync
use chroot=no
max connections=200
timout=300
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup]
path=/backup/
ignore errors
read only=false
list=false
hosts allow=10.0.0.0/24
hosts deny=0.0.0.0/32
auth users=rsync_backup
secrets file=/etc/rsync.password
#rsync_config________________________end###

3、加多用户备份目录
[[email protected]
~]# mkdir /backup
[[email protected]
~]# useradd rsync -s /sbin/nologin
[[email protected]
~]# id rsync
uid=502(rsync) gid=502(rsync) groups=502(rsync)
[[email protected]
~]# chown -R rsync /backup/
[[email protected]
~]# ll /backup -ld
drwxr-xr-x 2 rsync root 4096 Jan 14 20:25 /backup
4、运转rsync守护进度
[[email protected]
~]# rsync –daemon
[[email protected]
~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*             
     LISTEN      1477/rsync          
tcp        0      0 :::873                      :::*                   
    LISTEN      1477/rsync    
5、rsync开机自运营
[[email protected]
~]# echo “#rsync bak by baizuo 20180120”>>/etc/rc.local ;echo
“/usr/bin/rsync –daemon –config=/etc/rsyncd.conf”
>>/etc/rc.local 
[[email protected]
~]# tail /etc/rc.d/rc.local -n2
#rsync bak by baizuo 20180120
/usr/bin/rsync –daemon

6、配置用于rsync同步的账号、密码及账号文件权限
(只是用作rsync账号验证的虚拟用户,并非系统自个儿用户)
[[email protected]
~]# echo “rsync_backup:baizuo” >/etc/rsyncd.password
[[email protected]
~]# tail /etc/rsync.password 
rsync_backup:baizuo
[[email protected]
~]# chmod 600 /etc/rsync.password 
[[email protected]
~]# ll /etc/rsync.password 
-rw——- 1 root root 20 Jan 20 17:06 /etc/rsync.password

7、在客户端进行配置
[[email protected]
~]# echo “baizuo” >/etc/rsync.password
[[email protected]
~]# chmod 600 /etc/rsync.password 
[[email protected]
~]# ll /etc/rsync.password 
-rw——- 1 root root 7 Jan 20 17:04 /etc/rsync.password

8、在客户端举行推送测量试验
[[email protected]
~]# /backup
[[email protected]
~]#  touch /backup/test.txt
[[email protected]
~]# rsync -avzP /backup/
[email protected]::backup/
–password-file=/etc/rsync.password 
sending incremental file list
./
test.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)

sent 78 bytes  received 30 bytes  216.00 bytes/sec
total size is 0  speedup is 0.00

A技术点————–OK—————————-
B、在A上对根本数据开始展览备份,实行上正是写一个备份脚本。
对下边所说的布置文件做备份。

#先在shell上做叁回打包压缩测验。(能够不做测量检验)
[[email protected]
~]# mkdir /var/html/www/baizuo -p
[[email protected]
~]# mkdir /app/logs/baizuo_log -p
[[email protected]
~]# cd /var/html/www/
[[email protected]
www]# tar zcvf baizuo_web_$(date +%F).tar.gz ./baizuo
./baizuo/
[[email protected]
www]# ll
drwxr-xr-x 2 root root 4096 Jan 20 17:32 baizuo
-rw-r–r– 1 root root  114 Jan 20 17:34
baizuo_web_2018-01-20.tar.gz

2、编写脚本,在测验一下。
(那几个本子并不标准,你能够健全它。)
[[email protected]
www]# mkdir /server/scripts/ -p
[[email protected]
www]# mv rsync_copyall.sh /server/scripts/

[[email protected]
www]# cat /server/scripts/rsync_copyall.sh 
#backup web_site
cd /var/html&&tar zcf /backup/www_$(date +%F).tar.gz ./www
cd /app/ && tar zcf /backup/logs_$(date +%F).tar.gz ./logs

#backup system config
cd / && tar zcf /backup/etc_$(date +%F).tar.gz ./etc

#backup crond root
cd /var/spool/cron/ && tar zcf /backup/crond_root_$(date +%F).tar.gz
./root

#rsync data to bakserver
rsync -avzP /backup/
[email protected]::backup/
–password-file=/etc/rsync.password >/dev/null 2>&1

#del data 7 days ago
find /backup/ -type f -name “*.tar.gz” -mtime +7|xargs rm -f

3、测验脚本,查看结果
客户端实施脚本
[[email protected]
scripts]# sh rsync_copyall.sh 
服务的查阅结果
[[email protected]
~]# ll /backup/
total 10276
-rw-r–r– 1 rsync rsync      161 Jan 20 17:54
crond_root_2018-01-20.tar.gz
-rw-r–r– 1 rsync rsync 10509606 Jan 20 17:54 etc_2018-01-20.tar.gz
-rw-r–r– 1 rsync rsync      136 Jan 20 17:54 logs_2018-01-20.tar.gz
-rw-r–r– 1 rsync rsync        0 Jan 20 17:07 test.txt
-rw-r–r– 1 rsync rsync      341 Jan 20 17:54 www_2018-01-20.tar.gz
PS:能够观望推送成功了,可是呢,这里有一个主题素材,服务端的公文是或不是应有用IP保存呢。
解决办法:
无所不包剧本功用:
[[email protected]
scripts]# cat rsync_copyall.sh 
IP=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |cut -d ‘=’
-f2`
mkdir /backup/$IP

#backup web_site
cd /var/html&&tar zcf /backup/$IP/www_$(date +%F).tar.gz ./www
cd /app/ && tar zcf /backup/$IP/logs_$(date +%F).tar.gz ./logs

#backup system config
cd / && tar zcf /backup/$IP/etc_$(date +%F).tar.gz ./etc

#backup crond root
cd /var/spool/cron/ && tar zcf /backup/$IP/crond_root_$(date
+%F).tar.gz ./root

#rsync data to bakserver
rsync -avzP /backup/$IP
[email protected]::backup/
–password-file=/etc/rsync.password >/dev/null 2>&1

#del data 7 days ago
find /backup/ -type f -name “*.tar.gz” -mtime +7|xargs rm -f

备份服务器端查看结果:
[[email protected]
backup]# ls /backup/192.168.0.252/
crond_root_2018-01-20.tar.gz  logs_2018-01-20.tar.gz
etc_2018-01-20.tar.gz         www_2018-01-20.tar.gz

B技术点______________________________完成!
C、做二个定期职分,试行B步骤中的备份脚本。
(客户端做三个按时职务)天天0点备份数据,数据保存7天。
[[email protected]
scripts]# crontab -l
30 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >/dev/null 2>&1
#bak local data by baizuo at 2018.1.20
00 00 * * * /bin/sh /server/scripts/rsync_copyall.sh >/dev/null
2>&1 
(服务端做个定期职分)备份数据保存七个月。
[[email protected]
scripts]# crontab -l
30 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >/dev/null 2>&1
#keep data 180 days
00 00 * * * /bin/sh /server/scripts/keepdata180days.sh >/dev/null
2>&1 

nginx——设想域名与多端口监听及其配置,nginx设想域名监听

nginx的配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       82;
        server_name  localhost;
        root D:/cardLoan/tuandai-loans/loans-web-admin/src/main/resources/web;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root D:/cardLoan/tuandai-loans/loans-web-admin/src/main/resources/web;
            index  index.html index.htm;
        }

        #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 {
        #    alias   E:/aaa2
        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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


    server {
        listen       80;
        server_name  dq.aaa.cn;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
                proxy_pass    http://10.100.66.255:9007;
                proxy_redirect default ;              

        } 
      }

    #server {
        #listen       80;
        #server_name  www.aaa.cn;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #location / {
                #proxy_pass    http://127.0.0.1:8081;
                #proxy_redirect default ;              

        #}
      #}

   server {
        listen       80;
        server_name  psjs.aaa.cn;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location /dq {
                alias   E:/psjs.aaa.cn-static/dq;
        #root   E:/td-sail-js;
                index  index.html index.htm;         

        } 
        location /scripts {
                alias   E:/psjs.aaa.cn-static/dq/scripts;
        }

        location /images {
                alias   E:/psjs.aaa.cn-static/dq/images;
        #root   E:/td-sail-js;
                index  index.html index.htm;         

        } 
      }

     server {
        listen       80;
        server_name  js2.aaa.cn;
        #root E:/aaa2/js.aaa.cn;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   E:/psjs.aaa.cn-static;
            index  index.html index.htm;
        }
    location /images {
            alias   E:/psjs.aaa.cn-static/images;
            index  index.html index.htm;
        }

        #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 {
        #    alias   E:/aaa2
        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
}

MP的布局格局
nginx.conf

# 常用命令
# 启动: nginx
# 重启: nginx -s reload
# 关闭: nginx -s stop

# 1 域名+端口 唯一确定一个资源。 nginx 可以同时监听 多个虚拟域名 和 多个端口。可以做方向代理

# 用的帐号和组,windows的直接注释掉就好了
#user  benny staff;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 16 64k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
    gzip_vary on;

    # 当你访问localhost时的站点配置,地址默认是d:/wwwroot
    server {
        listen       90;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;


        #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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # include vhosts/*.conf; # 将vhosts所有东西包含进来
    include vhosts/cardloan.dev.com.conf;

    autoindex on; #开启nginx目录浏览功能
    autoindex_exact_size off; #文件大小从KB开始显示
    autoindex_localtime on; #显示文件修改时间为服务器本地时间


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

vhost.conf

# 想建一个新站点?
# 1、复制本文件然后改名
# 2、修改root值,指向你的新站点根目录
# 3、运行nginx -s reload 重新加载配置就行了
server {
    listen  82;
    server_name  cardload.dev.com;
    root   D:/cardLoan/tuandai-loans/loans-web-admin/src/main/resources/web;
    index  index.html index.htm;

    error_page   500 502 503 504  /50x.html;

    location ~ /.ht {
        deny  all;
    }
}

英特网找的 如card.dev.com.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on; 

    keepalive_timeout  65; 

    gzip  on;

    upstream localhost {
        server 127.0.0.1:8080 max_fails=7 fail_timeout=7s;
    }   
    server {
        listen       81; 
        server_name  localhost;
        location / { 
            root html;
            index index.html index.htm;
            proxy_pass http://localhost;
        }   
    }   
    server {
        listen       80; 
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / { 
            root   html;
            index  index.html index.htm;
            proxy_pass http://localhost;
        }
    }
}

1. UDP概念

   用户数量报业协会议(乌克兰(Ukraine)语:User Datagram
Protocol,缩写为 UDP),又称使用者资料包协定,是一个简练的面向数据报的传输层协议,正式标准为福特ExplorerFC
768

 
 在TCP/IP模型中,UDP为互连网层以上和应用层以下提供了三个粗略的接口。UDP只提供数据的不可信赖传递,它一旦把应用程序发给互联网层的多寡发送出去,就不保留数据备份(所以UDP不经常候也被以为是不可相信的数量报协议)。UDP在IP数据报的头顶仅仅到场了复用和数量校验(字段)。

2. UDP丢包难点分析

鉴于UDP和睦只提供数据的不得靠传输,数据包发出去后就随意了,数据包在互联网的传导进度中都只怕有失。乃至即使数额包成功到达了接收端节点,也不意味着应用程序尚可,因为要从网卡达到应用程序还索要阅历重重等第,每一种阶段都恐怕丢包。

上航海用体育场地描述了一种应用程序接受互连网数据包的卓著路线图。

首先,NIC(网卡)接收和拍卖互连网数据包。网卡有投机的硬件数量缓冲区,当互连网数据流量太大,大到超越网卡的接收数据硬件缓冲区,那时新步向的多少包将覆盖以前缓冲区的数据包,导致遗失。网卡是不是丢包取决于网卡本人的测算品质和硬件缓冲区的深浅。

附带,网卡管理后把多少包交到操作系统缓冲区。数据包在操作系统阶段丢包首要在于以下因素:

  • 操作系统缓冲区的深浅
  • 系统的质量
  • 系统的载荷
  • 网络有关的类别负荷

最后,当数码包达到应用程序的socket缓冲区,倘若应用程序不能够登时从socket缓冲区把多少包取走,积攒的多寡包将会超越应用程序socket缓冲区阀值,导致缓冲区溢出,数据包不见。数据包在应用程序阶段丢包首要在于以下因素:

  • 应用程序缓冲区大小
  • 应用程序管理数据包的力量,即什么尽量快的从缓冲区取走数据包

发表评论

电子邮件地址不会被公开。 必填项已用*标注