第02章 CentOS7.x 搭建 Nginx+Keepalived+FastDFS 分布式文件系统高可用负载均衡集群

搭建 Nginx+Keepalived+FastDFS 分布式文件系统高可用负载均衡集群

文章目录

    • 1 FastDFS 概述
      • 1.1 FastDFS 介绍
      • 1.2 FastDFS 上传文件交互过程
      • 1.3 FastDFS 下载文件交互过程
    • 2 FastDFS 集群规划
      • 2.1 集群环境介绍
      • 2.2 跟踪服务器集群规划
      • 2.3 存储服务器集群规划
      • 2.4 keepalived 高可用规划
      • 2.5 FastDFS集群架构图
    • 3 FastDFS 集群安装
      • 3.1 准备集群环境
        • 3.1.1 安装依赖包
        • 3.1.2 集群时间同步
        • 3.1.3 scp 命令节点之间文件传输
        • 3.1.4 配置节点之间免密登录
          • 3.1.4.1 免密登录原理
          • 3.1.4.2 为每个节点生成ssh密钥
          • 3.1.4.3 拷贝公钥到 authorized_keys 文件中
          • 3.1.4.4 拷贝 authorized_keys 文件到其他节点
          • 3.1.4.5 验证 ssh 免密登录
      • 3.2 安装libfastcommon
        • 3.2.1 下载与解压
        • 3.2.2 编译安装
      • 3.3 安装FastDFS
        • 3.3.1 下载FastDFS源码包
        • 3.3.2 编译安装
        • 3.3.3 安装位置相关路径
          • 3.3.3.1 服务脚本位置
          • 3.3.3.2 配置文件位置
          • 3.3.3.3 命令工具位置
      • 3.4 可能出现的问题
      • 3.5 注意事项
    • 4 FastDFS 集群配置
      • 4.1 Tracker 跟踪器集群配置
        • 4.1.1 复制tracker跟踪器配置文件
        • 4.1.2 编辑跟踪器配置文件
        • 4.1.3 创建基础数据目录
        • 4.1.4 防火墙中打开跟踪器端口
        • 4.1.5 启动Tracker
        • 4.1.6 关闭Tracker
        • 4.1.7 设置FastDFS跟踪器开机启动
      • 4.2 Storage 存储器集群配置
        • 4.2.1 复制storage存储器配置文件
        • 4.2.2 编辑storage存储器配置文件
        • 4.2.3 创建基础数据目录
        • 4.2.4 防火墙中打开存储器端口
        • 4.2.5 启动Storage
        • 4.2.6 关闭Storage
        • 4.2.7 设置FastDFS存储器开机启动
        • 4.2.8 查看集群信息
      • 4.3 storage_ids.conf 配置
    • 5 命令行文件上传测试
      • 5.1 修改tracker跟踪器配置文件
      • 5.2 通过命令上传文件
    • 6 Nginx 集群安装
      • 6.1 storage 存储服务集群 nginx 安装与配置
        • 6.1.1 为什么要安装 Nginx?
          • 6.1.1 下载 fastdfs-nginx-module 插件
          • 6.1.2 解压 fastdfs-nginx-module 插件
        • 6.1.2 安装 nginx
          • 6.1.2.1 安装编译Nginx依赖包
          • 6.1.2.2 下载 nginx
          • 6.1.2.3 编译安装
        • 6.1.3 配置 fastdfs-nginx-module
          • 6.1.3.1 修改配置文件
          • 6.1.3.2 复制部分文件
          • 6.1.3.3 建立存储数据软连接
        • 6.1.4 配置 Nginx
          • 6.1.4.1 修改配置文件
          • 6.1.4.2 配置防火墙端口
        • 6.1.5 启动 Nginx
        • 6.1.6 浏览器文件访问测试
      • 6.2 tracker 跟踪服务集群 nginx 安装与配置
        • 6.2.1 为什么要安装 Nginx?
        • 6.2.2 安装 nginx
          • 6.2.2.1 安装编译Nginx依赖包
          • 6.2.2.2 下载 ngx_cache_purge 缓存插件
          • 6.2.2.2 下载 nginx
          • 6.1.2.3 编译安装
        • 6.2.3 配置 nginx
          • 6.2.3.1 修改配置文件
          • 6.2.3.2 配置防火墙端口
        • 6.2.4 启动 Nginx
        • 6.2.5 浏览器文件访问测试
      • 6.3 设置开机启动
      • 6.4 彻底卸载Nginx
    • 7 高可用负载均衡集群
      • 7.1 Nginx和Keepalived安装
      • 7.2 高可用配置
        • 7.2.1 修改 nginx 配置
        • 7.2.2 重启 nginx
      • 7.3 高可用集群测试
    • 8 参考资料
      • 7.3 高可用集群测试
    • 8 参考资料

1 FastDFS 概述

1.1 FastDFS 介绍

什么是FastDFS?

fastDFS 是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线服务,如图片网站,视频网站等。

FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。FastDFS系统结构如下图所示:

