Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)

一、 介绍

Ceph 是一个去中心化的分布式存储系统, 拥有较好的性能、可靠性和可扩展性。
与其他主流存储系统对比:

对比说明 TFS FASTDFS MooseFS GlusterFS CEPH
开发语言 C++ C C C C++
数据存储方式 文件/Trunk 文件/块 对象/文件/块
在线扩容 支持 支持 支持 支持 支持
冗余备份 支持 支持 支持 支持 支持
单点故障 存在 不存在 存在 不存在 不存在
易用性 安装复杂,官方文档少 安装简单,社区相对活跃 安装简单,官方文档多 安装简单,官方文档专业化 安装简单,官方文档专业化
适用场景 跨集群的小文件 单集群的中小文件 单集群的大中文件 跨集群云存储 单集群的大中小文件

二、脉络

  • 了解Ceph部署规划
  • 操作系统基础配置
  • Ceph集群创建配置
  • Ceph Dashboard管理后台
  • CephFs文件系统创建
  • Rados Java Ceph功能验证

三、知行

Ceph集群虽然宣称安装简单,官方文档资料齐全, 但是实际部署当中步骤还挺多, 坑也不少,略显高能, 如果出现失败,请大家严格按照步骤,环境及版本操作。

1. 部署规划结构

Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)_第1张图片
创建三台虚拟机, 本教程采用的是CENTOS7.6版本。

主机名称 主机IP 说明
CENTOS7-1 10.10.10.11 管理主节点,安装Dashbaord
CENTOS7-2 10.10.10.12 子节点
CENTOS7-3 10.10.10.13 子节点

2. 操作系统基础配置

依次在三台节点上执行:

  1. 修改主机名称
    [root@CENTOS7-1 ~]# vi /etc/hostname

    CENTOS7-1
    

    重启生效, 临时修改方法(重连会话生效): hostnamectl set-hostname CENTOS7-1
    建议采用永久修改方法并进行重启。

  2. 编辑hosts文件

    10.10.10.11 CENTOS7-1
    10.10.10.12 CENTOS7-2
    10.10.10.13 CENTOS7-3	
    

    注意, 主机名称要和部署的Ceph节点名称保持一致, 否则安装时候会出现问题。

  3. 修改YUM安装源
    vi /etc/yum.repos.d/ceph.repo
    这里采用清华镜像源, 提升下载速度

    [Ceph]
    name=Ceph packages for $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
    
    [Ceph-noarch]
    name=Ceph noarch packages
    # 官方源
    #baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
    # 清华源
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
    
    [ceph-source]
    name=Ceph source packages
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc  
    
    
  4. 安装NTP时间同步工具
    Ceph集群要求时间保持同步, 通过NTP时间同步可以保障所有节点时间一致。

    yum install ntp ntpdate ntp-doc -y
    

    确保时区是正确, 设置开机启动:

    systemctl enable ntpd
    

    并将时间每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local 追加:

    /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
    

    配置定时任务, 执行crontab -e 加入:

    0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
    
  5. 内核优化

    #调整内核参数
    [root@CENTOS7-1 ~]# cat >> /etc/sysctl.conf << EOF
    > kernel.pid_max=4194303
    > vm.swappiness = 0
    > EOF
    [root@CENTOS7-1 ~]# sysctl -p
    # read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作,8192是比较理想的值
    [root@CENTOS7-1 ~]# echo "8192" > /sys/block/sda/queue/read_ahead_kb 
    # I/O Scheduler优化,如果SSD要用noop,SATA/SAS设备采用deadline。
    [root@CENTOS7-1 ~]#echo "deadline" > /sys/block/sda/queue/scheduler
    [root@CENTOS7-1 ~]#echo "noop" > /sys/block/sda/queue/scheduler
    
  6. 关闭selinux
    vi /etc/selinux/config文件, 将SELINUX设为disabled, 永久生效。

    SELINUX=disabled
    

    临时生效:

    setenforce 0
    

