• 分布式存储---FastDFS+GlusterFS


    一. 存储概念


    1.块存储的多种实现:

    块存储: 就好比硬盘一样, 直接挂在到主机,一般用于主机的直接存储空间和数据库应用的存储

    1.磁盘+LVS: 单机硬盘纯存储
    2.DAS(DELL MD系列): 直连式存储
    3.SAN 存储: 通过FC连接

    2.文件存储的多种实现:

    文件存储:与较底层的块存储不同, 上升到了应用层, 一般指的就是 NAS ,一套网络储存设备,。

    1.NAS(nfs): 通过TCP/IP连接,延长较大,性能有限,单点故障

    3.对象存储的解释:

    对象存储:具备块存储的高速以及文件存储的共享等特性, 较为智能, 有自己的CPU, 内存, 网络和磁盘, 比块存储和文件存储更上层, 云服务商一般提供用户文件上传下载读取的Rest API, 方便应用集成此类服务。

    二. Glusterfs相关


    参考资料:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/

    1.glusterfs优点:

    适合存储比较大的文件,比如openstack的镜像或者视频,存储小文件性能堪忧。

    2.安装glusterfs:

    安装环境: 172.16.1.211 , 172.16.1.213

    在两台机器分别安装,注意命令顺。

    # yum install centos-release-gluster
    # yum install glusterfs-server
    # /etc/init.d/glusterd start

    3.建立信任关系:

    只要在一台上面建立

    [root@SH_T_ansiblecli_01 ~]# gluster peer probe 172.16.1.213   #后面更另外一台的IP
    [root@SH_T_ansiblecli_01 ~]# gluster peer status

    4.创建名称为“test-volume ”的分布式卷:

    这里写图片描述

    172.16.1.211上创建目录

    # mkdir /data/exp1 -p

    172.16.1.213上创建目录

    # mkdir /data/exp2 -p

    随意机器输入:

    # gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2
    ps:一般会提示目录不是在独立硬盘上,无法创建,后面加上force就可以了
    # gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2 force
    
    # gluster volume info   查看逻辑卷信息
    # gluster volume start test-volume  #启动逻辑卷

    5.创建名称为“rd1-volume ”的复制卷:

    这里写图片描述
    172.16.1.211上创建目录

    # mkdir /data/rd1-exp3 -p

    172.16.1.213上创建目录

    # mkdir /data/rd1-exp4 -p

    随意机器输入:

    # gluster volume create rd1-volume replica 2 transport tcp 172.16.1.211:/data/rd1-exp3 172.16.1.213:/data/rd1-exp4 force
     cp-volume: 卷名称
     replica 2: 复制卷,复制2份,不加参数默认是分布式卷。
     transport tcp: 通过tcp传输
    
    # gluster volume info cp-volume  #查看逻辑卷信息
    # gluster volume start cp-volume  #启动逻辑卷

    6.创建名称为“rd0-volume ”的条带卷:

    这里写图片描述
    172.16.1.211上创建目录

    # mkdir /data/rd0-exp1 -p

    172.16.1.213上创建目录

    # mkdir /data/rd0-exp2 -p

    随意机器输入:

    # gluster volume create rd0-volume stripe 2 transport tcp 172.16.1.211:/data/rd0-exp1 172.16.1.213:/data/rd0-exp2 force
     rd0-volume: 卷名称
     stripe 2: 条带卷,服务器2台,不加参数默认是分布式卷。
     transport tcp: 通过tcp传输
    
    # gluster volume info rd0-volume  #查看逻辑卷信息
    # gluster volume start rd0-volume  #启动逻辑卷

    7.生产推荐使用,分布式复制卷:

    这里写图片描述
    需要4台服务器:server1,server2,server3,server4

    # gluster volume create test1-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
    ps: 与创建复制卷命令相同,但复制2份后面跟4台服务器

    8.挂载glusterfs的逻辑卷:

    # yum install glusterfs-client     #安装gluster客户端
    # mkdir /mnt/g1 /mnt/g2 /mnt/g3     #创建3个挂载点
    # mount.glusterfs 172.16.1.211:/test-volume /mnt/g1   #挂载分布式卷到g1目录
    # mount.glusterfs 172.16.1.211:/rd1-volume /mnt/g2
    # mount.glusterfs 172.16.1.211:/rd0-volume /mnt/g3

    9.设置磁盘配额:

    # gluster volume quota test-volume enable    #为test-volume卷启动配额
    # gluster volume quota test-volume limit-usage /data 10GB  #设置data目录为10g的配额
    # gluster volume quota test-volume list     #查看test-volume卷配额情况

    10.对逻辑卷进行扩展:

    # mkdir /data/exp9   #模拟创建一个新磁盘
    # gluster volume add-brick test-volume 172.16.1.211:/data/exp9 force    
       #将新创建的"/data/exp9"磁盘加入"test-volume"的逻辑卷中
    # gluster volume rebalance test-volume start    #重新均衡逻辑卷内容,不运行此命令新加入的磁盘就不会写入内容
    
    # gluster volume info test-volume  #查看是否加入
    # gluster volume status test-volume  #查看磁盘状态

    11.对逻辑卷进行收缩:

    这个操作要小心,可能会丢失数据

    # gluster volume remove-brick test-volume 172.16.1.211:/data/exp9 force 
       #将“/data/exp9”磁盘从“test-volume”逻辑卷中删除

    三. FastDFS相关


    1.fastdfs的特性:

    1.C实现
    2.只能通过专有的API访问
    3.高性能,高扩展
    4.一般用在大于4K小于500M的文件存储

    2、FastDFS的上传过程

    FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

    这里写图片描述
    根据前边的讲解,我们知道Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

    当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。文件名的格式如下:
    这里写图片描述

    3.FastDFS的安装部署:

    官网:https://github.com/happyfish100
    部署2台服务器: 172.16.1.211 172.16.1.213

    1.先安装lib包
    # git clone https://github.com/happyfish100/libfastcommon.git #下载lib包
    # cd libfastcommon/
    # ./make.sh
    # ./make.sh install    #要先安装gcc,make等
    
    2.安装fastdfs:
    # git clone https://github.com/happyfish100/fastdfs.git
    # cd fastdfs
    # ./make.sh
    # ./make.sh install
    
    3.创建文件存放目录:
    # mkdir -p /data/fdfs_storaged
    # mkdir -p /data/fdfs_trackerd

    4.修改配置文件:

    两台服务器都要做下面的操作

    # cd /etc/fdfs/
    # cp storage.conf.sample storage.conf
    # cp tracker.conf.sample tracker.conf
    # vim tracker.conf #追踪服务器配置

    base_path=/data/fdfs_trackerd    

    # vim storage.conf

    base_path=/data/fdfs_storaged/base
    store_path0=/data/fdfs_storaged/store
    
    tracker_server=172.16.1.211:22122    #指定追踪服务器IP,我们有两台就配置两个
    tracker_server=172.16.1.213:22122

    # mkdir /data/fdfs_storaged/base
    # mkdir /data/fdfs_storaged/store

    5.启动fastdfs服务:

    # /etc/init.d/fdfs_trackerd start
    # /etc/init.d/fdfs_storaged start

    6.配置fastdfs客户端:

    # cd /etc/fdfs/
    # cp client.conf.sample client.conf
    # mkdir /data/fdfs_storaged/tmp
    # vim client.conf

    base_path=/data/fdfs_storaged/tmp    #存放日志目录
    
    tracker_server=172.16.1.211:22122
    tracker_server=172.16.1.213:22122

    7.通过客户端连接并上传文件:

    上传"/etc/passwd"文件到fastdfs服务器:
    # fdfs_upload_file /etc/fdfs/client.conf /etc/passwd   
    
    下载刚才上传的文件:
    # fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871
    
    查看文件属性:
    # fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871
    
    删除上传的文件:
    # fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBAB1VmCz8qABQC4AAAABncc3SA670.txt
    
    监控fastdfs的状态:
    # fdfs_monitor /etc/fdfs/client.conf

    8.通过nginx访问fastdfs:

    # tar -zxvf nginx-1.10.2.tar.gz
    # cd nginx-1.10.2
    
    下载fastdfs的nginx模块,编译安装的时候加进去
    # git clone https://github.com/happyfish100/fastdfs-nginx-module.git
    # ./configure --prefix=/usr/local/nginx-fastdfs --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=./fastdfs-nginx-module/src/
    # make && make install
    
    拷贝配置文件到fasstdfs配置里面
    # cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
    # cd /root/fastdfs/conf/     #进入fastdfs安装包文件夹
    # cp anti-steal.jpg http.conf mime.types /etc/fdfs/

    # cd /usr/local/nginx-fastdfs/
    # vim conf/nginx.conf 配置文件server中添加

             location /group1/M00 {
                root /data/fdfs_storaged/store;
                ngx_fastdfs_module;
            }

    # vim /etc/fdfs/mod_fastdfs.conf #修改客户端配置文件

    tracker_server=172.16.1.211:22122
    tracker_server=172.16.1.213:22122
    
    
    url_have_group_name = true      #url是否包含group信息
    store_path0=/data/fdfs_storaged/store

    启动nginx后就可以通过url访问了:
    # curl 172.16.1.211/group1/M00/00/00/rBAB01mC7OqAKx6RAAAFfnXniCQ1855579

    ps:生产环境可以用nginx反向代理访问,在group的每个节点上都装个nginx-fastdfs

  • 相关阅读:
    每日一问6:short、int、long以及long long的区别
    每日一问5 什么是类型安全?
    每日一问4: ++i和i++的区别
    每日一问3: C++中extern关键字的作用
    C++中如何判断int型是否溢出
    C++中的POD型别
    Java多线程之一:进程与线程
    设计模式2-单例模式
    Maven学习-编译遇到‘src/checkstyle/checkstyle-suppressions.xml‘
    任意用户登录系统时,显示警示提醒信息 “hi dangerous!”
  • 原文地址:https://www.cnblogs.com/wuhg/p/11841699.html
Copyright © 2020-2023  润新知