zoukankan      html  css  js  c++  java
  • ceph hammer 0.94.10手动部署方法Ceph Hammer版(0.94.10)手动部署for CentOS 7.x

    Ceph Hammer版(0.94.10)手动部署for CentOS 7.x

    --lin.wang 20190310

    环境有三个节点node-1,node-2,node-3,每个节点三个ssd盘作为osd

    1、添加yum源ceph、base、epel

    2、所有节点添加互信如:root用户,及hosts(/etc/hosts)列表

    3、/etc/ssh/ssh_config中: # StrictHostKeyChecking ask 注释去掉值改成no

    4、关闭firewalld、selinux,或者开放相应端口: mon 6789、osd 6800-8100

    5、配置时钟同步ntp

    6、每个节点安装ceph包,yum install ceph -y


    mon部署,7-10在node-1执行

    7、uuidgen生一个uuid,用作fsid

    8、切换到/etc/ceph目录下,创建ceph.conf,编写配置文件,如下

    [global]
    fsid = 4f41a244-032c-4d85-b3ff-7cefb2d1ed16
    mon_initial_members = node-1,node-2,node-3
    mon_host = 192.168.122.94,192.168.122.95,192.168.122.96
    public_network = 192.168.122.0/24
    cluster_network = 192.168.201.0/24
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx
    osd_journal_size = 1024
    filestore_xattr_use_omap = true
    osd_pool_default_size = 3 # Write an object n times.
    osd_pool_default_min_size = 1 # Allow writing n copy in a degraded state.
    osd_pool_default_pg_num = 128
    osd_pool_default_pgp_num = 128
    osd_crush_chooseleaf_type = 1
    

    9、

    创建monitor的key用于多个monitor间通信,保存在/tmp/ceph.mon.keyring

    ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

    生成管理用户client.admin及其key,保存在/etc/ceph/ceph.client.admin.keyring

    ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'
    #key文件命令规则:{cluster name}-{user-name}.keyring
    

    添加client.admin的key到ceph.mon.keyring文件

    ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    

    10、创建monitor map

    #默认的monitor port是6789
    monmaptool --create --add node-1 192.168.122.94 --add node-2 192.168.122.95 --add node-3 192.168.122.96 --fsid 4f41a244-032c-4d85-b3ff-7cefb2d1ed16 /tmp/monmap
    

    monmaptool --print /tmp/monmap可以查看生成的monmap

    ceph auth get mon. 可以获取monmap

    可以停止mon服务后使用如下方法导出monmap

    ceph-mon -i hostname --extract-monmap /tmp/monmap 从当前节点的/var/lib/ceph/mon/​hostname​ 导出monmap

    注入monmap

    停止所有节点mon服务

    ceph-mon -i mon-id --inject-monmap /tmp/monmap

    启动mon服务

    11、在每个mon节点上分别创建mon的目录

    sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}

    ​ node-1> mkdir /var/lib/ceph/mon/ceph-node-1

    ​ node-2> mkdir /var/lib/ceph/mon/ceph-node-2

    ​ node-3> mkdir /var/lib/ceph/mon/ceph-node-3

    12、初始化monitor

    将node-1的

    /tmp/monmoap、/tmp/ceph.mon.keyring、/etc/ceph/ceph.conf、/etc/ceph/ceph.client.admin.keyring

    部署完毕后,/tmp下的这两个文件可以删除

    复制到node-2和node-3的对应目录

    ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

    node-1> ceph-mon --mkfs -i node-1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

    node-2> ceph-mon --mkfs -i node-2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

    node-3> ceph-mon --mkfs -i node-3 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

    此时在每个节点/var/lib/ceph/mon/{cluster}-{hostname}目录下生成了store.db和keyring

    13、 在每个节点的mon目录下,创建两个文件:

    /var/lib/ceph/mon/{cluster}-{hostname}/{done,sysvinit}

    ​ node-1> touch /var/lib/ceph/mon/ceph-node-1/{done,sysvinit}

    ​ node-2> touch /var/lib/ceph/mon/ceph-node-2/{done,sysvinit}

    ​ node-3> touch /var/lib/ceph/mon/ceph-node-3/{done,sysvinit}

    其中done文件表示monitor已经创建完成,可以启动使用了。

    缺少sysvinit会报错。

    老版本要求创建upstart已自动启动,当前版本创建后会起不来。

    14、启动monitor服务: 每个mon节点,/etc/init.d/ceph start mon

    15、开机自启动,chkconfig ceph on


    osd部署

    16、创建osd idceph osd create

    本次有9个osd,因此创建9个即0-8: for i in $(seq 0 8) ;do ceph osd create;done

    新版本支持指定osd id,当前版本不支持

    创建完成后,可以通过ceph osd tree看到所有osd处于down和没有crush weight的状态

    [root@ceph-1 ~]# ceph osd tree
    ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
    -1 0 root default
    0 0 osd.0 down 0 1.00000
    1 0 osd.1 down 0 1.00000
    2 0 osd.2 down 0 1.00000
    3 0 osd.3 down 0 1.00000
    4 0 osd.4 down 0 1.00000
    5 0 osd.5 down 0 1.00000
    6 0 osd.6 down 0 1.00000
    7 0 osd.7 down 0 1.00000
    8 0 osd.8 down 0 1.00000

    17、在每个节点创建osd的目录,mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}

    ​ node-1> mkdir /var/lib/ceph/osd/ceph-{0..2}

    ​ node-2> mkdir /var/lib/ceph/osd/ceph-{3..5}

    ​ node-3> mkdir /var/lib/ceph/osd/ceph-{6..8}

    18、将所有osd磁盘分区并挂载

    parted -s /dev/vdb mklabel gpt mkpart primary 2048s 100%

    mkfs.xfs /dev/vdb1

    [root@ceph-1 osd]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root  7.1G  1.2G  6.0G  16% /
    devtmpfs                 2.0G     0  2.0G   0% /dev
    tmpfs                    2.0G     0  2.0G   0% /dev/shm
    tmpfs                    2.0G  8.5M  2.0G   1% /run
    tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
    /dev/vda1               1014M  125M  890M  13% /boot
    tmpfs                    396M     0  396M   0% /run/user/0
    /dev/vdb1                 10G   33M   10G   1% /var/lib/ceph/osd/ceph-0
    /dev/vdc1                 10G   33M   10G   1% /var/lib/ceph/osd/ceph-1
    /dev/vdd1                 10G   33M   10G   1% /var/lib/ceph/osd/ceph-2
    

    19、各osd节点初始化osd目录

    ceph-osd -i {osd-num} --mkfs --mkkey --osd-uuid [{uuid}]

    ceph-osd -i 0 --mkfs --mkkey

    --mkkey 选项运行 ceph-osd 之前,此目录必须是空的;另外,如果集群名字不是默认值,还要给 ceph-osd 指定 --cluster 选项。

    20、注册osd的keyring.

    ceph auth add osd.{osd-num} osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/{cluster-name}-{osd-num}/keyring

    ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring

    路径内 ceph-{osd-num} 里的 ceph 其含义为 $cluster-$id ,如果你的集群名字不是 ceph ,请指定自己的集群名

    对于恢复已有的keyring,可以使用ceph auth import -i osd_path/keyring并auth caps赋权:ceph auth caps osd.0 osd 'allow *' mon 'allow profile osd'

    21、将节点加入到crush map,并放置在default根root下。

    ceph [--cluster {cluster-name}] osd crush add-bucket {hostname} host

    ceph osd crush add-bucket node-1 host

    ceph osd crush move node-1 root=default

    move到root下前后crush 对比

    之前

    [root@ceph-1 osd]# ceph osd tree
    ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
    -2 0 host node-1
    -1 0 root default

    之后

    [root@ceph-1 osd]# ceph osd tree
    ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
    -1 0 root default
    -2 0 host node-1

    crush中没有删除bucket的命令,只能导出crushmap修改

    先mkkey才能mova osd 到bucket下,否则mkkey会报错

    22、在crushmap把osd添加到host下:

    ceph [--cluster {cluster-name}] osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]

    ceph osd crush add osd.0 1.0 host=node-1

    添加后,则osd属于host下,启动服务即可接收数据。加入之前和之后对比:

    之前

    [root@ceph-1 osd]# ceph osd tree
    ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
    -1 0 root default
    -2 0 host node-1
    0 0 osd.0 down 0 1.00000
    1 0 osd.1 down 0 1.00000
    2 0 osd.2 down 0 1.00000

    之后

    [root@ceph-1 osd]# ceph osd tree
    ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
    -1 3.00000 root default
    -2 3.00000 host node-1
    0 1.00000 osd.0 down 0 1.00000
    1 1.00000 osd.1 down 0 1.00000
    2 1.00000 osd.2 down 0 1.00000

    23、给osd创建sysvinit并启动osd服务

    创建sysvinit,在osd的目录下 touch /var/lib/ceph/osd/{cluster-name}-{osd-num}/sysvinit

    touch /var/lib/ceph/osd/ceph-0/sysvinit

    24、添加journal

    #清除磁盘所有分区(重新添加时需要)
    #sgdisk --zap-all --clear --mbrtogpt /dev/vdf
    

    Journal大小的选择尊循下面的规则:

    osd journal size = {2 * (expected throughput * filestore_max_sync_interval)}

    filestore_max_sync_interval为ceph配置,可以在ceph的config中获取,默认为5s

    即osd journal的大小应该设置为(磁盘的带宽 * 同步时间) 的2倍。

    25、给osd和journal打标签
    数据盘标签
    sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sdx
    日志盘标签
    sgdisk --typecode=1:45b0969e-9b03-4f30-b4c6-b4b80ceff106 /dev/sdx
    注:对所有日志盘和数据盘执行此操作,日志盘分区与数据盘不同 typecode = 1 代表
    第一个分区
    Other TAG
    sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff0f9 -- /dev/sdx

    删除旧的journal,把ssd分区的uuid链接到osd目录为journal,并把uuid写入journal_uuid文件

    并执行

    ceph-osd -i osd_numer --mkjournal

    26、在osd所在节点启动osd的服务,将osd状态变为up

    service ceph start osd

    osd服务启动后,会自动up和in到集群。

    依次把所有osd节点的osd完成部署和启动则集群部署完成

    osd的服务部署有精简方法:

    1. 准备: ceph-disk prepare --cluster {cluster-name} --cluster-uuid {uuid} --fs-type {ext4|xfs|btrfs} {data-path} [{journal-path}]
    2. 激活: ceph-disk activate {data-path} [--activate-key {path}]

    注: 如果你的 Ceph 节点上没有 /var/lib/ceph/bootstrap-osd/{cluster}.keyring ,那么应该外加 --activate-key参数。

    osd的自动启动是udev的规则控制,所以需要给osd用sgdisk打上标签

    规则

    /usr/lib/udev/rules.d/95-ceph-osd.rules

    /usr/lib/udev/rules.d/60-ceph-by-parttypeuuid.rules

  • 相关阅读:
    解读Unity中的CG编写Shader系列十 (光滑的镜面反射(冯氏着色))
    解读Unity中的CG编写Shader系列八(多光源漫反射)
    Unity3d《Shader篇》漫反射
    解读Unity中的CG编写Shader系列八(镜面反射)
    渲染物体到一张UITexture上
    解读Unity中的CG编写Shader系列六(漫反射)
    解读Unity中的CG编写Shader系列五(理论知识)
    解读Unity中的CG编写Shader系列四(unity中的圆角矩形shader)
    解读Unity中的CG编写Shader系列三
    解读Unity中的CG编写Shader系列二
  • 原文地址:https://www.cnblogs.com/wangl-blog/p/10514497.html
Copyright © 2011-2022 走看看