第02章 CentOS7.x 搭建 Nginx+Keepalived+FastDFS 分布式文件系统高可用负载均衡集群_第1张图片
跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

1.2 FastDFS 上传文件交互过程

第02章 CentOS7.x 搭建 Nginx+Keepalived+FastDFS 分布式文件系统高可用负载均衡集群_第2张图片

  1. client询问tracker上传到的storage,不需要附加参数;

  2. tracker返回一台可用的storage;

  3. client直接和storage通讯完成文件上传。

客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端口来实现的,Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个Storage Server 的地址等信息返回给 client,然后 client 再通过这些信息连接到这台 Storage Server,将要上传的文件传送到给 Storage Server上。

1.3 FastDFS 下载文件交互过程

第02章 CentOS7.x 搭建 Nginx+Keepalived+FastDFS 分布式文件系统高可用负载均衡集群_第3张图片

  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);

  2. tracker返回一台可用的storage;

  3. client直接和storage通讯完成文件下载。

2 FastDFS 集群规划

2.1 集群环境介绍

  • 操作系统环境:centos7.8mini2003

  • FastDFS 版本:fastdfs-6.06.tar.gz

  • Nginx 版本: nginx-1.18.0.tar.gz

  • 高可用版本:keepalived-1.4.5.tar.gz

  • 其他依赖工具安装包:

    • libfastcommon-1.0.43.tar.gz(是从FastDFS和FastDHT中提取出来的公共C函数库)
    • fastdfs-nginx-module-1.22.tar.gz
    • ngx_cache_purge-2.3.tar.gz
  • fastdfs_client_java._v1.25.tar.gz

  • root 系统管理员用户登录安装部署

FastDFS 源码地址:https://github.com/happyfish100/

FastDFS 官方论坛:http://bbs.chinaunix.net/forum-240-1.html

2.2 跟踪服务器集群规划

节点名称 IP 地址 端口 主机名 nginx端口 配置
跟踪节点1 192.168.66.10 22122 dfs-tracker1 80 2核2G20GB
跟踪节点2 192.168.66.11 22122 dfs-tracker2 80 2核2G20GB

2.3 存储服务器集群规划

节点名称 IP 地址 端口 主机名 nginx 配置
存储节点组1-1 192.168.66.12 23000 dfs-storage-group1-1 8888 4核4G1TB
存储节点组1-2 192.168.66.13 23000 dfs-storage-group1-2 8888 4核4G1TB
存储节点组2-1 192.168.66.14 23000 dfs-storage-group2-1 8888 4核4G1TB
存储节点组2-2 192.168.66.15 23000 dfs-storage-group2-2 8888 4核4G1TB

2.4 keepalived 高可用规划

节点名称 节点 IP Addr 主机名 Nginx端口 默认主从 配置
VIP 192.168.66.150 虚拟 IP
MASTER 192.168.66.8 fdfs-proxy1 80 MASTER 2核2G20GB
BACKUP 192.168.66.9 fdfs-proxy2 80 BACKUP 2核2G20GB

2.5 FastDFS集群架构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96jK6yC4-1609918421683)(assets/image-20201203141929651.png)]

3 FastDFS 集群安装

3.1 准备集群环境

3.1.1 安装依赖包

下载安装编译和安装所需的依赖包

# yum install -y make cmake gcc gcc-c++
3.1.2 集群时间同步

为避免集群时间不一致不同步导致不可预知的问题,需要同步集群时间,确保集群中的系统时间差组30秒以内。

linux系统的时间分为系统时间 和 硬件时间。 硬件时间 就是指RTC中的时间,hwclock命令就是对这个时间操作。

系统时间是系统开机时读取硬件时间作为系统的时间,此后系统时钟独立运作,在系统关机时再将系统时间写回RTC。

date命令只操作系统时间,hwclock操作硬件时钟,在date 修改时间后,最好用hwclock 同步一下,以免系统非正常关机造成时间不同步。

查看时间

# date
2020年 11月 13日 星期五 20:17:11 CST
# hwclock
2020年11月13日 星期五 20时18分15秒  -0.350529 秒

同步时间,并写入CMOS

# ntpdate ntp1.aliyun.com
13 Nov 20:19:08 ntpdate[17801]: adjust time server 120.25.115.20 offset -0.000921 sec
# date
2020年 11月 13日 星期五 20:19:33 CST
# hwclock
2020年11月13日 星期五 20时19分40秒  -0.943450 秒
3.1.3 scp 命令节点之间文件传输

使用scp命令实现远程文件拷贝。确保与其他机器网络相通,并同时都需要安装

# yum install -y openssh-clients

拷贝文件,文件传输

# scp /opt/java/jdk-8u261-linux-x64.tar.gz [email protected]:/opt/
[email protected]'s password: 

快速配置其他集群机器,减少文件的下载

3.1.4 配置节点之间免密登录

有些集群必须要配置免密登录,比如hadoop集群,Hadoop集群包含1个主节点和3个从节点,需要实现各节点之间的免密码登录。

3.1.4.1 免密登录原理

