两台存储节点(4个DS进程)为例,部署拓扑图发下所示:
安装tfs(centos7.6)
安装依赖的软件包
- automake TFS基于automake工具构建
- 下载源码安装
- apt-get install automake
- yum install automake.noarch
- libtool automake需要使用libtool
- 下载源码安装
- apt-get install libtool
- yum install libtool.x86_64
- realine 用于命令行编辑的库
- 下载源码安装
- apt-get install libreadline-dev
- yum install readline-devel.x86_64
- libz-devel 用于数据压缩/解压缩
- 下载源码安装
- apt-get install zlib1g-dev
- yum install zlib-devel.x86_64
- uuid-devel 用于生成全局唯一ID
- 下载源码安装
- apt-get install uuid-dev
- yum install e2fsprogs-devel.x86_64
- tcmalloc google的内存管理库
- 下载源码安装
- apt-get install libgoogle-perftools-dev
- yum install google-perftools.x86_64
下载源码
安装git工具
yum install git
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# git clone https://github.com/yage99/tfs.git
[root@localhost src]# cd tfs/
安装tb-common-utils
TFS使用tb-common-utils软件包,tb-common-utils包含淘宝使用的基础系统库tbsys和网络库tbnet两个组件;安装tb-common-utils前需要设置环境变量TBLIB_ROOT,tbsys和tbnet将会被安装TBLIB_ROOT对应的路径(必须是绝对路径)下,TFS会在这个路径下查找tbsys、tbnet头文件和库。
设置TBLIB_ROOT环境变量
在~/.bash_profile文件中加入,export TBLIB_ROOT=path_to_tbutil , 然后执行source ~/.bash_profile
[root@localhost tb-common-utils]# vi /root/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export TBLIB_ROOT=/usr/local/src/tfs/tb-common-utils
[root@localhost tb-common-utils]# source ~/.bash_profile
[root@localhost tb-common-utils]# echo $TBLIB_ROOT
/usr/local/tfs/tb-common-utils
编译安装
[root@localhost tb-common-utils]# sh build.sh
提示以下错误,没有安装c++编译器
安装c++编译器
[root@localhost tb-common-utils]# yum install gcc-c++
重新运行[root@localhost tb-common-utils]# sh build.sh
安装TFS
编译安装
[root@localhost tfs]# scripts/install_centos7.sh
默认安装在/root/tfs_bin/目录下。
布署
修改nameserver ns.conf配置文件
[public]
#log file size default 1GB
log_size=1073741824
#log file num default 64
log_num = 64
#log file level default debug
log_level=info
#main queue size default 10240
task_max_queue_size = 10240
#listen port
port = 8100
#work directoy
work_dir=/root/tfs_bin
#device name
dev_name= ens33
#work thread count default 4
thread_count =32
#ip addr(vip)
ip_addr = 192.168.0.201
[nameserver]
safe_mode_time = 360
ip_addr_list = 192.168.0.201|192.168.0.2
group_mask = 255.255.255.255
#second
max_write_timeout = 3
#max_task_in_machine_nums = 14
#cleanup_write_timeout_threshold = 40960
# cluster id defalut 1
cluster_id = 1
# block use ratio
block_max_use_ratio = 98
# bytes
block_max_size = 75497472
#
max_replication = 2
# block lost, replicate ratio
replicate_ratio = 50
max_write_filecount = 64
# use capacity ratio
use_capacity_ratio = 96
#heart interval time(seconds)
heart_interval = 4
# object dead max time(seconds) default
object_dead_max_time = 300
#
object_clear_max_time = 180
heart_thread_count = 4
heart_max_queue_size = 2048
report_block_thread_count = 6
report_block_max_queue_size = 32
report_block_hour_range = 2~4
#day
report_block_time_interval = 1
#heart_interval * 2
#report_block_expired_time = 4
#replicate block wait time
repl_wait_time = 180
compact_delete_ratio = 10
compact_max_load = 200
compact_hour_range = 1~10
dump_stat_info_interval = 60000000
balance_percent = 0.05
add_primary_block_count = 3
task_percent_sec_size = 200
oplog_sync_max_slots_num = 1024
oplog_sync_thread_num = 1
group_count = 1
group_seq = 0
discard_newblk_safe_mode_time = 360
choose_target_server_random_max_num = 128
#task_expired_time = 120
dataserver1的ds.conf配置文件
[public]
#log file size default 1GB
log_size=1073741824
#log file num default 64
log_num = 64
#log file level default debug
log_level=info
#main queue size default 10240
task_max_queue_size = 10240
#listen port
port = 8200
#work directoy
work_dir=/root/tfs_bin
#device name
dev_name= ens33
#work thread count default 4
thread_count = 32
#ip addr
ip_addr = 192.168.0.203
[dataserver]
#nameserver ip addr(vip)
ip_addr = 192.168.0.201
ip_addr_list = 192.168.0.201
#nameserver port
port = 8100
# slave cluster ns ip:port
# slave_nsip = 192.168.0.10:8100
#heart interval time(seconds)
heart_interval = 2
check_interval = 2
#expire_datafile_time = 90
#expire_clonedblock_time = 180
#expire_compactblock_time = 600
replicate_threadcount = 1
#write_sync_flag = 1
block_max_size = 75497472
dump_visit_stat_interval = 60
#max_io_warning_time = 0
backup_type = 1
#backup_path = /home/admin/tfs
#max_data_file_nums = 50
#max_crc_error_nums = 4
#max_eio_error_nums_ = 6
#expire_checkblock_time = 86000
#max_cpu_usage = 60
#dump_stat_info_interval = 60000000
mount_name = /data/disk
# KB
mount_maxsize = 9000000
base_filesystem_type = 1
superblock_reserve = 0
# bytes
avg_file_size = 15360
# bytes
mainblock_size = 75497472
# bytes
extblock_size = 4194304
block_ratio = 0.5
hash_slot_ratio = 0.5
# cd ~/tfs_bin
# ./script/tfs start_ns 或者 ./bin/nameserver -f conf/ns.conf -d
如果没有提示错误,则NS就已经在后台开始运行了,可通过ps查看相应进行,或进入logs下,查看nameserver.log,如包含“nameserver running”则说明启动正常
dataserver2的ds.conf配置文件和dataserver1相同
在两台机器上分别进行如下操作,准备好数据目录
# cd ~/tfs_bin
# ./script/stfs format 1 // 结果会在命令行提示
# ./script/stfs format 2
以上两条命令也可合并为 ./script/stfs format 1-2 或 ./script/stfs format 1,2
如果要清理格式化产生的数据,将上述命令中format换成clear即可
格式化成功后,会发现/data/disk1,/data/disk2下面产生了一堆以数字命名的文件(1-n),因为TFS的block文件是以数字命名的,从1开始递增编号。
[root@dataserver1 ~]# ll -h /data/disk1/
total 7.7G
-rw-r--r--. 1 root root 72M Feb 23 19:57 1
-rw-r--r--. 1 root root 72M Feb 22 01:30 10
-rw-r--r--. 1 root root 72M Feb 22 01:32 100
-rw-r--r--. 1 root root 72M Feb 22 01:32 101
-rw-r--r--. 1 root root 72M Feb 22 01:32 102
-rw-r--r--. 1 root root 72M Feb 22 01:32 103
-rw-r--r--. 1 root root 72M Feb 22 01:32 104
-rw-r--r--. 1 root root 72M Feb 22 01:32 105
-rw-r--r--. 1 root root 72M Feb 22 01:32 106
-rw-r--r--. 1 root root 72M Feb 22 01:32 107
-rw-r--r--. 1 root root 72M Feb 22 01:29 108
-rw-r--r--. 1 root root 72M Feb 22 01:29 109
-rw-r--r--. 1 root root 72M Feb 23 22:18 11
-rw-r--r--. 1 root root 72M Feb 22 01:30 12
-rw-r--r--. 1 root root 72M Feb 22 01:30 13
-rw-r--r--. 1 root root 72M Feb 22 01:30 14
-rw-r--r--. 1 root root 72M Feb 22 01:30 15
-rw-r--r--. 1 root root 72M Feb 22 01:30 16
-rw-r--r--. 1 root root 72M Feb 22 03:55 17
-rw-r--r--. 1 root root 72M Feb 22 04:18 18
-rw-r--r--. 1 root root 72M Feb 23 22:33 19
-rw-r--r--. 1 root root 72M Feb 23 19:54 2
-rw-r--r--. 1 root root 72M Feb 22 04:20 20
-rw-r--r--. 1 root root 72M Feb 22 01:30 21
-rw-r--r--. 1 root root 72M Feb 22 04:23 22
-rw-r--r--. 1 root root 72M Feb 22 01:30 23
-rw-r--r--. 1 root root 72M Feb 22 01:30 24
-rw-r--r--. 1 root root 72M Feb 22 01:30 25
-rw-r--r--. 1 root root 72M Feb 22 01:30 26
-rw-r--r--. 1 root root 72M Feb 22 01:30 27
-rw-r--r--. 1 root root 72M Feb 22 01:30 28
-rw-r--r--. 1 root root 72M Feb 22 01:30 29
-rw-r--r--. 1 root root 72M Feb 22 01:30 3
-rw-r--r--. 1 root root 72M Feb 22 01:30 30
-rw-r--r--. 1 root root 72M Feb 22 01:30 31
-rw-r--r--. 1 root root 72M Feb 22 01:30 32
-rw-r--r--. 1 root root 72M Feb 22 01:30 33
-rw-r--r--. 1 root root 72M Feb 22 01:30 34
-rw-r--r--. 1 root root 72M Feb 22 01:30 35
-rw-r--r--. 1 root root 72M Feb 22 01:30 36
-rw-r--r--. 1 root root 72M Feb 22 01:31 37
-rw-r--r--. 1 root root 72M Feb 22 01:31 38
-rw-r--r--. 1 root root 72M Feb 22 01:31 39
-rw-r--r--. 1 root root 72M Feb 23 04:39 4
-rw-r--r--. 1 root root 72M Feb 22 01:31 40
-rw-r--r--. 1 root root 72M Feb 22 01:31 41
-rw-r--r--. 1 root root 72M Feb 22 01:31 42
-rw-r--r--. 1 root root 72M Feb 22 01:31 43
-rw-r--r--. 1 root root 72M Feb 22 01:31 44
-rw-r--r--. 1 root root 72M Feb 22 01:31 45
-rw-r--r--. 1 root root 72M Feb 22 01:31 46
-rw-r--r--. 1 root root 72M Feb 22 01:31 47
-rw-r--r--. 1 root root 72M Feb 22 01:31 48
-rw-r--r--. 1 root root 72M Feb 22 01:31 49
-rw-r--r--. 1 root root 72M Feb 23 20:04 5
-rw-r--r--. 1 root root 72M Feb 22 01:31 50
-rw-r--r--. 1 root root 72M Feb 22 01:31 51
-rw-r--r--. 1 root root 72M Feb 22 01:31 52
-rw-r--r--. 1 root root 72M Feb 22 01:31 53
-rw-r--r--. 1 root root 72M Feb 22 01:31 54
-rw-r--r--. 1 root root 72M Feb 22 01:31 55
-rw-r--r--. 1 root root 72M Feb 22 01:31 56
-rw-r--r--. 1 root root 72M Feb 22 01:31 57
-rw-r--r--. 1 root root 72M Feb 22 01:31 58
-rw-r--r--. 1 root root 72M Feb 22 01:31 59
-rw-r--r--. 1 root root 72M Feb 22 01:30 6
-rw-r--r--. 1 root root 72M Feb 22 01:31 60
-rw-r--r--. 1 root root 72M Feb 22 01:31 61
-rw-r--r--. 1 root root 72M Feb 22 01:31 62
-rw-r--r--. 1 root root 72M Feb 22 01:31 63
-rw-r--r--. 1 root root 72M Feb 22 01:31 64
-rw-r--r--. 1 root root 72M Feb 22 01:31 65
-rw-r--r--. 1 root root 72M Feb 22 01:31 66
-rw-r--r--. 1 root root 72M Feb 22 01:31 67
-rw-r--r--. 1 root root 72M Feb 22 01:31 68
-rw-r--r--. 1 root root 72M Feb 22 01:31 69
-rw-r--r--. 1 root root 72M Feb 23 21:43 7
-rw-r--r--. 1 root root 72M Feb 22 01:31 70
-rw-r--r--. 1 root root 72M Feb 22 01:31 71
-rw-r--r--. 1 root root 72M Feb 22 01:31 72
-rw-r--r--. 1 root root 72M Feb 22 01:31 73
-rw-r--r--. 1 root root 72M Feb 22 01:31 74
-rw-r--r--. 1 root root 72M Feb 22 01:31 75
-rw-r--r--. 1 root root 72M Feb 22 01:31 76
-rw-r--r--. 1 root root 72M Feb 22 01:32 77
-rw-r--r--. 1 root root 72M Feb 22 01:32 78
-rw-r--r--. 1 root root 72M Feb 22 01:32 79
-rw-r--r--. 1 root root 72M Feb 23 22:32 8
-rw-r--r--. 1 root root 72M Feb 22 01:32 80
-rw-r--r--. 1 root root 72M Feb 22 01:32 81
-rw-r--r--. 1 root root 72M Feb 22 01:32 82
-rw-r--r--. 1 root root 72M Feb 22 01:32 83
-rw-r--r--. 1 root root 72M Feb 22 01:32 84
-rw-r--r--. 1 root root 72M Feb 22 01:32 85
-rw-r--r--. 1 root root 72M Feb 22 01:32 86
-rw-r--r--. 1 root root 72M Feb 22 01:32 87
-rw-r--r--. 1 root root 72M Feb 22 01:32 88
-rw-r--r--. 1 root root 72M Feb 22 01:32 89
-rw-r--r--. 1 root root 72M Feb 22 04:23 9
-rw-r--r--. 1 root root 72M Feb 22 01:32 90
-rw-r--r--. 1 root root 72M Feb 22 01:32 91
-rw-r--r--. 1 root root 72M Feb 22 01:32 92
-rw-r--r--. 1 root root 72M Feb 22 01:32 93
-rw-r--r--. 1 root root 72M Feb 22 01:32 94
-rw-r--r--. 1 root root 72M Feb 22 01:32 95
-rw-r--r--. 1 root root 72M Feb 22 01:32 96
-rw-r--r--. 1 root root 72M Feb 22 01:32 97
-rw-r--r--. 1 root root 72M Feb 22 01:32 98
-rw-r--r--. 1 root root 72M Feb 22 01:32 99
drwxr-xr-x. 2 root root 4.0K Feb 22 01:29 extend
-rw-r--r--. 1 root root 488 Feb 22 01:32 fs_super
drwxr-xr-x. 2 root root 4.0K Feb 22 01:32 index
drwx------ 2 root root 16K Feb 22 00:10 lost+found
在两台机器上,启动DS服务
# cd ~/tfs_bin
# ./script/tfs start_ds 1-2 // 序号的使用与stfs类似,可通过","分隔序号,通过"-"指定范围序列
或./bin/dataserver -f conf/ds.conf -i 1 -d (-i 指定序号)
分别在datqasever1和dataserver2启动ds服务
[root@dataserver1 ~]# cd tfs_bin/
[root@dataserver1 tfs_bin]# scripts/tfs start_ds 1-2
dataserver 1 is up SUCCESSFULLY pid: 10804
dataserver 2 is up SUCCESSFULLY pid: 10840
通过ps可查看DS是否正常启动, 也可进入logs目录,查看dataserver_i.log(i用相应的序号代替),如果包含“dataservice start”,则说明DS启动正常。
在nameserver运行ssm命令,查看的dataserver的一些基本情况
[root@nameserver tfs_bin]# bin/ssm -s 192.168.0.201:8100
server -b 随机列出dataserver的block块
show > server -b
SERVER_ADDR CNT BLOCK
192.168.0.203:8200 107 563 564 565 571 574 578 579 580 581 585
591 592 593 594 597 598 599 605 607 608
609 610 611 612 619 620 621 622 623 626
627 628 632 634 635 637 640 641 642 643
645 647 648 652 653 654 659 660 663 664
665 666 670 672 677 678 679 682 683 684
686 690 695 696 697 699 701 702 703 705
706 707 708 709 710 711 719 720 722 727
728 729 732 734 736 739 742 745 747 750
751 752 754 755 760 761 762 766 767 770
771 773 779 780 781 782 783
192.168.0.204:8200 107 557 558 559 564 566 567 568 569 573 574
575 576 581 586 587 588 593 594 595 596
598 599 600 601 606 608 611 612 617 618
621 623 624 627 628 629 634 635 636 640
643 644 645 647 650 654 655 656 657 659
664 666 667 670 671 672 677 679 685 686
687 688 689 692 695 698 699 700 704 709
710 711 713 714 715 716 717 718 722 727
731 735 736 737 740 741 742 747 748 749
753 754 755 756 761 762 763 767 772 773
774 775 779 780 781 782 783
192.168.0.203:8202 109 566 567 568 569 570 572 573 575 576 577
582 583 584 586 587 588 589 590 595 596
600 601 602 603 604 606 613 614 615 616
617 618 624 625 629 630 631 633 636 638
639 644 646 649 650 651 655 656 657 658
661 662 667 668 669 671 673 674 675 676
680 681 685 687 688 689 691 692 693 694
698 700 704 712 713 714 715 716 717 718
721 723 724 725 726 730 731 733 737 738
740 741 743 744 748 753 756 757 758 759
763 764 768 769 772 774 775 776 778
192.168.0.204:8202 107 560 561 562 563 570 571 572 577 579 580
583 584 589 590 591 592 597 602 603 604
605 607 609 610 613 614 615 616 619 620
622 626 631 632 633 637 638 639 641 646
648 649 651 652 653 658 660 661 662 663
665 668 669 673 675 676 678 680 681 682
683 684 690 691 693 694 696 697 701 702
705 707 708 712 719 720 721 725 726 728
729 730 732 733 734 738 743 744 745 746
750 751 752 757 758 759 760 764 765 766
768 769 770 771 776 777 778
server -w 随机列出dataserver的可写块
show > server -w
SERVER_ADDR CNT WRITABLE BLOCK
192.168.0.203:8200 57 564 565 571 574 579 580 581 591 592 597
598 607 608 609 611 612 620 621 623 626
627 632 634 637 640 642 643 645 652 653
659 663 664 666 672 679 683 684 699 703
705 706 707 710 719 720 722 728 734 739
752 754 755 761 780 781 782
192.168.0.204:8200 44 557 558 567 569 573 586 593 594 599 601
606 618 624 628 635 644 647 654 655 657
670 671 677 685 686 695 700 709 711 715
716 727 735 736 737 742 747 756 762 763
767 773 779 783
192.168.0.203:8202 54 566 568 570 575 576 577 587 588 595 596
600 616 617 625 629 630 631 636 638 650
656 661 667 668 674 676 687 688 689 691
692 694 698 704 713 714 717 718 721 725
730 731 733 740 741 743 748 753 758 764
768 772 774 775
192.168.0.204:8202 62 560 562 563 572 583 584 589 590 602 603
604 605 610 613 614 615 619 622 633 639
641 646 648 649 651 658 660 662 665 669
673 675 678 680 681 682 690 693 696 697
701 702 708 712 726 729 732 738 744 745
750 751 757 759 760 766 769 770 771 776
777 778
machine -a 列出dataserver使用报告
show > machine -a
SERVER_IP NUMS UCAP / TCAP = UR BLKCNT LOAD TOTAL_WRITE TOTAL_READ LAST_WRITE LAST_READ MAX_WRITE MAX_READ
--------------- ---- ------------------ -------- ---- ----------- ---------- ---------- --------- -------- ---------
192.168.0.203 2 16.88G 17.03G 99% 216 10 0 0 0 0 0 0 0 0 0 0 0 0
192.168.0.204 2 16.72G 17.03G 98% 214 10 0 0 0 0 0 0 0 0 0 0 0 0
Total : 2 4 33.59G 34.06G 98% 430 10 0 0 0 0 0 0 0 0
测试上传一张图片,1,jpg,大小为258229。
使用tfstool上传文件
[root@nameserver tfs_bin]# bin/tfstool -s 192.168.0.201:8100
查看块存了什么?
[root@dataserver1 tfs_bin]# bin/ds_client -d 192.168.0.204:8200
DataServer> list_file 567
[2021-02-23 00:54:46] DEBUG base_packet_factory.cpp:48 [140544897247168] pcode: 14, length: 12
[2021-02-23 00:54:46] DEBUG socket.cpp:113 [140544897247168] 打开, fd=4, addr=192.168.0.204:8200
[2021-02-23 00:54:46] INFO transport.cpp:394 [140544897247168] ADDIOC, SOCK: 4, 192.168.0.204:8200, RON: 1, WON: 1, IOCount:1, IOC:0x2044e40
[2021-02-23 00:54:46] DEBUG channelpool.cpp:57 [140544897247168] 分配的Channel总数:25 (48)
FileList Size = 1
FILE_NAME FILE_ID OFFSET SIZE USIZE M_TIME C_TIME FLAG CRC
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
T0BthTByJT1RCvBVdK 1 0 147067 147103 2021-02-23 00:51:47 2021-02-23 00:51:47 00 3923474054
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
FILE_NAME FILE_ID OFFSET SIZE USIZE M_TIME C_TIME FLAG CRC
Total : 1 files
取出块中的文件
nginx-tfs(webservice 安装)
-
TFS模块使用了一个开源的JSON库来支持JSON,请先安装yajl-2.0.1。
-
./configure --add-module=/path/to/nginx-tfs
-
make && make install
安装yajl
[root@localhost src]# git clone https://github.com/lloyd/yajl
[root@localhost yajl]# yum install cmake
make
make install
[root@localhost src]# git clone https://github.com/alibaba/nginx-tfs
[root@localhost src]# wget http://nginx.org/download/nginx-1.3.14.tar.gz(新版本编译不通过1.16.1)
[root@localhost nginx-1.16.1]# yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
[root@localhost nginx-1.16.1]# ./configure --add-module=/usr/local/src/nginx-tfs
[root@localhost nginx-1.16.1]# .make && make install
nginx.conf配置
[root@nameserver sbin]# cat /usr/local/nginx/conf/nginx.conf
user nobody;
worker_processes 2;
#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;
tfs_upstream tfs_rc {
#server 192.168.0.201:8100;
#type ns;
type rcs;
server 192.168.0.201:5100;
rcs_zone name=tfs1 size=128M;
rcs_interface ens33;
rcs_heartbeat lock_file=/usr/local/nginx/logs/lk.file interval=10s;
}
server {
listen 7501;
server_name localhost;
tfs_keepalive max_cached=100 bucket_count=10;
#tfs_log "pipe:/usr/local/sbin/ -p 30min /usr/local/nginx/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log";
location / {
tfs_pass tfs://tfs_rc;
}
}
tfs_upstream tfs_rc2 {
#server 192.168.0.201:8100;
#type ns;
type rcs;
server 192.168.0.201:5100;
rcs_zone name=tfs2 size=128M;
rcs_interface ens33;
rcs_heartbeat lock_file=/usr/local/nginx/logs/lk2.file interval=10s;
}
server {
listen 7502;
server_name localhost;
tfs_keepalive max_cached=100 bucket_count=10;
#tfs_log "pipe:/usr/local/cronolog/sbin/ -p 30min /usr/local/nginx/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log";
location / {
tfs_pass tfs://tfs_rc2;
}
}
}
nginx.service
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
rcserver编译安装
进入 /usr/local/src/tfs/src/rcserver源码目录
执行make报
mysql_database_helper.cpp:18:19: fatal error: mysql.h: No such file or directory
#include <mysql.h>
^
compilation terminated.
make: *** [mysql_database_helper.o] Error 1
yum install mysql-devel
export MYSQL_CFLAGS=`mysql_config --cflags`
修正mysql.h实现文件路径
重新执行make && make install
查看rcserver已经存在
[root@localhost rcserver]# ll /root/tfs_bin/bin/rcserver
-rwxr-xr-x. 1 root root 1709152 Feb 24 01:41 /root/tfs_bin/bin/rcserver
rc.conf配置文件
[public]
log_level = debug
log_num = 20
log_size = 134217728
work_dir = /root/tfs_bin
thread_count = 4
ip_addr = 192.168.0.201
dev_name = ens33
port = 5100
[rcserver]
rc_monitor_interval = 60
rc_stat_interval = 30
rc_update_interval = 10
rc_db_info = 192.168.0.201:3306:rcserver
rc_db_user = rc1
rc_db_pwd = rc1
新数据库rcserver,创建用户rc1,密码为rc1
执行/root/tfs_bin/sql/rcs/create_table.sql创建数据库rcserver
向t_cluster_rack_info表中播入数据
INSERT INTO `t_cluster_rack_info` VALUES (1, 'T1Axxxx', '192.168.0.201:8100', 2, 'qwemgh_tfs', now(), now());
向t_cluster_rack_groupo表中播入数据
INSERT INTO `t_cluster_rack_group` VALUES (1, 1, 2, 'qwemgh_tfs', now(), now());
向t_app_info表中播入数据
INSERT INTO `t_app_info` VALUES ('tfs1', 3, 10, 1, 0, 'qwemgh_picture', 'mutang', 5, 0, '', '2021-02-22 22:06:38', '2021-02-22 22:06:38');
INSERT INTO `t_app_info` VALUES ('tfs2', 1, 10, 1, 0, 'picture', 'jingpan', 5, 0, '', '2021-02-23 03:40:01', '2021-02-23 03:40:01');
配置服务开机自启
ns服务
[root@nameserver ~]# cat /usr/lib/systemd/system/tfsns.service
[Unit]
Description=tfsns service
After=network.target
[Service]
Type=forking
ExecStart=/root/tfs_bin/scripts/tfs start_ns
ExecStop=/root/tfs_bin/scripts/tfs stop_ns
PrivateTmp=true
[Install]
WantedBy=multi-user.target
rc服务
[root@nameserver ~]# cat /usr/lib/systemd/system/tfsrc.service
[Unit]
Description=tfsrc service
After=network.target mariadb.service
[Service]
Type=forking
ExecStart=/root/tfs_bin/scripts/tfs start_rc
ExecStop=/root/tfs_bin/scripts/tfs stop_rc
PrivateTmp=true
[Install]
WantedBy=multi-user.target
ds服务
[root@dataserver1 ~]# cat /usr/lib/systemd/system/tfsds.service
[Unit]
Description=tfsds service
After=network.target
[Service]
Type=forking
ExecStart=/root/tfs_bin/scripts/tfs start_ds 1-2
ExecStop=/root/tfs_bin/scripts/tfs stop_ds 1-2
PrivateTmp=true
[Install]
WantedBy=multi-user.target
http://192.168.0.201:7501/v1/tfs/T18RhTByJT1RCvBVdK.jpg
参考文章
淘宝TFS分布式文件系统亲测:https://www.linuxidc.com/Linux/2012-08/67500.htm
TFS介绍:https://www.aboutyun.com/thread-7206-1-1.html
布署实例:https://www.pianshen.com/article/719899493/
TFS使用文档-运维工具篇:http://blog.chinaunix.net/uid-20196318-id-4071042.html
实例:https://wenku.baidu.com/view/61cdd28e8ad63186bceb19e8b8f67c1cfad6ee05.html
编译安装nginx 提示requires the PCRE library:https://www.cnblogs.com/crxis/p/6973232.html
https://github.com/yage99/tfs/blob/master/DEPLOY.md
https://github.com/alibaba/nginx-tfs
https://github.com/bigplum/tfs-php-client