3. SSH免密登陆配置

  1. 官方建议不用系统内置用户, 创建名为ceph_user用户, 密码也设为ceph_user:

    useradd -d /home/ceph_user -m ceph_user
    passwd ceph_user
    
  2. 设置sudo权限

    echo "ceph_user ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph_user
    sudo chmod 0440 /etc/sudoers.d/ceph_user
    

    1、2两个步骤请依次在三台机器上执行。

    接下来的步骤在主节点执行即可:

  3. 生成密钥:

    切换用户: su ceph_user

    执行ssh-keygen,一直按默认提示点击生成RSA密钥信息。

  4. 分发密钥至各机器节点

    ssh-copy-id ceph_user@CENTOS7-1
    ssh-copy-id ceph_user@CENTOS7-2
    ssh-copy-id ceph_user@CENTOS7-3
    
  5. 让root管理用户采用ceph_user连接并支持远程免密登陆:

    管理节点是会有root和ceph_user多个用户, ssh远程连接默认会以当前用户身份进行登陆,

    如果我们是root身份进行远程连接, 还是需要输入密码, 我们想简化, 该怎么处理?

    切换root身份,

    su root 
    

    修改ssh连接配置文件:
    vi ~/.ssh/config

    Host CENTOS7-1
       Hostname CENTOS7-1
       User ceph_user
    Host CENTOS7-2
       Hostname CENTOS7-2
       User ceph_user
    Host CENTOS7-3
       Hostname CENTOS7-3
       User ceph_user
    

    注意修改文件权限, 不能采用777最大权限:

    chmod 600 ~/.ssh/config
    

    注意: 进行ssh远程连接时, Host的主机名称是区分大小写的。

  6. 开放端口, 非生产环境, 可以直接禁用防火墙:

    systemctl stop firewalld.service
    systemctl disable firewalld.service
    

4. Ceph集群搭建与配置

为避免目录权限等问题,我们采用root身份进行安装。

  1. 安装Ceph与Ceph-Deploy组件(在三台节点分别执行)

    yum update && yum -y install ceph ceph-deploy 
    

    安装完成, 如果执行ceph-deploy出现ImportError: No module named pkg_resources

    请安装python2-pip: yum -y install python2-pip

  2. 在主节点创建集群配置目录:

    cd /usr/local
    mkdir ceph-cluster
    cd ceph-cluster
    

    注意: 此目录作为ceph操作命令的基准目录, 会存储集群配置信息。

  3. 创建集群(主节点操作)
    填写三台机器节点名称:

    ceph-deploy new CENTOS7-1  CENTOS7-2 CENTOS7-3
    

    创建成功后, 会生一个配置文件。

  4. 如果接下来集群的安装配置出现问题, 可以执行以下命令清除, 再重新安装:

    ceph-deploy purge CENTOS7-1  CENTOS7-2 CENTOS7-3
    ceph-deploy purgedata CENTOS7-1  CENTOS7-2 CENTOS7-3
    ceph-deploy forgetkeys
    

    将三台节点的mon信息也删除

    rm -rf /var/run/ceph/
    
  5. 修改配置文件(主节点操作):
    有些配置后面需要用到

    vi /usr/local/ceph-cluster/ceph.conf
    

    加入:

    [global]
    public network = 10.10.10.0/24
    # 设置pool池默认分配数量
    osd pool default size = 2
    # 容忍更多的时钟误差
    mon clock drift allowed = 2
    mon clock drift warn backoff = 30
    # 允许删除pool
    mon_allow_pool_delete = true
    [mgr]
    # 开启WEB仪表盘
    mgr modules = dashboard
    
  6. 执行安装(主节点操作):

    ceph-deploy install  CENTOS7-1  CENTOS7-2 CENTOS7-3
    

    如果出现错误:

    ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
    

    请在各节点上单独进行安装:

    yum -y install ceph 
    

    如果没有仓库文件ceph.repo, 请参考上面的第2章第3节,YUM的源配置文件是否完整, 网路是否通畅, 或采用其他数据源进行安装。

  7. 初始monitor信息(主节点操作):

    ceph-deploy mon create-initial
    

    执行完成后, 会生成以下文件:

    ceph.bootstrap-mds.kering
    ceph.bootstrap-mgr.kering
    ceph.bootstrap-osd.kering
    ceph.bootstrap-rgw.kering
    ceph.client.admin.keyring
    ceph.conf
    
  8. 同步管理信息(主节点操作):

    从主节点下发配置文件和管理信息至各节点:

    ceph-deploy admin  CENTOS7-1  CENTOS7-2 CENTOS7-3
    
  9. 安装mgr管理守护进程(主节点操作)
    大于12.x版本需安装, 我们装的是最新版,需执行:

    ceph-deploy mgr create CENTOS7-1  CENTOS7-2 CENTOS7-3
    
  10. 安装OSD对象存储设备(三台节点操作)

    注意: 新版本的OSD没有prepare与activate命令。

    这里需要新的硬盘作为OSD存储设备, 关闭虚拟机, 增加一块硬盘, 不用格式化。 Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)_第2张图片

    重启, fdisk -l 查看新磁盘名称:Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)_第3张图片

    执行创建OSD命令:

    ceph-deploy osd create --data /dev/sdb CENTOS7-1
    
  11. 验证节点:

    输入ceph health 或 ceph -s查看, 出现HEALTH_OK代表正常。 Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)_第4张图片
    可以看到mon,mgr, mds等三个节点的信息,说明各节点的服务安装成功。