每台主机authorized_keys文件里面包含的主机(ssh密钥),该主机都能无密码登录,所以只要每台主机的authorized_keys文件里面都放入其他主机(需要无密码登录的主机)的ssh密钥就行了。

3.1.4.2 为每个节点生成ssh密钥
# ssh-keygen -t rsa

执行命令后会在~目录下生成.ssh文件夹,里面包含id_rsaid_rsa.pub两个文件。

其他节点执行同样操作。

注:使用 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 命令可避免上述交互式操作。

3.1.4.3 拷贝公钥到 authorized_keys 文件中

在主节点上将公钥拷到一个特定文件authorized_keys中。

# cd ~/.ssh/
# ll
总用量 12
-rw-------. 1 root root 1679 12月  3 18:18 id_rsa
-rw-r--r--. 1 root root  411 12月  3 18:18 id_rsa.pub
-rw-r--r--. 1 root root  875 12月  3 18:11 known_hosts
# cp id_rsa.pub authorized_keys
# ll
总用量 16
-rw-r--r--. 1 root root  411 12月  3 19:04 authorized_keys
-rw-------. 1 root root 1679 12月  3 18:18 id_rsa
-rw-r--r--. 1 root root  411 12月  3 18:18 id_rsa.pub
-rw-r--r--. 1 root root  875 12月  3 18:11 known_hosts

查看比之前多了一个文件:authorized_keys

3.1.4.4 拷贝 authorized_keys 文件到其他节点

将authorized_keys文件拷到集群中的其他节点,并将该节点下的ssh密钥id_rsa.pub加入该文件中。

使用scp命令实现远程文件拷贝,将authorized_keys文件拷贝到其他集群节点:

# scp authorized_keys [email protected]:/root/.ssh/

登录集群中的其他节点,并将公钥追加到authorized_keys文件:

# cd ~/.ssh/
# ll
总用量 12
-rw-r--r--. 1 root root  411 12月  3 19:06 authorized_keys
-rw-------. 1 root root 1679 12月  3 18:20 id_rsa
-rw-r--r--. 1 root root  411 12月  3 18:20 id_rsa.pub
# cat id_rsa.pub >> authorized_keys #使用cat追加方式

依次操作通过authorized_keys文件完成集群其他节点公钥的追加收集后,把收集完所有集群节点公钥最后的authorized_keys文件,通过scp命令远程再依次拷贝回其他节点:

# scp authorized_keys [email protected]:/root/.ssh/

以上步骤操作完成后,可以进行验证ssh免密登录了。

3.1.4.5 验证 ssh 免密登录

使用ssh 用户名@节点名或ssh ip地址命令验证免密码登录。

# ssh [email protected]
Last failed login: Thu Dec  3 18:10:14 CST 2020 from 192.168.66.10 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Dec  3 16:46:06 2020

可以看到通过ssh已经登录成功了,可以直接从一个节点进入到另一个节点主机,操作另一个主机,可以来回切换,亦可登录回之前节点的主机。

3.2 安装libfastcommon

Copyright (C) 2010 Happy Fish / YuQing

这个包是作者从开源项目FastDFS中提取的c公共函数库。这个库非常简单和稳定。函数包括:字符串,记录器,链,哈希,套接字,ini文件读取器,base64编码/解码,URL编码/解码,快速计时器,跳过列表,对象池等。详细信息请参见c头文件。

3.2.1 下载与解压

下载libfastcommon,下载地址:https://github.com/happyfish100/libfastcommon/releases

# cd /opt
# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
# tar -zxvf V1.0.43.tar.gz -C /usr/local/src/

如果下载的是zip包,解压方式

# yum install -y unzip
# unzip -n -d /usr/local/src/ libfastcommon-master.zip
# cd /usr/local/src/libfastcommon-master

如果要把文件解压到指定的目录下,需要用到-d参数。

解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数

只看一下zip压缩包中包含哪些文件,不进行解压缩-1参数

查看显示的文件列表还包含压缩比率-v参数

将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件:unzip -o test.zip -d /tmp/

3.2.2 编译安装
# cd /usr/local/src/libfastcommon-1.0.43
# ./make.sh && ./make.sh install
mkdir -p /usr/lib64
mkdir -p /usr/lib
mkdir -p /usr/include/fastcommon
install -m 755 libfastcommon.so /usr/lib64
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h common_blocked_queue.h multi_socket_client.h skiplist_set.h fc_list.h json_parser.h buffered_file_writer.h /usr/include/fastcommon
if [ ! -e /usr/lib/libfastcommon.so ]; then ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so; fi

查看安装位置,libfastcommon默认安装到了这个位置:

# cd /usr/lib64/
# ls | grep libfastcommon.so
libfastcommon.so
# ls | grep libfdfsclient.so
libfdfsclient.so

3.3 安装FastDFS

Copyright (C) 2010 Happy Fish / YuQing
3.3.1 下载FastDFS源码包

下载FastDFS,下载地址: https://github.com/happyfish100/fastdfs/releases

