fastDFS集群
安装
配置
fastDFS的配置文件默认存储目录: /etc/fdfs
client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample
tracker
bind_addr=
- 追踪器对应的主机的IP地址
- 如果不写, 会自动绑定本机IP地址
- 如果阿里云, 这个地方空着就行了, 否则有可能会无法启动
port=22122
- 追踪器绑定的端口
- 只要是一个空闲的没有被占用的端口就可以
base_path=/home/yuqing/fastdfs
- 追踪器存储log日志或者一些进程文件相关的目录
- 对应的路径必须要存在
storage
group_name=group1
- 当前存储节点所属的组
- 横向扩容还是纵向扩容, 是通过该属性控制的
bind_addr=
- 存储节点的IP地址
- 如果不写, 会自动绑定本机IP地址
- 如果阿里云, 这个地方空着就行了, 否则有可能会无法启动
port=23000
- 客户端连接存储节点是时候使用的
- 只要是一个空闲的没有被占用的端口就可以
base_path=/home/yuqing/fastdfs
- 存储节点存储log日志的目录
- 这个目录必须存在
store_path_count=2
- 存储节点上, 存储文件的路径个数
- 一块硬盘对应一个存储路径就可以
store_path0=/home/yuqing/fastdfs
store_path1=/home/yuqing/fastdfs1
- 存储文件的具体目录
tracker_server=192.168.247.131:22122
- 连接的追踪器的地址
tracker_server=192.168.247.132:22122
- 追踪去集群的声明方式
client
base_path=/home/yuqing/fastdfs
- 客户端写log日志的目录
tracker_server=192.168.0.197:22122
-客户端要连接的追踪器的地址
tracker
# 启动
$ fdfs_trackerd /etc/fdfs/tracker.conf
# 停止
$ fdfs_trackerd /etc/fdfs/tracker.conf stop
# 重启
$ fdfs_trackerd /etc/fdfs/tracker.conf restart
storage
# 启动
$ fdfs_storaged /etc/fdfs/storage.conf
# 停止
$ fdfs_storaged /etc/fdfs/storage.conf stop
# 重启
$ fdfs_storaged /etc/fdfs/storage.conf restart
client
# 上传
$ fdfs_upload_file /etc/fdfs/client.conf 要上传的文件
# 下载
$ fdfs_download_file /etc/fdfs/client.conf FileID
$ fdfs_upload_file /etc/fdfs/client.conf a.yaml
group1/M00/00/00/wKj3g1v0zTuAW1zaAAAUrymD-Z449.yaml
- group1 -> 文件上传到了哪个组
- M00 -> store_path0
- M01 -> store_path1
能干什么
优势
- 更快
- 高峰期(数以万计的并发时)nginx可以比其它web服务器更快的响应请求
- 高扩展
- 低耦合设计的模块组成,丰富的第三方模块支持
- 高可靠, 经过大批网站检验]
- www.xunlei.com
- www.sina.com.cn
- www.126.com
- www.taobao.com
- 低内存消耗
- 一般情况下,10000个非活跃的HTTP Keep-Alive连接在nginx中仅消耗 2.5M内存
- 单机支持10万以上的并发连接
- 取决于内存,10万远未封顶
- 热部署
- master和worker的分离设计,可实现7x24小时不间断服务的前提下升级nginx可执行文件
- 最自由的BSD许可协议
- BSD许可协议允许用户免费使用nginx, 修改nginx源码,然后再发布
正向代理
正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接受到代理服务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发发给客户端,完成整个请求过程。
==正向代理的典型用途就是为在防火墙内的局域网客户端提供访问Internet的途径==, 比如:
- 学校的局域网
- 单位局域网访问外部资源
正向代理作用: 帮助用户访问用户访问不了的网络, 正向代理服务器是为用户服务的.
反向代理
反向代理方式是指代理原始服务器来接受来自Internet的链接请求,然后将请求转发给内部网络上的原始服务器,并将从原始服务器上得到的结果转发给Internet上请求数据的客户端。那么顾名思义,反向代理就是位于Internet和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发送的请求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。
安装依赖的库
# openssl-1.0.1t.tar.gz
$ tar zxvf openssl-1.0.1t.tar.gz
$ cd openssl-1.0.1t
$ ./config # 生成makefile文件
$ make
$ sudo make install
# pcre-8.40.tar.bz2 -> 解析正则表达式
$ tar jxvf pcre-8.40.tar.bz2
$ cd pcre-8.40
$ ./configure
$ make
$ sudo make install
# zlib-1.2.11.tar.gz -> 压缩
$ tar zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure
$ make
$ sudo make install
nginx的安装
# nginx-1.10.1.tar.gz
$ tar zxvf nginx-1.10.1.tar.gz
$ cd nginx-1.10.1
########### 简易安装, 不指定依赖的库 #############
$ ./configure
###############################################
########### 工作环境中的安装####### #############
$ ./configure --with-openssl=openssl源码目录 --with-pcre=prcre的源码目录 --with-zlib=zlib的源码目录
###############################################
$ make
$ sudo make install
make过程中有一个错误
src/core/ngx_murmurhash.c: In function ‘ngx_murmur_hash2':
src/core/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;
~~^~~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: note: here
case 2:
^~~~
src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;
~~^~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: note: here
case 1:
^~~~
# nginx安装完毕, 默认的安装目录
/usr/local/nginx
$ cd /usr/local/nginx
$ ls
conf html logs sbin
conf -> nginx需要的一些配置文件
html -> 存储静态资源的目录: xx.html, 图片
也可以创建自己的资源目录, 在 /usr/local/nginx 下创建即可
logs -> 存储log日志的目录, 错误日志文件名: error.log
sbin -> 存储了启动nginx的可执行程序
nginx操作命令
# 进入到 /usr/local/nginx/sbin
# 启动
$ sudo ./nginx
# 关闭
$ sudo ./nginx -s stop # 进程马上终止
$ sudo ./nginx -s quit # 完成当前操作之后再终止
# 重新加载
$ sudo ./nginx -s reload # 重新加载nginx的配置文件
# 可以将当前目录下的nginx添加软连接到 /usr/local/bin 下 , 这是$PATH中的一个路径
$ sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
测试nginx是否能使用
准编写好的静态网页
将这些网页访问nginx的资源目录中
场景举例
在Nginx服务器上进行网页部署, 实现如下访问:
在/usr/local/nginx/创建新的目录, yundisk用来存储静态网页
访问地址: http://192.168.80.254/login.html
# http://192.168.80.254 -> 服务器的资源根目录
# 去资源根目录中找 login.html
# 如果想让nginx找到静态资源, 必须在配置文件中指定
# /usr/local/nginx/conf/nginx.conf
# nginx配置文件中每个location对应一个用户请求
location 请求指令
{
root 资源根目录;
index xx.html; # -> 用户访问的是目录才有用
}
# nginx处理指令的提取:
url: http://192.168.80.254/login.html
- 去掉协议: http
- 去掉IP/域名
- 去掉端口
- 去掉尾部的文件名
location /
{
root yundisk; # 资源根目录的指定
index xx.html; # 在这不生效, 可以不写
}
$ sudo nginx -s reload
访问地址: http://192.168.80.254/hello/reg.html
hello是什么?
reg.html放到哪儿?
如何添加location
http://192.168.80.254/hello/reg.html
# nginx处理指令的提取:
http://192.168.80.254/hello/reg.html
- 去掉协议: http
- 去掉IP/域名
- 去掉端口
- 去掉尾部的文件名
处理指令: /hello/
location /hello/
{
root yundisk;
}
访问地址: http://192.168.80.254/upload/ 浏览器显示upload.html
直接访问一个目录, 得到一默认网页
upload -> 资源目录中的子目录
upload.html 放到哪儿?
处理指令
指令: /upload/
location /upload/
{
root 资源根目录;
index upload.html up1.html ;
}
准备工作:
客户端 -> window
反向代理服务器 -> window
将nginx的window版解压的没有中文的目录下
需要修改对应的配置文件 -> conf/nginx.conf
http -> server
server {
listen 80;
server_name localhost;
charset utf8;
location / {
# 进行数据转发, 指定一个代理地址
# http://固定的前缀
# test.com -> 字节编的一个名字
proxy_pass http://test.com;
}
location /hello/ {
# 进行数据转发, 指定一个代理地址
# http://固定的前缀
# test.com -> 字节编的一个名字
proxy_pass http://test.com;
}
}
# 转发处理
upstream test.com
{
server 192.168.247.131:80 weight=1;
server 192.168.247.135:80 weight=5;
}
}
Web服务器
在存储节点上安装Nginx, 将软件安装包拷贝到fastDFS存储节点对应的主机上
# nginx安装了fastDFs插件, 向让nginx和fastDFS存储节点进行数据通信
# 在一台主机上 同时 安装nginx 和 fastDFS{存储节点的角色}
在存储节点对应的主机上安装Nginx, 作为web服务器
# fastDFS插件源码包 -> fastdfs-nginx-module_v1.16.tar.gz
$ tar zxvf fastdfs-nginx-module_v1.16.tar.gz
$ cd fastdfs-nginx-module -> 里边有安装源码
# 进入nginx的源码安装目录
$ tree -L 1
.
├── auto
├── CHANGES
├── CHANGES.ru
├── conf
├── configure -> 需要执行的文件
├── contrib
├── html
├── LICENSE
├── Makefile
├── man
├── objs
├── README
├── src
└── zlib-1.2.11
$ ./configure --add-module=fastdfs插件的源码根目录/src
$ make
$ sudo make install
make过程中有错误
# 1. fatal error: fdfs_define.h: 没有那个文件或目录
# 2. fatal error: common_define.h: 没有那个文件或目录
# 需要修改 objs/Makefile文件
正确的头文件路径需要通过find 进行搜索
$ find / -name fdfs_define.h
安装成功, 启动Nginx, 发现没有 worker进程
$ sudo nginx
nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
# 解决方案
$ sudo find / -name libpcre.so
/usr/local/lib/libpcre.so
$ sudo vi /etc/ld.so.conf
在这个文件中加一句话: /usr/local/lib/
$ sudo ldconfig
$ ps aux|grep nginx
root 85456 0.0 0.0 32960 444 ? Ss 17:16 0:00 nginx: master process nginx
itcast 85478 0.0 0.0 21536 1060 pts/1 S+ 17:18 0:00 grep --color=auto nginx
# 发现问题, 没有worker进程
# 去看 logs/error.log
拷贝文件 mod_fdfs.conf
# 进入fastDFS插件源码安装目录
itcast@ubuntu:src$ pwd
/home/itcast/package/nginx/fastdfs-nginx-module/src
itcast@ubuntu:src$ tree
.
├── common.c
├── common.h
├── config
├── mod_fastdfs.conf -> 这就是不存在的文件
└── ngx_http_fastdfs_module.c
$ sudo cp ./mod_fastdfs.conf /etc/fdfs
修改配置文件 mod_fdfs.conf - > 参考存储节点的配置文件进行修改
base_path=/home/itcast/myfastDFS/storage
- 存储节点写log日志的目录
tracker_server=192.168.247.131:22122
- 存储节点连接追踪器的地址
storage_server_port=23000
- 存储节点绑定的端口
group_name=group1
- 当前存储节点所属的组
url_have_group_name = true
- 客户端访问fastdfs上存储的文件的地址的时候, url中是否包含组的名字
store_path_count=1
- 存储节点上存储路径的个数
store_path0=/home/itcast/myfastDFS/storage
- 具体的存储目录
拷贝http.conf
sudo cp http.conf /etc/fdfs
拷贝mime.types
sudo cp mime.types /etc/fdfs
浏览器访问
url: http://192.168.247.131/group1/M00/00/00/wKj3g1v1JaGAApvvAAvqH_kipG8822.jpg
在nginx端要处理一个指令
/group1/M00/00/00
location /group1/M00/00/00
{
}
M00 -> store_path0/data
location /group1/M00/
{
# fastDFS存储文件的目录
root /home/itcast/myfastDFS/storage/data;
ngx_fastdfs_module; # 添加完成之后就可以和fastdfs存储节点通信
}