FastDFS文件同步机制简介

   FastDFS文件同步采用binlog异步复制方式。storage server使用binlog文件记录文件上传、删除等操作,根据binlog进行文件同步。binlog中只记录文件ID和操作,不记录文件内容。下面给出几行binlog文件内容示例:

1572660675 C M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

1572660827 c M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

1572660911 D M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

1572660967 d M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

  从上面可以看到,binlog文件有三列,依次为时间戳、操作类型和文件ID(不带group名称)。

  文件操作类型采用单个字母编码,其中源头操作用大写字母表示,被同步的操作为对应的小写字母。文件操作字母含义如下:

    C :上传文件(upload)

    D:删除文件(delete)

    A:追加文件(append)

    M:部分文件更新(modify)

    U:整个文件更新(set metadata)

    T:截断文件(truncate)

    L:创建符号链接(文件去重功能,相同内容只保存一份)

  同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源头服务器同步给本组的其他存储服务器。对于同组的其他storage server,一台storage server分别启动一个线程进行文件同步。

  文件同步采用增量方式,记录已同步的位置到mark文件中。mark文件存放路径为 $base_path/data/sync/。mark文件内容示例:

binlog_index=3

binlog_offset=382

need_sync_old=1

sync_old_done=1

until_timestamp=1571976211

scan_row_count=2033425

sync_row_count=2033417

  采用binlog的异步复制方式,必然存在同步延迟的问题,比如mysql的主从数据同步。下一篇文章将介绍FastDFS是如何解决文件异步复制带来的延迟问题,敬请期待。

  最后留给大家一个问题,为什么binlog记录的文件操作类型有大小写的两套呢(如C和c、D和d等)?

Linux的net.ipv4.tcp_timestamps参数

Q1

在家里无法打开公司的网站,经过各种测试,利用ping、dig域名,然后curl,都正常。但是网站依然无法打开。最后,采用抓包的方式,从包中看到syn-ack没有返回,然后就百度。

经过查找net.ipv4.tcp_timestamps=1,启用了时间戳。

原理如下:
tcp三次握手问题,当有一个用户的时间戳大于这个链接发出的syn中的时间戳,服务器上就会忽略掉这个syn,不返会syn-ack消息。用户表现无法正常完成tcp3次握手,从而不能打开web页面。在业务闲时,如果用户nat的端口没有被使用过时,就可以正常打开;业务忙时,nat端口重复使用的频率高,很难分到没有被使用的端口,从而产生这种问题。

解决:

net.ipv4.tcp_timestamps = 0

然后syctlp -p生效即可。

Q2

由于乱序,当发送rst包到对端的时候,连接还是establish的rst后,链接就会断开, 后来使得net.ipv4.tcp_timestamps = 0,问题解决。

centos 6 更新Yum源

国外centos6的镜像停止维护,阿里云源作为新源修复为新的可用地址方法
1、备份原有源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载阿里云源wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo 或

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

3、替换为阿里云新源地址

sed -i -e ‘s/centos\/\$releasever/centos-vault\/6.10/g’ /etc/yum.repos.d/CentOS-Base.repo

epel源修复:第一步:备份原有源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载阿里云源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

3、替换为阿里云新源地址
sed -i -e ‘s/com\/epel/com\/epel-archive/g’ /etc/yum.repos.d/epel.repo


命令汇总:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

sed -i -e ‘s/centos\/\$releasever/centos-vault\/6.10/g’ /etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

sed -i -e ‘s/com\/epel/com\/epel-archive/g’ /etc/yum.repos.d/epel.repo


参考文章

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b117DQxFM

https://developer.aliyun.com/mirror/epel?spm=a2c6h.13651102.0.0.60381b11jAhAqL

https://help.aliyun.com/document_detail/193569.htmlhttps://developer.aliyun.com/article/779734?spm=a2c6h.14164896.0.0.1dc92e6eqpFBjk

官方源、镜像源汇总

(一)、企业站

搜狐:http://mirrors.sohu.com/

网易:http://mirrors.163.com/

阿里云:http://mirrors.aliyun.com/

腾讯:http://android-mirror.bugly.qq.com:8080/(仅针对APP开发的软件,限流,不推荐) 淘宝:http://npm.taobao.org/

(二)、教育站

上海交通大学:http://ftp.sjtu.edu.cn/html/resources.xml(部分移动运营商出口状况不佳,无法访问)

华中科技大学:http://mirror.hust.edu.cn/(当前已用容量估计:4.83T)

清华大学:http://mirrors.tuna.tsinghua.edu.cn/(当前已用容量估计:9.8T)