# cd /opt/
# wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
# tar -zxvf V6.06.tar.gz -C /usr/local/src
3.3.2 编译安装

编译安装前要确保已经成功安装了libfastcommon

# cd /usr/local/src/fastdfs-6.06
# ./make.sh && ./make.sh install

采用默认安装的方式安装

3.3.3 安装位置相关路径

安装后的相应文件与目录如下:

3.3.3.1 服务脚本位置
# ls -la /etc/init.d/fdfs*
-rwxr-xr-x. 1 root root   918 12月  4 10:58 fdfs_storaged ### 是tracker启动脚本
-rwxr-xr-x. 1 root root   920 12月  4 10:58 fdfs_trackerd ### 是storage启动脚本
3.3.3.2 配置文件位置

配置文件样例

# ll /etc/fdfs
-rw-r--r--. 1 root root  1909 12月  4 15:11 client.conf.sample
-rw-r--r--. 1 root root 10246 12月  4 15:11 storage.conf.sample
-rw-r--r--. 1 root root   620 12月  4 15:11 storage_ids.conf.sample
-rw-r--r--. 1 root root  9138 12月  4 15:11 tracker.conf.sample
3.3.3.3 命令工具位置

在/usr/bin/目录下的

# ls -la /usr/bin/fdfs*
-rwxr-xr-x. 1 root root  362240 12月  4 14:30 /usr/bin/fdfs_appender_test
-rwxr-xr-x. 1 root root  362016 12月  4 14:30 /usr/bin/fdfs_appender_test1
-rwxr-xr-x. 1 root root  348896 12月  4 14:30 /usr/bin/fdfs_append_file
-rwxr-xr-x. 1 root root  348512 12月  4 14:30 /usr/bin/fdfs_crc32
-rwxr-xr-x. 1 root root  348936 12月  4 14:30 /usr/bin/fdfs_delete_file
-rwxr-xr-x. 1 root root  349664 12月  4 14:30 /usr/bin/fdfs_download_file
-rwxr-xr-x. 1 root root  349616 12月  4 14:30 /usr/bin/fdfs_file_info
-rwxr-xr-x. 1 root root  364936 12月  4 14:30 /usr/bin/fdfs_monitor
-rwxr-xr-x. 1 root root  349160 12月  4 14:30 /usr/bin/fdfs_regenerate_filename
-rwxr-xr-x. 1 root root 1280136 12月  4 14:30 /usr/bin/fdfs_storaged
-rwxr-xr-x. 1 root root  372112 12月  4 14:30 /usr/bin/fdfs_test
-rwxr-xr-x. 1 root root  367224 12月  4 14:30 /usr/bin/fdfs_test1
-rwxr-xr-x. 1 root root  512352 12月  4 14:30 /usr/bin/fdfs_trackerd
-rwxr-xr-x. 1 root root  349856 12月  4 14:30 /usr/bin/fdfs_upload_appender
-rwxr-xr-x. 1 root root  350880 12月  4 14:30 /usr/bin/fdfs_upload_file
-rwxr-xr-x. 1 root root      1768 12月  4 10:58 restart.sh
-rwxr-xr-x. 1 root root      1680 12月  4 10:58 stop.sh

3.4 可能出现的问题

  • 问题一

    # ./make.sh: line 154: perl: command not found
    
  • 解决方案

    # yum -y install perl
    
  • 问题二

    /root/fastdfs-6.06/storage/fdfs_storaged.c:151: undefined reference to `g_exe_name'
    storage_dump.o: In function `fdfs_dump_global_vars':
    /root/fastdfs-6.06/storage/storage_dump.c:44: undefined reference to `g_exe_name'
    collect2: error: ld returned 1 exit status
    make: *** [fdfs_storaged] Error 1
    make: Nothing to be done for `all'.
    
  • 解决方案

    # ./make.sh clean
    

3.5 注意事项

所有集群中的跟踪服务器和存储服务器均执行以上安装配置操作。

注意:以上操作无论是配置tracker还是配置storage都是必须的,而tracker和storage的区别主要是在安装完fastdfs之后的配置过程中。

4 FastDFS 集群配置

4.1 Tracker 跟踪器集群配置

配置FastDFS跟踪器Tracker (192.168.66.10 、192.168.66.11)

4.1.1 复制tracker跟踪器配置文件

复制FastDFS跟踪器样例配置文件,并重命名:

# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
4.1.2 编辑跟踪器配置文件

修改的内容如下:

# vim /etc/fdfs/tracker.conf
disabled=false             #启用配置文件,默认启用
port=22122                 #tracker的端口号,一般采用22122这个默认端口
base_path=/fastdfs/tracker #tracker的数据文件和日志目录,默认/home/yuqing/fastdfs
http.server_port=8080      #http_server端口,默认8080

保存退出。其它参数保留默认配置,具体配置解释请参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

4.1.3 创建基础数据目录

与配置基础目录base_path保持一致

# mkdir -p /fastdfs/tracker
4.1.4 防火墙中打开跟踪器端口

默认为22122