5. 管理后台Dashboard安装

  1. 开启dashboard模块

    ceph mgr module enable dashboard
    
  2. 生成签名

    ceph dashboard create-self-signed-cert
    
  3. 创建目录

    在/usr/local/ceph-cluster目录下创建:

    mkdir mgr-dashboard
    
    [root@CENTOS7-1 mgr-dashboard]# pwd
    /usr/local/ceph-cluster/mgr-dashboard
    
  4. 生成密钥对

    cd  /usr/local/ceph-cluster/mgr-dashboard
    
    openssl req -new -nodes -x509   -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650   -keyout dashboard.key -out dashboard.crt -extensions v3_ca
    
    [root@CENTOS7-1 mgr-dashboard]# ll
    total 8
    -rw-rw-r-- 1 ceph_user ceph_user 1155 Dec 14 02:26 dashboard.crt
    -rw-rw-r-- 1 ceph_user ceph_user 1704 Dec 14 02:26 dashboard.key
    
  5. 启动dashboard

    ceph mgr module disable dashboard
    ceph mgr module enable dashboard
    
  6. 设置IP与PORT

    ceph config set mgr mgr/dashboard/server_addr 10.10.10.11
    ceph config set mgr mgr/dashboard/server_port 8843
    

    如果需要关闭SSL,执行:

    ceph config set mgr mgr/dashboard/ssl false
    
  7. 查看服务信息

    [root@CENTOS7-1 mgr-dashboard]# ceph mgr services
    {
        "dashboard": "http://10.10.10.11:8443/"
    }
    
  8. 设置管理用户与密码

    ceph dashboard set-login-credentials admin admin
    
  9. 访问 Centos7系统下Ceph分布式存储集群的部署搭建配置(上篇)_第5张图片

6. CephFs文件系统创建

集群创建完后, 默认没有文件系统, 我们需要创建一个Cephfs可以支持对外访问的文件系统。

  1. 创建两个存储池, 执行两条命令:

    ceph osd pool create cephfs_data 128
    ceph osd pool create cephfs_metadata 64
    

    说明:

    如果OSD少于5个可把pg_num设置为128

    OSD数量在5到10,可以设置pg_num为512

    OSD数量在10到50,可以设置pg_num为4096

    OSD数量大于50,需要计算pg_num的值

    通过下面命令可以列出当前创建的存储池:

    ceph osd lspools
    
  2. 创建fs, 名称为fs_test:

    ceph fs new fs_test cephfs_metadata cephfs_data
    
  3. 查看创建信息
    以下信息代表正常:

    [root@CENTOS7-1 mgr-dashboard]# ceph fs ls
    name: fs_test, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
    
    [root@CENTOS7-1 mgr-dashboard]# ceph mds stat
    fs_test-1/1/1 up  {0=centos7-1=up:active}
    

    附: 如果创建错误, 需要删除的话, 执行:

    ceph fs rm fs_test --yes-i-really-mean-it
    ceph osd pool delete cephfs_data cephfs_data  --yes-i-really-really-mean-it
    

    需要输入两次名称, 并附带–yes-i-really-really-mean-it参数。
    同时确保在ceph.conf中开启以下配置, 这个我们在上面集群配置文件中已经开启:

    mon allow pool delete = true
    
  4. 采用fuse挂载

    先确定ceph-fuse命令能执行, 如果没有, 则安装:

     yum -y install ceph-fuse
    
  5. 创建挂载目录

    mkdir -p /usr/local/cephfs_directory
    
  6. 挂载cephfs

    [root@node3 ~]# ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 10.10.10.11:6789 /usr/local/cephfs_directory
    ceph-fuse[6687]: starting ceph client
    2019-07-14 21:39:09.644181 7fa5be56e040 -1 init, newargv = 0x7fa5c940b500 newargc=9
    ceph-fuse[6687]: starting fuse
    
  7. 查看磁盘挂载信息

    [root@CENTOS7-1 mgr-dashboard]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   38G  3.0G   35G   8% /
    devtmpfs                 1.9G     0  1.9G   0% /dev
    tmpfs                    1.9G     0  1.9G   0% /dev/shm
    tmpfs                    1.9G   20M  1.9G   2% /run
    tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/sda1                197M  167M   31M  85% /boot
    tmpfs                    378M     0  378M   0% /run/user/0
    tmpfs                    1.9G   24K  1.9G   1% /var/lib/ceph/osd/ceph-0
    ceph-fuse                 27G     0   27G   0% /usr/local/cephfs_directory
    tmpfs                    378M     0  378M   0% /run/user/1000
    
    

    可以看到, /usr/local/cephfs_directory目录已成功挂载。