北京理工大学:http://mirror.bit.edu.cn/web/

兰州大学:http://mirror.lzu.edu.cn/ 中国科技大学:

http://mirrors.ustc.edu.cn/(当前已用容量估计:21.32T)

大连东软信息学院:http://mirrors.neusoft.edu.cn/(当前已用容量估计:2.5T)

东北大学:http://mirror.neu.edu.cn/

大连理工大学:http://mirror.dlut.edu.cn/

哈尔滨工业大学:http://run.hit.edu.cn/html/(部分联通运营商出口状况不佳,无法访问) 北京交通大学:http://mirror.bjtu.edu.cn/cn/

天津大学:http://mirror.tju.edu.cn(无法访问,ping超时) 中国地质大学:http://mirrors.cug.edu.cn/(当前已用容量估计:2.3T)

浙江大学:http://mirrors.zju.edu.cn/

厦门大学:http://mirrors.xmu.edu.cn/

中山大学:http://mirror.sysu.edu.cn/

重庆大学:http://mirrors.cqu.edu.cn/(当前已用容量估计:3.93T)

北京化工大学:http://ubuntu.buct.edu.cn/(Android SDK镜像仅供校内使用,当前已用容量估计:1.72T)

南阳理工学院:http://mirror.nyist.edu.cn/

中国科学院:http://www.opencas.org/mirrors/

电子科技大学:http://ubuntu.uestc.edu.cn/(无法访问,ping超时)

电子科技大学星辰工作室:http://mirrors.stuhome.net/(当前已用容量估计:1.08T)

西北农林科技大学:http://mirrors.nwsuaf.edu.cn/(只做CentOS镜像,当前已用容量估计:140GB)

浙江大学:http://mirrors.zju.edu.cn/

台湾淡江大学: http://ftp.tku.edu.tw/Linux/

软件版

(一)、操作系统类 

1.Ubuntu阿里云:http://mirrors.aliyun.com/ubuntu-releases/

网易:http://mirrors.163.com/ubuntu-releases/

搜狐:http://mirrors.sohu.com/ubuntu-releases/(搜狐在12年之后似乎不同步了)

首都在线科技股份有限公司:http://mirrors.yun-idc.com/ubuntu-releases/

2.CentOS网易:http://mirrors.163.com/centos/

搜狐:http://mirrors.sohu.com/centos/

阿里云:http://mirrors.aliyun.com/centos/

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

$top
    top - 09:14:56 up 264 days, 20:56,  1 user,  load average: 0.02, 0.04, 0.00
    Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
    Mem:    377672k total,   322332k used,    55340k free,    32592k buffers
    Swap:   397308k total,    67192k used,   330116k free,    71900k cached
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  2856  656  388 S  0.0  0.2   0:49.40 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   7:15.20 ksoftirqd/0
    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
  • 第一行
    • 09:14:56 : 系统当前时间
    • 264 days, 20:56 : 系统开机到现在经过了多少时间
    • 1 users : 当前2用户在线
    • load average: 0.02, 0.04, 0.00: 系统1分钟、5分钟、15分钟的CPU负载信息
  • 第二行
    • Tasks:任务;
    • 87 total:很好理解,就是当前有87个任务,也就是87个进程。
    • 1 running:1个进程正在运行
    • 86 sleeping:86个进程睡眠
    • 0 stopped:停止的进程数
    • 0 zombie:僵死的进程数
  • 第三行
    • Cpu(s):表示这一行显示CPU总体信息
    • 0.0%us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。
    • 0.7%sy:内核占用CPU时间百分比
    • 0.0%ni:改变过优先级的进程占用CPU的百分比
    • 99.3%id:空闲CPU时间百分比
    • 0.0%wa:等待I/O的CPU时间百分比
    • 0.0%hi:CPU硬中断时间百分比
    • 0.0%si:CPU软中断时间百分比
    • 注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可;折叠,再次按1;
  • 第四行
    • Men:内存的意思
    • 8175320kk total:物理内存总量
    • 8058868k used:使用的物理内存量
    • 116452k free:空闲的物理内存量
    • 283084k buffers:用作内核缓存的物理内存量
  • 第五行
    • Swap:交换空间
    • 6881272k total:交换区总量
    • 4010444k used:使用的交换区量
    • 2870828k free:空闲的交换区量
    • 4336992k cached:缓冲交换区总量
  • 进程信息
    • 再下面就是进程信息:
    • PID:进程的ID
    • USER:进程所有者
    • PR:进程的优先级别,越小越优先被执行
    • NInice:值
    • VIRT:进程占用的虚拟内存
    • RES:进程占用的物理内存
    • SHR:进程使用的共享内存
    • S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
    • %CPU:进程占用CPU的使用率
    • %MEM:进程使用的物理内存和总内存的百分比
    • TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
    • COMMAND:进程启动命令名称