# firewall-cmd --zone=public --add-port=22122/tcp --permanent 
# firewall-cmd --reload ## 重启防火墙
4.1.5 启动Tracker
# /etc/init.d/fdfs_trackerd start
Reloading systemd:                                         [  确定  ]
Starting fdfs_trackerd (via systemctl):                    [  确定  ]

初次成功启动,会在/fastdfs/tracker目录下创建data、logs两个目录。

# cd /fastdfs/tracker
# ll
总用量 0
drwxr-xr-x. 2 root root 60 12月  4 12:28 data
drwxr-xr-x. 2 root root 26 12月  4 12:28 logs

第一次启动成功后,可以使用系统命令启动、重启、停止

# systemctl start fdfs_trackerd  ### 也可以通过这个启动
# systemctl restart fdfs_trackerd
# systemctl stop fdfs_trackerd

可以通过以下两个方法查看tracker是否启动成功:

(1)查看22122端口监听情况

# yum install -y net-tools
# netstat -apn|grep fdfs
# netstat -unltp|grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      2932/fdfs_trackerd

(2)通过以下命令查看tracker的启动日志,看是否有错误

# tail -100f /fastdfs/tracker/logs/trackerd.log

(3)查看是否活动状态

# systemctl status fdfs_trackerd
● fdfs_trackerd.service - LSB: FastDFS tracker server
   Loaded: loaded (/etc/rc.d/init.d/fdfs_trackerd; bad; vendor preset: disabled)
   Active: `active (running)` since 五 2020-12-04 14:53:54 CST; 1min 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3819 ExecStop=/etc/rc.d/init.d/fdfs_trackerd stop (code=exited, status=0/SUCCESS)
  Process: 3824 ExecStart=/etc/rc.d/init.d/fdfs_trackerd start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fdfs_trackerd.service
           └─3830 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

12月 04 14:53:54 fdfs-tracker1.zhledu.com systemd[1]: Stopped LSB: FastDFS tracker server.
12月 04 14:53:54 fdfs-tracker1.zhledu.com systemd[1]: Starting LSB: FastDFS tracker server...
12月 04 14:53:54 fdfs-tracker1.zhledu.com fdfs_trackerd[3824]: Starting FastDFS tracker server:
12月 04 14:53:54 fdfs-tracker1.zhledu.com systemd[1]: Started LSB: FastDFS tracker server.
4.1.6 关闭Tracker
# /etc/init.d/fdfs_trackerd stop
# systemctl stop fdfs_trackerd  ### 也可以通过这个命令
4.1.7 设置FastDFS跟踪器开机启动

在文件结尾添加以下内容:

# vim /etc/rc.d/rc.local

### FastDFS Tracker
/etc/init.d/fdfs_trackerd start

tracker跟踪器集群中的两台都做如上配置。

4.2 Storage 存储器集群配置

配置FastDFS存储 ( 192.168.66.12 、192.168.66.13 、192.168.66.14 、192.168.66.15 )

4.2.1 复制storage存储器配置文件

复制FastDFS存储器样例配置文件,并重命名

# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
4.2.2 编辑storage存储器配置文件

以group1中的storage节点的storage.conf为例,修改的内容如下:

# vim /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.66.10:22122  #tracker服务器的IP地址和端口
tracker_server=192.168.66.11:22122  #多个tracker直接添加多条配置
http.server_port=8888               #设置http端口号

其它参数保留默认配置,具体配置解释请参考官方文档说明:

http://bbs.chinaunix.net/thread-1941456-1-1.html

4.2.3 创建基础数据目录

参考基础目录base_path配置,与配置文件保持一致

# mkdir -p /fastdfs/storage
4.2.4 防火墙中打开存储器端口

默认为23000

# firewall-cmd --zone=public --add-port=23000/tcp --permanent 
# firewall-cmd --reload ## 重启防火墙
4.2.5 启动Storage
# /etc/init.d/fdfs_storaged start
Reloading systemd:                                         [  确定  ]
Starting fdfs_storaged (via systemctl):                    [  确定  ]

初次成功启动,会在/fastdfs/storage目录下创建数据目录data 和日志目录logs。各节点启动动,使用命令监听存储节点日志:

# tail -f /fastdfs/storage/logs/storaged.log 

可以看到存储节点链接到跟踪器,并提示哪一个为leader跟踪器。同时也会看到同一组中的其他节点加入进来的日志信息。

第一次启动成功后,可以使用系统命令启动、重启、停止

# systemctl start fdfs_storaged  ### 也可以通过这个启动
# systemctl restart fdfs_storaged
# systemctl stop fdfs_storaged

可以通过以下两个方法查看tracker是否启动成功:

查看23000端口监听情况

# netstat -unltp|grep fdfs

查看storage存储服务启动状态

# systemctl status fdfs_storaged
4.2.6 关闭Storage
# /etc/init.d/fdfs_storaged stop
# systemctl stop fdfs_storaged
4.2.7 设置FastDFS存储器开机启动
# vim /etc/rc.d/rc.local

## FastDFS Storage
/etc/init.d/fdfs_storaged start