7. Rados Java使用与验证

  1. 安装好JDK、GIT和MAVEN。

  2. 下载rados java客户端源码

    git clone https://github.com/ceph/rados-java.git
    

    下载目录位置:

    [root@CENTOS7-1 rados-java]# pwd
    /usr/local/sources/rados-java
    
  3. 执行MAVEN安装:
    跳过测试用例, 节省时间:

    [root@CENTOS7-1 rados-java]# mvn install -Dmaven.test.skip=true
    

    生成jar包, rados-0.6.0-SNAPSHOT.jar

    [root@CENTOS7-1 target]# ll
    total 104
    drwxr-xr-x 3 root root     17 Dec 3 19:31 classes
    drwxr-xr-x 2 root root     27 Dec 3 19:31 dependencies
    drwxr-xr-x 3 root root     25 Dec 3 19:31 generated-sources
    drwxr-xr-x 2 root root     28 Dec 3 19:31 maven-archiver
    drwxr-xr-x 3 root root     35 Dec 3 19:31 maven-status
    -rw-r--r-- 1 root root 105570 Dec 3 19:31 rados-0.6.0-SNAPSHOT.jar
    
  4. 创建软链接, 加入CLASSPATH环境变量中:

    ln -s /usr/local/sources/rados-java/target/rados-0.6.0-SNAPSHOT.jar /usr/local/jdk1.8.0_181/jre/lib/ext/rados-0.6.0-SNAPSHOT.jar
    

    安装jna

    yum -y install jna
    

    创建软链接

    ln -s /usr/share/java/jna.jar /usr/local/jdk1.8.0_181/jre/lib/ext/jna.jar
    
  5. 创建JAVA测试类

    CephClient类,注意, 最新版0.6的异常处理包位置已发生变化。

    import com.ceph.rados.Rados;
    import com.ceph.rados.exceptions.*;
    
    import java.io.File;
    
    public class CephClient {
         public static void main (String args[]){
    
                 try {
                         // 创建名为admin的操作对象
                         Rados cluster = new Rados("admin");
                         System.out.println("Created cluster handle.");
                         // 读取Ceph集群配置
                         File f = new File("/etc/ceph/ceph.conf");
                         cluster.confReadFile(f);
                         System.out.println("Read the configuration file.");
    					 // 客户端与集群建立连接
                         cluster.connect();
                         System.out.println("Connected to the cluster.");
    
                 } catch (RadosException e) {
                         System.out.println(e.getMessage() + ": " + e.getReturnValue());
                 }
         }
    }
    
  6. 运行验证

    需要在linux环境下运行,且要在client节点。

    编译并运行:

    [root@CENTOS7-1 sources]# javac CephClient.java 
    [root@CENTOS7-1 sources]# java CephClient
    Created cluster handle.
    Read the configuration file.
    Connected to the cluster.
    

    从打印日志, 可以看到客户端成功与Ceph集群建立连接。

四、合一

  • Ceph集群搭建与配置并不复杂, 只是操作步骤较多, 这与Ceph的设计也有关系, 将各个模块分离设计, 职能单一, 减少耦合, 提升了服务的稳定性。
  • 集群配置过程中, 根据不同的系统环境, Ceph版本(本教程采用的是13.2.6版本), 会存有差异,可能会导致各种问题, 大家可以通过ceph health 命令来查看具体原因, 再做具体分析。填坑是个艰难的过程, 但也能让自己的认知获得提升。
  • 后面教程会再讲解Java Swift Api的使用, 以及Ceph Docker方式的部署,Docker方式部署也会存在不少差异与新的问题, 尽量让大家少走弯路。
  • 最后, 建议大家还是要在虚拟机上多做实践与探索。

未经本人同意, 请勿随意转载! 相逢是缘, 希望对大家有所帮助, 谢谢!

如需获取最新技术资讯或交流, 请关注:
在这里插入图片描述

你可能感兴趣的:(分布式存储)