实例

实例1:多核CPU监控

在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况;

[rdtfr@bl685cb4-t ^]$ top
top - 09:10:44 up 20 days, 16:51,  4 users,  load average: 3.82, 4.40, 4.40
Tasks: 1201 total,  10 running, 1189 sleeping,   0 stopped,   2 zombie
Cpu0  :  1.3%us,  2.3%sy,  0.0%ni, 96.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  1.3%us,  2.6%sy,  0.0%ni, 96.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  1.0%us,  2.0%sy,  0.0%ni, 92.5%id,  0.0%wa,  0.0%hi,  4.6%si,  0.0%st
Cpu3  :  3.9%us,  7.8%sy,  0.0%ni, 83.2%id,  0.0%wa,  0.0%hi,  5.2%si,  0.0%st
Cpu4  :  4.2%us, 10.4%sy,  0.0%ni, 63.8%id,  0.0%wa,  0.0%hi, 21.5%si,  0.0%st
Cpu5  :  6.8%us, 12.7%sy,  0.0%ni, 80.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  2.9%us,  7.2%sy,  0.0%ni, 85.3%id,  0.0%wa,  0.0%hi,  4.6%si,  0.0%st
Cpu7  :  6.2%us, 13.0%sy,  0.0%ni, 75.3%id,  0.0%wa,  0.0%hi,  5.5%si,  0.0%st
Mem:  32943888k total, 32834216k used,   109672k free,   642704k buffers
Swap: 35651576k total,  5761928k used, 29889648k free, 16611500k cached

实例2:高亮显示当前运行进程

在top基本视图中,按键盘“b”(打开/关闭加亮效果);

实例3:显示完整的程序命令

命令:top -c

[rdtfr@bl685cb4-t ^]$ top -c
top - 09:14:35 up 20 days, 16:55,  4 users,  load average: 5.77, 5.01, 4.64
Tasks: 1200 total,   5 running, 1192 sleeping,   0 stopped,   3 zombie
Cpu(s):  4.4%us,  6.0%sy,  0.0%ni, 83.8%id,  0.2%wa,  0.0%hi,  5.5%si,  0.0%st
Mem:  32943888k total, 32842896k used,   100992k free,   591484k buffers
Swap: 35651576k total,  5761808k used, 29889768k free, 16918824k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
2013 apache    18   0  403m  88m 5304 S 25.0  0.3   6:37.44 /usr/sbin/httpd
18335 pubtest   22   0 65576  996  728 R  7.8  0.0   0:00.24 netstat -naltp
16499 rdtfare   15   0 13672 2080  824 R  2.6  0.0   0:00.38 top -c
29684 rdtfare   15   0 1164m 837m  14m S  2.3  2.6 148:47.54 ./autodata data1.txt
12976 pubtest   18   0  238m 9000 1932 S  1.6  0.0 439:28.44 tscagent -s TOEV_P

实例4:显示指定的进程信息

命令:top -p pidid

/opt/app/tdv1/config#top -p 17265
top - 09:17:34 up 455 days, 17:55,  2 users,  load average: 3.76, 4.56, 4.46
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  7.8%us,  1.9%sy,  0.0%ni, 89.2%id,  0.0%wa,  0.1%hi,  1.0%si,  0.0%st
Mem:   8175452k total,  8103988k used,    71464k free,   268716k buffers
Swap:  6881272k total,  4275424k used,  2605848k free,  6338184k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17265 tdv1      15   0 56504  828  632 S  0.0  0.0 195:53.25 redis-server

指定进程信息有多个时,需要结合其它工具将回车替换为,(-p 支持pid,pid,pid语法)

命令:top -p pgrep MULTI_PROCESS | tr “\n” ”,” | sed ‘s/,$//’

/opt/app/tdv1$top -p `pgrep java | tr "\\n" "," | sed 's/,$//'`
top - 14:05:31 up 53 days,  2:43,  9 users,  load average: 0.29, 0.34, 0.22
Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  8.2%sy,  0.0%ni, 86.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  66082088k total, 29512860k used, 36569228k free,   756352k buffers
Swap: 32767992k total,  1019900k used, 31748092k free, 15710284k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                          27855 rdtfare   20   0 4454m 1.3g 5300 S  0.7  2.0 338:31.37 java
 2034 jenkins   20   0 18.3g 5.2g 5284 S  0.3  8.2  56:02.38 java