依次完成集群中的其他storage存储节点组的配置。完成其他集群存储组节点的配置,在配置时注意组的名称的区别,目前分了两个组一个group1和group2。

4.2.8 查看集群信息

所有Storage节点都启动之后,可以在任一Storage节点上使用如下命令查看集群信息:

# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

通过monitor查看storage是否绑定成功,可以看到存储节点状态为ACTIVE则可。

4.3 storage_ids.conf 配置

暂时不需要配置

5 命令行文件上传测试

以上安装和配置都完成后,可以在一台tracker1跟踪服务主机上测试文件上传:192.168.66.10

5.1 修改tracker跟踪器配置文件

修改Tracker服务器中的客户端配置文件:

# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
# vim /etc/fdfs/client.conf

base_path=/fastdfs/tracker
tracker_server=192.168.66.10:22122
tracker_server=192.168.66.11:22122

5.2 通过命令上传文件

执行如下文件上传命令:

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/V6.06.tar.gz 

返回ID号:

group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

能返回以上文件ID,说明文件上传成功

6 Nginx 集群安装

6.1 storage 存储服务集群 nginx 安装与配置

在各个 storage 存储节点上安装Nginx:

192.168.66.12、192.168.66.13、192.168.66.14、192.168.66.15

6.1.1 为什么要安装 Nginx?

为什么需要用Nginx访问?需要使用nginx访问FastDFS。

fastdfs-nginx-module作用说明

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。

假设Tracker服务器将文件上传到了192.168.66.12,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.66.13,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.66.13上取文件,就会出现文件无法访问的错误。

而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

6.1.1 下载 fastdfs-nginx-module 插件

下载地址:https://github.com/happyfish100/fastdfs-nginx-module/releases

# wget https://codeload.github.com/happyfish100/fastdfs-nginx-module/tar.gz/V1.22
# tar -zxvf /opt/fastdfs-nginx-module-1.22.tar.gz -C /usr/local/src
6.1.2 解压 fastdfs-nginx-module 插件

解压后的fastdfs-nginx-module在nginx安装时使用,解压目录路径:

/usr/local/src/fastdfs-nginx-module-1.22/src

记住解压路径,后面需要用到。

6.1.2 安装 nginx
6.1.2.1 安装编译Nginx依赖包
# yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
6.1.2.2 下载 nginx

下载地址:https://nginx.org/en/download.html

# cd /opt
# wget https://nginx.org/download/nginx-1.18.0.tar.gz
6.1.2.3 编译安装
# tar -zxvf nginx-1.18.0.tar.gz -C /usr/local/src/
# cd /usr/local/src/nginx-1.18.0
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module-1.22/src
# make && make install

注:- -add-module的值为fastdfs-nginx-module的解压目录路径

6.1.3 配置 fastdfs-nginx-module
6.1.3.1 修改配置文件

修改 fastdfs-nginx-module 配置文件。复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录,并修改

# cp /usr/local/src/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

(1)第一组Storage的mod_fastdfs.conf配置如下:

# vim /etc/fdfs/mod_fastdfs.conf

connect_timeout=10  
base_path=/tmp
tracker_server=192.168.66.10:22122
tracker_server=192.168.66.11: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

完成第一组storage存储集群中的两台服务配置,配置相同。

(2)第二组Storage的mod_fastdfs.conf配置与第一组配置只有group_name不同:

group_name=group2

完成第二组storage存储集群的两台服务配置,配置相同。

6.1.3.2 复制部分文件

复制FastDFS部分配置文件到/etc/fdfs目录

# cd /usr/local/src/fastdfs-6.06/conf
# cp http.conf mime.types /etc/fdfs/
6.1.3.3 建立存储数据软连接

在/fastdfs/storage文件存储目录下创建软连接,将其链接到实际存放数据的目录

# ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00
6.1.4 配置 Nginx
6.1.4.1 修改配置文件

去掉 user nobody 注释,并将其修改为 user root,修改监听端口为:8888

# vim /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;

  #gzip on;

  server {
    listen    8888;
    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;
    }
  }
}

重点配置说明:

  • 1、8888端口值是要与/etc/fdfs/storage.conf中的 http.server_port=8888 相对应,因为http.server_port默认为8888,如果想改成80,则要对应修改过来。

  • 2、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx,对应的Nginx配置为:

    location ~/group([0-9])/M00 {

    ​ ngx_fastdfs_module;

    }

  • 3、测试检查下载时如发现老报404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。

6.1.4.2 配置防火墙端口
# firewall-cmd --zone=public --add-port=8888/tcp --permanent 
# firewall-cmd --reload ## 重启防火墙
6.1.5 启动 Nginx

启动storage存储服务组集群节点中的nginx:

# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=5944

测试Nginx是否安装成功

# /usr/local/nginx/sbin/nginx -t
ngx_http_fastdfs_set pid=5948
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启Nginx的命令为:

# /usr/local/nginx/sbin/nginx -s reload

设置Nginx开机启动,加入:

