FastDFS是分布式存储系统,可以提供图片服务。
在本机使用vmware虚拟机安装,供使用8台机器,架构如下:
第一天:
准备了VMWARE虚拟机,linux操作系统,当时想选择centos6.5,但是安装后有问题,本人又不喜欢centos7,选择了ubuntu14.04 server版,共创建复制了11台机器。
下载了FastDFS 5.05版本相关软件。
第二天:
准备了Ansible 自动化运维工具,并熟悉各种模块,本来就这几台机器,手工在每台机器上操作,也安装fastdfs成功了。但本着学习的目的,还是撑着使用ansible来复制文件,修改文件熟悉,运行命令,运行脚本等操作,因为不熟悉,和碰到几个问题,还有就是网速慢,折腾了一天,今天碰到的最大的两个问题记录下来,
第一个:
ansible在ubuntu中执行需要root权限时,即使提供了sudo参数和密码,也无法成功的原因,是因为命令中没有使用sudo的原因,例如:
ansible all -a "sudo apt-get install gcc " --sudo --ask-sudo-pass 正确
写成
ansible all -a "apt-get install gcc" --sudo --ask-sudo-pass 错误
因为不熟悉,简单的问题,折腾的我还是很难受。晚上思考后,发现是这样解决的,第二天测试通过,当时为这个问题专门百度和加群解决,发现时间浪费了不少,可是没有人回答。
第二个:
2,获取某个文件的第二行第二列的写法如下:
`sed -n "2,1p" /etc/hosts | awk '{print $2}'`
其中sed -n "2,1p" /etc/hosts代表从文件/etc/hosts打印第二行到第一行,因1<2,所以第一行不打印,如果第二个参数为3,就打印第二行,第三行。
p参数代表打印,-n参数代表静默
awk '{print $2}'
代表打印给出的文本第二列。$0代表全部,$1代表第1列。
这个问题是因为我想更改主机名称。
第三天
今天开始安装Tracker Server,安装两台,
tracker server配置文件
# bind an address of this host
# empty for bind all addresses of this host
bind_addr=192.168.127.133
#绑定地址,对于多网卡,特别有用
# the tracker server port
port=22122
#绑定端口,如果此处修改,用的tracker server的端口都需要修改
# connect timeout in seconds
# default value is 30s
connect_timeout=30
#连接超时时间
# network timeout in seconds
# default value is 30s
network_timeout=60
#网络超时时间
# the base path to store data and log files
base_path=/mnt/fastdfs_tracker
#存储基本路径
# max concurrent connections this server supported
max_connections=256
#最大并发连接数
# accept thread count
# default value is 1
# since V4.07
accept_threads=1
# work thread count, should <= max_connections
# default value is 4
# since V2.00
work_threads=4
# the method of selecting group to upload files
# 0: round robin
# 1: specify group
# 2: load balance, select the max free space group to upload file
store_lookup=0
#上传文件选择group策略
# which group to upload file
# when store_lookup set to 1, must set store_group to the group name
store_group=group2
#
# which storage server to upload file
# 0: round robin (default)
# 1: the first server order by ip address
# 2: the first server order by priority (the minimal)
store_server=0
#上传文件选择存储服务器策略
在编译安装track server是,碰到这样的问题,
无法找到文件 "logger.h"
答案是百度到的,需要安装另一个包libfastcommon。
在启动tracker server时报错如下:
/usr/bin/fdfs_trackerd: error while loading shared libraries: libfastcommon.so:
网上提到这个问题还是很多的,我的解决方法如下:
首先,我安装是默认安装,在./configure时未加任何参数。
然后,在/usr/lib64目录下可以找到该libfastcommon.so,
建立软连接,
sudo ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
sudo ldconfig
这样我的问题就解决了。
第四天
今天安装storage server,4台
安装步骤同昨天安装tracker server,不同的是配置文件不一样,昨日使用的tracker.conf,今天的为storage.conf
Storage Server配置文件
# the name of the group this storage server belongs to
#
# comment or remove this item for fetching from tracker server,
# in this case, use_storage_id must set to true in tracker.conf,
# and storage_ids.conf must be configed correctly.
group_name=group1
#group的名称,此处为划分group项,重要参数,如果想让这台存储机器化到group1,就写group1
# bind an address of this host
# empty for bind all addresses of this host
bind_addr=
# if bind an address of this host when connect to other servers
# (this storage server as a client)
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true
# the storage server port
port=23000
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# heart beat interval in seconds
heart_beat_interval=30
# disk usage report interval in seconds
stat_report_interval=60
# the base path to store data and log files
base_path=/mnt/fastdfs_storage_info
#存储基本路径
# max concurrent connections the server supported
# default value is 256
# more max_connections means more memory will be used
max_connections=256
#最大并发连接数
# the buff size to recv / send data
# this parameter must more than 8KB
# default value is 64KB
# since V2.00
buff_size = 256KB
# path(disk or mount point) count, default value is 1
store_path_count=1
#存储路径数量
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/mnt/fastdfs_storage_data
#store_path1=/mnt/fastdfs_storage_data1
#这里根据实际来选择,如果机器挂载两块硬盘做存储,可以设置两个存储路径
# subdir_count * subdir_count directories will be auto created under each
# store_path (disk), value can be 1 to 256, default value is 256
subdir_count_per_path=256
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.127.133:22122
#tracker server地址
#tracker_server=192.168.127.134:22122
还需要安装nginx,我使用源码编译。
安装步骤很简单,下载zlib、pcre、openssl、fastdfs-nginx-module、nginx
以上压缩包全部解压缩。
进入nginx源码目录
配置如下:
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module/src --with-http_ssl_module --with-pcre=/root/pcre-8.37 --with-openssl=/root/openssl-1.0.2d --with-zlib=/root/zlib-1.2.8
make
make install
安装目录在/usr/local/nginx
今天还碰到一个问题,意思是无法找到libfdfsclient.so,处理方法同libfastcommon.so
nginx配置
cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
cp fastdfs-5.05/conf/{anti-steal.jpg,http.conf,mime.types} /etc/fdfs/
touch /var/log/mod_fastdfs.log
chown nobody.nobody /var/log/mod_fastdfs.log
server {
listen 80;
server_name localhost;
location /G1/M00{
root /data2/;
ngx_fastdfs_module;
}
}
配置mod_fastdfs.conf
connect_timeout=2
network_timeout=30
base_path=/tmp
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf
tracker_server=192.168.1.131:22122
tracker_server=192.168.1.132:22122
storage_server_port=23000
group_name=G1
url_have_group_name = true
store_path_count=1
store_path0=/data2/
log_level=info
log_filename=/var/log/mod_fastdfs.log
response_mode=proxy
if_alias_prefix=
#include http.conf
flv_support = true
flv_extension = flv
group_count = 2
[group1]
group_name=G1
storage_server_port=23000
store_path_count=1
store_path0=/data2/
[group2]
group_name=G2
storage_server_port=23000
store_path_count=1
store_path0=/data2/
第五天
今天安装了ntp时间服务器,因现在为测试,将ntp服务合并到admin服务器上。
全部机器都安装ntp,安装很简单,一个命令就可以。
命令为:sudo apt-get install ntp
安装完毕后,差别主要在配置文件上,
服务器的配置文件如下:
关键配置项,其中restrict项限制本地网络不能修改
server time.windows.com prefer
server 127.127.1.0
fudge 127.127.1.0 stratum 10
#不允许来自公网ipv4和ipv6客户端访问
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
#
restrict 192.168.127.0 mask 255.255.255.0 nomodify
restrict 127.0.0.1
restrict ::1
ntp客户端配置文件如下:
关键配置,这里只配置了本地的ntp server
# Specify one or more NTP servers.
server 192.168.127.101
restrict 127.0.0.1
restrict ::1
在安装时间服务器的时候,顺便有设置时区的问题,ubuntu设置时区很简单:
ubuntu时区调整命令:
dpkg-reconfigure tzdata
第六天
今天安装redis,我使用的ubuntu,安装redis很简单,
使用命令:
sudo apt-get install redis-server
安装完成后,可以参考redis.io官网进行配置,生产环境可以做主从,如果对丢失数据有苛刻性,可以使用mysql做为辅助,网上的例子很多,我使用默认配置。
我使用redis主要用来存放图片名称和图片路径的关系。
第七天
今天安装fastdfs监控,fastdfs-zyc
1,安装jdk1.6+
到jdk官方网站可以下载所需的的jdk,
http://www.oracle.com/technetwork/java/javase/downloads/index.html
上传到服务器,解压缩jdk
tar -zxf jdk-7u11-linux-x64.gz
mv jdk1.7.0_11/ /usr/local
配置java全局环境变量
vim /etc/profile
添加:
export JAVA_HOME=/usr/local/jdk1.7.0_11
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
输入以下命令生效,source /etc/profile
2,安装tomcat6+(适配jdk版本)
到tomcat官方网站http://tomcat.apache.org/ 下载最新的tomcat.本文以tomcat7.0.35为例
tar -zxvf apache-tomcat-7.0.35.tar.gz
进入/usr/local/ apache-tomcat-7.0.35/bin目录,
执行:./startup.sh 看启动是否正常 ,正常启动出现如下信息
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.35
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.35
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.35/temp
Using JRE_HOME: /usr/local/jdk1.7.0_11
Using CLASSPATH: /usr/local/apache-tomcat-7.0.35/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.35/bin/tomcat-juli.jar
启 linux 防火墙8080(使用tomcat默认端口)端口
vim /etc/sysconfig/iptables
-A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT
重启 防火墙服务
service iptables restart
在浏览器内访问:http:// {serviceIp}:8080/看能否出现tomcat的默认页面
3,安装mysql
yum install mysql-server
b)修改数据库字符集设置
mysql配置文件/etc/my.cnf中加入default-character-set=utf8
c)启动mysql 服务
service mysqld start或者/etc/init.d/mysqld start
d)添加mysql到启动项
chkconfig --add mysqld
e)创建toot管理员
mysqladmin -u root password 1qazxsw2
f)使用root登录 ,创建fastdfs数据库
mysql -uroot -p
mysql > create database fastdfs;
远程访问
开放防火墙的端口号
vim /etc/sysconfig/iptables
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
4,上传fastdfs-zyc到tomcat webapps目录下,fastdfs-zyc下载地址:https://github.com/canmind/fastdfs-zyc
unzip fastdfs-zyc.zip
5,导入监控系统默认的表结构及初始化数据
mysql -uroot -p --default-character-set UTF8 fastdfs < fdfs.sql
6,修改数据库配置连接
修改application.properties
datasource.url=jdbc:mysql://localhost:3306/fastdfs?useUnicode=true&characterEncoding=UTF-8
datasource.username=root
datasource.password=1qazxsw2
7,修改企业邮箱配置
mail.smtp.host=demo.temp.com
mail.smtp.username=demo
mail.smtp.password=demo
8,修改fastdfs_client.conf
配置 tracker_server ip= 192.168.20.140:22122
9,修改config.xml配置storage节点
<?xml version="1.0" encoding="UTF-8"?>
<root>
<server>
<ip>192.168.20.141</ip>
<port>22</port>
<username>root</username>
<password>1qazxsw2</password>
<logpath>/usr/local/nginx-1.3.4/logs/</logpath>
</server>
<server>
<ip>192.168.20.144</ip>
<port>22</port>
<username>root</username>
<password>1qazxsw2</password>
<logpath>/usr/local/nginx-1.3.4/logs/</logpath>
</server>
<!-- 方式1
<ssh>/Users/Chen/.ssh/id_rsa</ssh>
<ip>192.168.40.53</ip>
<port>22</port>
<username>root</username>
<logpath>/usr/local/nginx-1.3.4/logs/</logpath>
</server>
-->
<!--方式2
<ip>192.168.40.53</ip>
<username>root</username>
<password>vivame@2012</password>
<logpath>/usr/local/nginx-1.3.4/logs/</logpath>
</server>
-->
</root>
11,重新启动tomcat即可访问监控系统。
第八天
今天安装文件去重模块,作为文件存储服务器,如果没有去重功能,随着文件容量的增大,会发现文件重复的会有很多。
fastdfs天生支持去重的是fastdht。
FastDHT 是一个基于键值对的高效分布式 hash 系统, 可以存储文件名和 file_id的映射表、 session
数据、用户相关数据等等,底层采用 Berkeley DB 做数据库来持久存储数据(也可以使用 SSDB),数
据同步方式是使用自己的 binlog 复制方式
FastDHT 集群由一个或者多个组 group 组成,每个组可以有一台或者多台组成,同组服务器上
存储的数据是相同的,数据同步只在同组的服务器之间进行;组内各个服务是对等的,对数据进行
存取时,可以根据 key 的 hash 值来决定使用哪台机器(具体参考
https://github.com/happyfish100/fastdht),数据同步采用推(Push)的方式,由源服务器主动
将数据同步到本组的其他服务器
可以独立部署 FastDHT 集群,也可以整合到 storage server 上面
先安装 berkeley-db
网上教程一大堆
我安装还是很简单的,但以前折腾了一天,如果按网上教程的版本来安装,不会出问题,就是害怕版本不匹配,总会发生莫名奇妙的问题。
从https://github.com/happyfish100/下载最新的libfastcomm,fastdht,先编译安装libfastcomm,再安装fastdht。
安装很简单,下面是配置文件
先配置fdht_servers.conf
group_count = 1
group0 = 192.168.127.135:11411
group0 = 192.168.127.136:11411
再配置fdhtd.conf
我按最简单配置,就只配置了
base_path项
最后配置storage.conf,这个是fastdht和fastdfs发生关系的地方。
修改并新增如下项:
check_file_duplicate=1
keep_alive=1
#include /etc/fdht/dfht_servers.conf
最后启动fdhtd服务并重启storage服务
/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf start
fdfs_storaged /etc/fdfs/storage.conf restart