Dubbo入门到精通学习笔记(十七):FastDFS集群的安装、FastDFS集群的配置
文章目录
- FastDFS集群的安装
- FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs)
- FastDFS 上传文件交互过程:
- FastDFS 下载文件交互过程:
- FastDFS 集群规划:
- 一、FastDFS 的安装(所有跟踪服务器和存储服务器均执行如下操作)
- 二、配置 FastDFS 跟踪器 Tracker (192.168.1.131 、192.168.1.132)
- 三、配置 FastDFS 存储 ( 192.168.1.135 、192.168.1.136 、192.168.1.137 、192.168.1.138 )
- 四、文件上传测试 ( 192.168.1.131 ) 1、修改 Tracker 服务器中的客户端配置文件:
- 六、在各存储节点(192.168.1.135、192.168.1.136、192.168.1.137、192.168.1.138)上安装 Nginx
- 七、在跟踪器节点(192.168.1.131、192.168.1.132)上安装 Nginx
- 八、使用 Keepalived + Nginx 组成的高可用负载均衡集群做两个 Tracker 节点中 Nginx 的负载均衡
- 九、FastDFS 集群在简易版支付系统中的使用
FastDFS集群的安装
FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs)
FastDFS 是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件 访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服 务,如相册网站、视频网站等等。
FastDFS 服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在 访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口, FastDFS 同时对文件的 meta data 进行管理。所谓文件的 meta data 就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的 key 为 width,value 为 1024。文件 meta data 是文件属 性列表,可以包含多个键值对。FastDFS 系统结构如下图所示:
client连接过个跟踪器,client请求跟踪器(tracker),跟踪器向存储集群(storage存储组)中根据算法选出一个组,找到这个组中的一个存储节点,返回给跟踪器,跟踪器,返回给客户端,客户端拿到存储的地址,直接向存储中的某个节点上传,上传后就会返回一个文件的id,这个文件在哪个组的哪个目录。
存储组中是相互复制的,容量(最大存储空间)是存储组中最小的那个。
同一个组中,节点越高,性能越好。
每一个组中,租组和组之间存储的内容是不一样的。
如果想扩容,通过增加组,或者替换组中的节点,使得节点增大
跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下 线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或 减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷 组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷 可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器 起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后, 系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增 加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。FastDFS 中的文件标识 分为两个部分:卷名和文件名,二者缺一不可。
FastDFS 上传文件交互过程:
- client 询问 tracker 上传到的 storage,不需要附加参数; 2. tracker 返回一台可用的 storage;
- client 直接和 storage 通讯完成文件上传。
客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端 口来实现的,Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个 Storage Server 的地址等信息返回给 client,然后 client 再通过这些信息连接到这台 Storage Server, 将要上传的文件传送到给 Storage Server 上。
FastDFS 下载文件交互过程:
- client 询问 tracker 下载文件的 storage,参数为文件标识(卷名和文件名);
- tracker 返回一台可用的 storage;
- client 直接和 storage 通讯完成文件下载。
FastDFS 集群规划:
跟踪服务器 1:192.168.1.131 edu-dfs-tracker-1
跟踪服务器 2:192.168.1.132 edu-dfs-tracker-2
存储服务器 1:192.168.1.135 edu-dfs-storage-group1-1
存储服务器 2:192.168.1.136 edu-dfs-storage-group1-2
存储服务器 3:192.168.1.137 edu-dfs-storage-group2-1
存储服务器 4:192.168.1.138 edu-dfs-storage-group2-2
存储器1 2 是一组,里面的内容是一样的
存储一3 4 十一组,里面的内容是一样的
环境:CentOS 6.6
用户:root
数据目录:/fastdfs (注:数据目录按你的数据盘挂载路径而定)
安装包(随视频压缩包提供):
FastDFS v5.05
libfastcommon-master.zip(是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库)
fastdfs-nginx-module_v1.16.tar.gz
nginx-1.6.2.tar.gz
fastdfs_client_java._v1.25.tar.gz
源码地址:https://github.com/happyfish100/
下载地址:http://sourceforge.net/projects/fastdfs/files/
官方论坛:http://bbs.chinaunix.net/forum-240-1.html
两个tracker达到负载均衡
一、FastDFS 的安装(所有跟踪服务器和存储服务器均执行如下操作)
1、编译和安装所需的依赖包:
# yum install make cmake gcc gcc-c++
2、安装 libfastcommon (https://github.com/happyfish100/libfastcommon) (1)上传或下载 libfastcommon-master.zip 到/usr/local/src 目录,解压
# cd /usr/local/src/
# unzip libfastcommon-master.zip
# cd libfastcommon-master
(3) 编译、安装
# ./make.sh
# ./make.sh install libfastcommon
默认安装到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
(4)因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接.
# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
3、安装 FastDFS (https://github.com/happyfish100/fastdfs/releases)
(1)上传或下载 FastDFS 源码包(FastDFS_v5.05.tar.gz)到 /usr/local/src 目录,解压
# cd /usr/local/src/
# tar -zxvf FastDFS_v5.05.tar.gz
# cd FastDFS
(3)编译、安装(编译前要确保已经成功安装了 libfastcommon)
# ./make.sh
# ./make.sh install
采用默认安装的方式安装,安装后的相应文件与目录: A、服务脚本在:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
B、配置文件在(样例配置文件):
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
C、命令工具在/usr/bin/目录下的:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh
(4)因为 FastDFS 服务脚本设置的 bin 目录是/usr/local/bin,但实际命令安装在/usr/bin,可以进入 /user/bin 目录使用以下命令查看 fdfs 的相关命令:
# cd /usr/bin/
# ls | grep fdfs
因此需要修改 FastDFS 服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged 和/etc/init.d/fdfs_tracker 两个脚本中的/usr/local/bin 修改成/usr/bin:
//修改前两个配置文件即trackerd
# vi /etc/init.d/fdfs_trackerd
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
//修改后面四个的配置文件即storaged
# vi /etc/init.d/fdfs_storaged
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
注意:以上操作无论是配置 tracker 还是配置 storage 都是必须的,而 tracker 和 storage 的区别主要是 在安装完 fastdfs 之后的配置过程中。
二、配置 FastDFS 跟踪器 Tracker (192.168.1.131 、192.168.1.132)
1、 复制 FastDFS 跟踪器样例配置文件,并重命名:
# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
2、 编辑跟踪器配置文件:
# vi /etc/fdfs/tracker.conf
修改的内容如下:
disabled=false #启用配置文件
port=22122 #tracker的端口号,一般采用22122这个默认端口
base_path=/fastdfs/tracker #tracker的数据文件和日志记录
(其它参数保留默认配置,具体配置解释请参考官方文档说明:http://bbs.chinaunix.net/thread-
1941456-1-1.html )
3、 创建基础数据目录(参考基础目录 base_path 配置):
# mkdir -p /fastdfs/tracker
4、 防火墙中打开跟踪器端口(默认为 22122): # vi /etc/sysconfig/iptables 添加如下端口行:
## FastDFS Tracker Port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重启防火墙:
# service iptables restart
5、 启动 Tracker:
# /etc/init.d/fdfs_trackerd start
(初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录)可以通过以下两个方法查看 tracker 是否启动成功:
(1)查看 22122 端口监听情况:netstat -unltp|grep fdfs
(1)查看 22122 端口监听情况:netstat -unltp|grep fdfs
6、 关闭 Tracker:
# /etc/init.d/fdfs_trackerd stop
7、 设置 FastDFS 跟踪器开机启动:
# vi /etc/rc.d/rc.local
添加以下内容:
## FastDFS Tracker /etc/init.d/fdfs_trackerd start
三、配置 FastDFS 存储 ( 192.168.1.135 、192.168.1.136 、192.168.1.137 、192.168.1.138 )
1、 复制 FastDFS 存储器样例配置文件,并重命名:
# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
2、 编辑存储器样例配置文件(以 group1 中的 storage 节点的 storage.conf 为例):
# vi /etc/fdfs/storage.conf
修改的内容如下:
disabled=false #启用配置文件
group_name=group1 #组名(第一组为 group1,第二组为 group2)
port=23000 #storage 的端口号,同一个组的 storage 端口号必须相同
base_path=/fastdfs/storage #设置 storage 的日志目录
store_path0=/fastdfs/storage #存储路径
store_path_count=1 #存储路径个数,需要和 store_path 个数匹配
tracker_server=192.168.1.131:22122 #tracker 服务器的 IP 地址和端口
tracker_server=192.168.1.132:22122 #多个 tracker 直接添加多条配置
http.server_port=8888 #设置http端口号
(其它参数保留默认配置,具体配置解释请参考官方文档说明: http://bbs.chinaunix.net/thread-1941456-1-1.html )
3、 创建基础数据目录(参考基础目录 base_path 配置):
# mkdir -p /fastdfs/storage
4、 防火墙中打开存储器端口(默认为 23000): # vi /etc/sysconfig/iptables 添加如下端口行:
## FastDFS Storage Port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重启防火墙:
# service iptables restart
5、 启动 Storage:
# /etc/init.d/fdfs_storaged start
(初次成功启动,会在/fastdfs/storage 目录下创建数据目录 data 和日志目录 logs)
各节点启动动,使用 tail -f /fastdfs/storage/logs/storaged.log 命令监听存储节点日志,可以 看到存储节点链接到跟踪器,并提示哪一个为 leader 跟踪器。同时也会看到同一组中的其他节点加入 进来的日志信息。
将其中的一个tracker关闭,通过上面的日志命令可以看到storaged已经将traker自动切换到了第二个。
查看 23000 端口监听情况:netstat -unltp|grep fdfs
所有 Storage 节点都启动之后,可以在任一 Storage 节点上使用如下命令查看集群信息:
# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
可以看到存储节点状态为 ACTIVE 则可
6、 关闭 Storage:
# /etc/init.d/fdfs_storaged stop
关闭之后通过上面的查看集群信息的命令会发现,被关闭的这个节点 的ip_addr后面变成了OFFLINE
7、 设置 FastDFS 存储器开机启动:
# vi /etc/rc.d/rc.local
添加:
## FastDFS Storage /etc/init.d/fdfs_storaged start
四、文件上传测试 ( 192.168.1.131 ) 1、修改 Tracker 服务器中的客户端配置文件:
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
# vi /etc/fdfs/client.conf
base_path=/fastdfs/tracker
tracker_server=192.168.1.131:22122
tracker_server=192.168.1.132:22122
2、执行如下文件上传命令:
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf
/usr/local/src/FastDFS_v5.05.tar.gz
返回 ID 号:
group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
上传到了group1里面,m00是需要软连接映射,理论上m00是data目录,后面的00 00 目录
进入fastdfs/storaged/data/00/00目录,发现文件已经上传进去了
多次上传,发现有时会上传到group1有时会上传到group2,并且,在grouop1中的节点一上传,节点二也会迅速的复制。
group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
(能返回以上文件 ID,说明文件上传成功)
六、在各存储节点(192.168.1.135、192.168.1.136、192.168.1.137、192.168.1.138)上安装 Nginx
1、fastdfs-nginx-module 作用说明
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入 文件复制,有同步延迟的问题。假设 Tracker 服务器将文件上传到了 192.168.1.135,上传成功后文件 ID 已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.1.136,在文件还 没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.1.136 上取文件,就会出现文件无法访问的 错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的 文件无法访问错误。(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)
2、上传 fastdfs-nginx-module_v1.16.tar.gz 到/usr/local/src,解压
# cd /usr/local/src/
# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
3、修改 fastdfs-nginx-module 的 config 配置文件
# vi /usr/local/src/fastdfs-nginx-module/src/config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改为:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
(注意:这个路径修改是很重要的,不然在 nginx 编译的时候会报错的)
4、上传当前的稳定版本 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目录
5、安装编译 Nginx 所需的依赖包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
6、编译安装 Nginx(添加 fastdfs-nginx-module 模块)
# cd /usr/local/src/
# tar -zxvf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
# make && make install
7、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改
# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
(1)第一组 Storage 的 mod_fastdfs.conf 配置如下:
connect_timeout=10
base_path=/tmp //缓存路径
tracker_server=192.168.1.131:22122
tracker_server=192.168.1.132:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/fastdfs/storage
group_count = 2 //一共几个组
//注意下面两个是两个组的信息,如果不加的话是找不到两个组的相互之间的信息的
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage
(2)第一组 Storage 的 mod_fastdfs.conf 配置与第一组配置只有 group_name 不同:
group_name=group2
8、复制 FastDFS 的部分配置文件到/etc/fdfs 目录
# cd /usr/local/src/FastDFS/conf
# cp http.conf mime.types /etc/fdfs/
9、在/fastdfs/storage 文件存储目录下创建软连接,将其链接到实际存放数据的目录
# ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00
10、配置 Nginx,简洁版 nginx 配置样例:
这个配置是所有的storaged都已样的,四个,不分组1组2
# vi /usr/local/nginx/conf/nginx.conf user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group([0-9])/M00 {
#alias /fastdfs/storage/data;
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; }
} }
上面的配置中
listen 8888;
server_name localhost;
location ~/group([0-9])/M00 { //统配组0-9
#alias /fastdfs/storage/data;
ngx_fastdfs_module; 执行上面配置的nginx模块
}
注意、说明:
A、8888 端口值是要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应,
因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。
B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。
11、防火墙中打开 Nginx 的 8888 端口 # vi /etc/sysconfig/iptables 添加:
## Nginx Port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
重启防火墙:
# service iptables restart
12、启动 Nginx
# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=xxx
(重启 Nginx 的命令为:/usr/local/nginx/sbin/nginx -s reload) 设置 Nginx 开机启动
# vi /etc/rc.local
加入:
/usr/local/nginx/sbin/nginx
13、通过浏览器访问测试时上传的文件
http://192.168.1.135:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.137:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
七、在跟踪器节点(192.168.1.131、192.168.1.132)上安装 Nginx
1、在 tracker 上安装的 nginx 主要为了提供 http 访问的反向代理、负载均衡以及缓存服务。
2、安装编译 Nginx 所需的依赖包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel
openssl openssl-devel
3、上传 ngx_cache_purge-2.3.tar.gz 到/usr/local/src,解压
# cd /usr/local/src/
# tar -zxvf ngx_cache_purge-2.3.tar.gz
4、上传当前的稳定版本 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目录
5、编译安装 Nginx(添加 ngx_cache_purge 模块)
# cd /usr/local/src/
# tar -zxvf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.3
# make && make install
6、配置 Nginx,设置负载均衡以及缓存
# vi /usr/local/nginx/conf/nginx.conf
user root;
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;
use epoll;
}
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_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k; #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限 proxy_cache_path /fastdfs/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:200m max_size=1g inactive=30d;
proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;
#设置 group1 的服务器
upstream fdfs_group1 {
server 192.168.1.135:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.136:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#设置 group2 的服务器
upstream fdfs_group2 {
server 192.168.1.137:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.138:8888 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#设置 group 的负载均衡参数
location /group1/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache http-cache;
proxy_cache_valid 200 304 12h;
proxy_cache_key $uri$is_args$args;
proxy_pass http://fdfs_group1;
expires 30d;
}
location /group2/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache http-cache;
proxy_cache_valid 200 304 12h;
proxy_cache_key $uri$is_args$args;
proxy_pass http://fdfs_group2;
expires 30d;
}
#设置清除缓存的访问权限
location ~/purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge http-cache $1$is_args$args;
}
#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; }
} }
按以上 nginx 配置文件的要求,创建对应的缓存目录:
# mkdir -p /fastdfs/cache/nginx/proxy_cache
# mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp
7、系统防火墙打开对应的端口
# vi /etc/sysconfig/iptables
## Nginx
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT # service iptables restart
8、启动 Nginx
# /usr/local/nginx/sbin/nginx
重启 Nginx
# /usr/local/nginx/sbin/nginx -s reload
设置 Nginx 开机启动
# vi /etc/rc.local
加入:
/usr/local/nginx/sbin/nginx
9、文件访问测试
前面直接通过访问 Storage 节点中的 Nginx 的文件
http://192.168.1.135:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.137:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
现在可以通过 Tracker 中的 Nginx 来进行访问
(1)通过 Tracker1 中的 Nginx 来访问
http://192.168.1.131:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz http://192.168.1.131:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
(2)通过 Tracker2 中的 Nginx 来访问 http://192.168.1.132:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz http://192.168.1.132:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
由上面的文件访问效果可以看到,每一个 Tracker 中的 Nginx 都单独对后端的 Storage 组做了负载均衡, 但整套 FastDFS 集群如果想对外提供统一的文件访问地址,还需要对两个 Tracker 中的 Nginx 进行 HA 集 群。
八、使用 Keepalived + Nginx 组成的高可用负载均衡集群做两个 Tracker 节点中 Nginx 的负载均衡
1、《Dubbo 视频教程–高可用架构篇–第 08 节–Keepalived+Nginx 实现高可用负载均衡》
2、在 Keepalived+Nginx 实现高可用负载均衡集群中配置 Tracker 节点中 Nginx 的负载均衡反向代理
(192.168.1.51 和 192.168.1.52 中的 Nginx 执行相同的配置)
# vi /usr/local/nginx/conf/nginx.conf
user root;
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;
## FastDFS Tracker Proxy
upstream fastdfs_tracker {
server 192.168.1.131:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.132:8000 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 88;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
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 {
root html; }
## FastDFS Proxy
location /dfs {
root html;
index index.html index.htm;
proxy_pass http://fastdfs_tracker/; //这里就是代理到上面配置的 ## FastDFS Tracker Proxy
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
} }
注意上面的 ## FastDFS Tracker Proxy和 ## FastDFS Proxy
3、重启 192.168.1.51 和 192.168.1.52 中的 Nginx
# /usr/local/nginx/sbin/nginx -s reload
4、通过 Keepalived+Nginx 组成的高可用负载集群的 VIP(192.168.1.50)来访问 FastDFS 集群中的文件 http://192.168.1.50:88/dfs/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz http://192.168.1.50:88/dfs/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
#gzip on;
九、FastDFS 集群在简易版支付系统中的使用
在项目pay-common-config中的public_system.properites文件
#FastDFS分布式文件系统,文件访问URL:http://192.168.1.125:8888/
FILE_SYS_URL=http://192.168.1.125:8888/
修改为
#FastDFS分布式文件系统,文件访问URL:http://192.168.1.125:8888/
//上一小节中的第四点
FILE_SYS_URL=http://192.168.1.50:88/dfs
在项目pay-web-boss中 fastdfs==》fdfs_client.conf文件
tracker_server=192.168.0.131:22122
修改为
tracker_server=192.168.1.131:22122
tracker_server=192.168.2.132:22122
在项目pay-web-portal中 fastdfs==》fdfs_client.conf文件
tracker_server=192.168.0.131:22122
修改为
tracker_server=192.168.1.131:22122
tracker_server=192.168.2.132:22122
后面两个项目中的配置文件修改的一样,因为这两个项目用到了fastDFS所以就修改了两处,具体看实际情况。
注意:千万不要使用 kill -9 命令强杀 FastDFS 进程,否则可能会导致 binlog 数据丢失。
Dubbo入门到精通学习笔记(十七):FastDFS集群的安装、FastDFS集群的配置的更多相关文章
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- Dubbo入门到精通学习笔记(十八):使用Redis3.0集群实现Tomcat集群的Session共享
文章目录 1.单节点访问http://192.168.1.61:8082/pay-web-boss/: 2.增加多一个消费者节点:192.168.1.62,以同样的方式部署pay-web-boss工程 ...
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...
- Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)
文章目录 部署(单节点) 一.前期准备 二.对部署环境进行规划 创建数据库 调整公共配置文件 应用部署前期准备 部署服务 部署 Web 应用 部署定时任务 一. 工程结构 第三方支付系统架构 pay- ...
- Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍
文章目录 架构简单介绍 消息中间件在分布式系统中的作用介绍 消息中间件的定义 消息中间件的作用 应用场景 JMS(Java Message Service) JMS消息模型 实现了JMS规范的消息中间 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移
文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...
- Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则
文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...
- Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用
文章目录 安装Hudson 使用Hudson tips:自动化部署 附录:两个脚本 安装Hudson IP:192.168.4.221 8G 内存(Hudson 多个工程在同时构建的情况下比较耗内存) ...
随机推荐
- 个人笔记 - C++相关收藏
一.文件操作 1.C++从txt文件中读取二维的数组
- Missing artifact net.sf.json-lib:json-lib:jar:2.4
Missing artifact net.sf.json-lib:json-lib:jar:2.4 出现上述这种错误就是JAR没有引入进来 这时候发现是因为JDK版本的问题,所以需要在加一句 < ...
- vi总结的几个技巧
1.用vi编辑完文件后 按两次Z可以直接保存退出2.在打开一个vi编辑时可以输入:sp /etc/passwd 同时打开另一个文件注意这里要用绝对路径
- promise基础用法
/** * Created by liyinghao on 2016/11/6. */ const fs = require('fs'); /* * 新建一个Promise对象,Promise就是一个 ...
- IO Processing
Types of IO IRP Buffer Management 首先区分一下page的内存与nonpaged的内存,内存如果用页管理,就难免面对被swap out的命运:但是如果用nonpaged ...
- apache2.2.25+tomcat7.0.47集群方案
因为公司项目在线人数的增加,随着现在硬件成本越来越低,大多数的生产环境内存大多都已经达到 16G,尤其最新的阿里云,客户的机器都是配置超高的java主机,但是Java的运行环境,内存使用有限 ,这样就 ...
- mysql 针对table的查看命令行
1 desc t_help; 2 show create table t_help; 3 show table status like 't_help';
- CentOS6.5下面OpenSSH低版本升级至7.3
升级前版本: openssl-1.0.1e-48.el6_8.1.x86_64 openssh-5.3p1-118.1.el6_8.x86_64 升级后版本: OpenSSL 1.0.2j OpenS ...
- mysql在插入数据前判断是否存在数据
记录一次mysql插入数据的操作,要先判断表中是否存在对应的值. 以往我们的操作都是先select,再insert,今天给大家分享另一种操作,一条sql语句来实现: inset into user(u ...
- shell变量的间接引用