# vim /etc/rc.local
## nginx fastdfs storage
/usr/local/nginx/sbin/nginx
6.1.6 浏览器文件访问测试

使用浏览器测试下载之前通过命令工具上传的文件

http://192.168.66.12:8888/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.14:8888/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.14:8888/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

如果下载不了,检查下面这个配置参数问题是否修改为 true:

# vim /etc/fdfs/mod_fastdfs.conf
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true

参数修改完后,记得重启一下nginx。

6.2 tracker 跟踪服务集群 nginx 安装与配置

**在跟踪器集群节点上安装Nginx:**192.168.66.10、192.168.66.11

6.2.1 为什么要安装 Nginx?

在tracker跟踪服务集群上安装的nginx,主要为fastdfs文件系统服务提供http访问的反向代理、负载均衡以及缓存服务。

6.2.2 安装 nginx
6.2.2.1 安装编译Nginx依赖包
# yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
6.2.2.2 下载 ngx_cache_purge 缓存插件

下载地址:https://github.com/FRiCKLE/ngx_cache_purge/releases

# cd /opt
# wget https://codeload.github.com/FRiCKLE/ngx_cache_purge/tar.gz/2.3
# tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/

解压路径如下:

# cd /usr/local/src/ngx_cache_purge-2.3

记住解压路径,后面编译安装nginx要用到。

6.2.2.2 下载 nginx

下载地址:https://nginx.org/en/download.html

# cd /opt
# wget https://nginx.org/download/nginx-1.18.0.tar.gz
6.1.2.3 编译安装
# tar -zxvf nginx-1.18.0.tar.gz -C /usr/local/src/
# cd /usr/local/src/nginx-1.18.0
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.3
# make && make install

注:- -add-module 的值为 ngx_cache_purge 的解压目录路径

6.2.3 配置 nginx
6.2.3.1 修改配置文件

配置Nginx,设置负载均衡以及缓存。去掉 user nobody 注释并,并将 user nobody 修改为:user root,修改端口为:8888

# vim /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;

  #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.66.12:8888 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.66.13:8888 weight=1 max_fails=2 fail_timeout=30s;
  }
    
  #配置存储服务集群 group2 负载均衡服务器
  upstream fdfs_group2 {
  	server 192.168.66.14:8888 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.66.15:8888 weight=1 max_fails=2 fail_timeout=30s;
  }
 
    
  server {
    listen    80;
    server_name localhost;

    #charset koi8-r;        
    #access_log logs/host.access.log main;
	
    #配置存储服务集群 group1 的负载均衡参数
    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;
    }
    #配置存储服务集群 group2 的负载均衡参数
    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.66.0/24;
        deny all;
        proxy_cache_purge http-cache $1$is_args$args;
    }    
        
    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;
    }
  }
}

重点配置说明:

#配置缓存

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.66.12:8888 weight=1 max_fails=2 fail_timeout=30s;

​ server 192.168.66.13: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 80;

#配置存储集群组 group1 的负载均衡参数

​ 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 u r i uri uriis_args$args;

​ proxy_pass http://fdfs_group1;

​ expires 30d;

​ }

#配置存储集群组 group2 的负载均衡参数

​ 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 u r i uri uriis_args$args;

​ proxy_pass http://fdfs_group2;

​ expires 30d;

​ }

​ #设置清除缓存的访问权限

​ location ~/purge(/.*) {

​ allow 127.0.0.1;

​ allow 192.168.66.0/24;

​ deny all;

​ proxy_cache_purge http-cache 1 1 1is_args$args;

​ }

按 nginx 配置需要创建相应的缓存目录:

# mkdir -p /fastdfs/cache/nginx/proxy_cache
# mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp

两个tracker跟踪服务集群都做相同配置修改。

6.2.3.2 配置防火墙端口
# firewall-cmd --zone=public --add-port=80/tcp --permanent 
# firewall-cmd --reload ## 重启防火墙

开启两台tracker跟踪服务集群端口

6.2.4 启动 Nginx
# /usr/local/nginx/sbin/nginx

测试Nginx是否安装成功

# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启Nginx的命令为

# /usr/local/nginx/sbin/nginx -s reload

设置Nginx开机启动

# vi /etc/rc.local
/usr/local/nginx/sbin/nginx
6.2.5 浏览器文件访问测试

前面直接通过访问Storage节点中的Nginx的文件

http://192.168.66.12:8888/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.14:8888/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.14:8888/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

现在可以通过Tracker中的Nginx来进行访问

(1)通过Tracker1中的Nginx来访问

http://192.168.66.10/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.10/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.10/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

(2)通过Tracker2中的Nginx来访问

http://192.168.66.11/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.11/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.11/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

由上面的文件访问效果可以看到,每一个Tracker中的Nginx都单独对后端的Storage组做了负载均衡,但整套FastDFS集群如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群。

6.3 设置开机启动

另一种设置开机自启动的方式,创建系统服务。

1、在系统服务目录里创建nginx.service文件

vim /usr/lib/systemd/system/nginx.service

2、写入内容如下:

[Unit]
Description=nginx
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

Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

设置开机自启动

# systemctl enable nginx.service

查看nginx状态

# systemctl status nginx.service

很奇怪,明明启动成功了,为什么显示Active: inactive (dead)?

ps aux查看系统有哪些进程正在运行。杀死nginx重启nginx,kill来杀死某一个进程killall杀死一类进程pkill踢出某个终端

# pkill -9 nginx
# ps aux | grep nginx
# systemctl restart nginx #重启
# systemctl start nginx 启动
# systemctl stop nginx 停止

再次查看状态,变成了active,搞定。

6.4 彻底卸载Nginx

# service nginx stop
# chkconfig nginx off
# rm -rf /usr/sbin/nginx
# rm -rf /etc/nginx
# rm -rf /etc/init.d/nginx
# rm -rf /usr/local/nginx
# rm -rf /usr/local/src/nginx-1.18.0
# yum remove nginx

如果要重新安装,可以安装上面步骤卸载nginx。

7 高可用负载均衡集群

使用Keepalived + Nginx组成的高可用负载均衡集群做两个Tracker节点中Nginx的负载均衡

在Keepalived+Nginx实现高可用负载均衡集群中配置Tracker节点中Nginx的负载均衡反向代理

7.1 Nginx和Keepalived安装

相关安装和配置,请参考第01章 CentOS7.x 搭建 Keepalived+Nginx 高可用Web负载均衡。就是两台高可用主机192.168.66.8192.168.66.9中的Nginx执行相同的配置。

7.2 高可用配置

7.2.1 修改 nginx 配置

在两台高可用Nginx配置中增加对两台FastDFS跟踪服务集群的负载均衡反向代理配置,如下:

# vim /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;
	#gzip  on;

    ## FastDFS Tracker Proxy
    upstream fastdfs_tracker {
         server 192.168.66.10 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.66.11 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       80;
        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/;
            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

upstream fastdfs_tracker {

​ server 192.168.66.10 weight=1 max_fails=2 fail_timeout=30s;

​ server 192.168.66.11 weight=1 max_fails=2 fail_timeout=30s;

}

​ ## FastDFS Proxy

​ location /dfs {

​ root html;

​ index index.html index.htm;

​ proxy_pass http://fastdfs_tracker/;

​ 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;

​ }

7.2.2 重启 nginx

完成两台高可用nginx以上配置修改后,需要重启 nginx,因当时我们配置了nginx状态检查,如果挂了会通过脚本自动重启,因此在这里我们只需要让nginx挂了就行,如下:

# killall nginx

执行一下命令后,nginx会自动重启

7.3 高可用集群测试

使用VIP访问FastDFS集群,通过Keepalived+Nginx组成的高可用负载集群的VIP(192.168.66.150)来访问FastDFS集群中的文件。

http://192.168.66.150/dfs/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.150/dfs/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.150/dfs/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

注意:千万不要使用kill -9命令强杀FastDFS进程,否则可能会导致binlog数据丢失。

8 参考资料

运维之路-CentOS7安装FastDFS:https://blog.csdn.net/wifi74262580/article/details/105251924/

arded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
}
}


> **重点配置说明:**
>
>   \## FastDFS Tracker Proxy
>
>   upstream fastdfs_tracker {
>
> ​     server 192.168.66.10 weight=1 max_fails=2 fail_timeout=30s;
>
> ​     server 192.168.66.11 weight=1 max_fails=2 fail_timeout=30s;
>
>   }
>
> ​    \## FastDFS Proxy
>
> ​    location /dfs {
>
> ​      root  html;
>
> ​      index index.html index.htm;
>
> ​      proxy_pass http://fastdfs_tracker/;
>
> ​      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;
>
> ​    }

#### 7.2.2 重启 nginx

完成两台高可用nginx以上配置修改后,需要重启 nginx,因当时我们配置了nginx状态检查,如果挂了会通过脚本自动重启,因此在这里我们只需要让nginx挂了就行,如下:

```shell
# killall nginx

执行一下命令后,nginx会自动重启

7.3 高可用集群测试

使用VIP访问FastDFS集群,通过Keepalived+Nginx组成的高可用负载集群的VIP(192.168.66.150)来访问FastDFS集群中的文件。

http://192.168.66.150/dfs/group1/M00/00/00/wKhCDF_J7qeAO4xNAAxZcPR00vw.tar.gz
http://192.168.66.150/dfs/group2/M00/00/00/wKhCDl_J7OaAaJvwAAxZcPR00vw.tar.gz
http://192.168.66.150/dfs/group2/M00/00/00/wKhCD1_KIJ6AKziFAAxZcPR00vw.tar.gz

注意:千万不要使用kill -9命令强杀FastDFS进程,否则可能会导致binlog数据丢失。

8 参考资料

运维之路-CentOS7安装FastDFS:https://blog.csdn.net/wifi74262580/article/details/105251924/

你可能感兴趣的:(技术架构笔记,高可用技术架构,基于CentOS7.x技术实践,分布式,java,负载均衡,经验分享,nginx)