Ceph vstart 虚拟环境使用

简介

 虽然ceph官方给出了ceph的部署文档,但是部署一个集群还是要花上一些时间,而且对于我们做个小实验做功能验证或者bug fix验证这类需求根本没有必要去部署一套新集群。这样不但浪费时间而且对于公司的资源也是一种浪费(土豪公司除外)。然后ceph 社区针对这个问题提供了一个非常友好,快速的方法。利用vstart我们以迅速创建一个几乎跟实际环境一样的虚拟环境,我们今天介绍一下如何使用。

启动start

 在我的上一篇文章Ceph 编译构建rpm包里面已经见过如何编译ceph源代码了,先按照文章里面的cmake方式编译好源码。
我们先看一下Luminous version:12.2.10 vstart的usage

usage: ../src/vstart.sh [option]...
ex: ../src/vstart.sh -n -d --mon_num 3 --osd_num 3 --mds_num 1 --rgw_num 1
options:
    -d, --debug
    -s, --standby_mds: Generate standby-replay MDS for each active
    -l, --localhost: use localhost instead of hostname
    -i : bind to specific ip
    -n, --new
    -N, --not-new: reuse existing cluster config (default)
    --valgrind[_{osd,mds,mon,rgw}] 'toolname args...'
    --nodaemon: use ceph-run as wrapper for mon/osd/mds
    --smallmds: limit mds cache size
    -m ip:port      specify monitor address
    -k keep old configuration files
    -x enable cephx (on by default)
    -X disable cephx
    --hitset  : enable hitset tracking
    -e : create an erasure pool
    -o config        add extra config parameters to all sections
    --mon_num specify ceph monitor count
    --osd_num specify ceph osd count
    --mds_num specify ceph mds count
    --rgw_num specify ceph rgw count
    --mgr_num specify ceph mgr count
    --rgw_port specify ceph rgw http listen port
    --rgw_frontend specify the rgw frontend configuration
    --rgw_compression specify the rgw compression plugin
    -b, --bluestore use bluestore as the osd objectstore backend
    --memstore use memstore as the osd objectstore backend
    --cache : enable cache tiering on pool
    --short: short object names only; necessary for ext4 dev
    --nolockdep disable lockdep
    --multimds  allow multimds with maximum active count

开始创建新集群

使用下面的命令vstart会给我们创建一个3 monitor,3 mds(1 active,2 stanby),3 osd(3 副本)的集群。

[root@localhost build]#  sh ../src/vstart.sh -n -d

** going verbose **
rm -f core*
hostname localhost
ip 192.168.12.200
port 40385
/var/ws/ceph-12.2.10/build/bin/ceph-authtool --create-keyring --gen-key --name=mon. /var/ws/ceph-12.2.10/build/keyring --cap mon allow *
creating /var/ws/ceph-12.2.10/build/keyring
/var/ws/ceph-12.2.10/build/bin/ceph-authtool --gen-key --name=client.admin --set-uid=0 --cap mon allow * --cap osd allow * --cap mds allow * --cap mgr allow * /var/ws/ceph-12.2.10/build/keyring
/var/ws/ceph-12.2.10/build/bin/ceph-authtool --gen-key --name=client.rgw --cap mon allow rw --cap osd allow rwx --cap mgr allow rw /var/ws/ceph-12.2.10/build/keyring
/var/ws/ceph-12.2.10/build/bin/monmaptool --create --clobber --add a 192.168.12.200:40385 --add b 192.168.12.200:40386 --add c 192.168.12.200:40387 --print /tmp/ceph_monmap.31812
/var/ws/ceph-12.2.10/build/bin/monmaptool: monmap file /tmp/ceph_monmap.31812
/var/ws/ceph-12.2.10/build/bin/monmaptool: generated fsid 053bf1c1-5bea-466f-bad8-18de4e7f18cf
epoch 0
fsid 053bf1c1-5bea-466f-bad8-18de4e7f18cf
last_changed 2019-01-18 11:22:57.763781
created 2019-01-18 11:22:57.763781
0: 192.168.12.200:40385/0 mon.a
1: 192.168.12.200:40386/0 mon.b
2: 192.168.12.200:40387/0 mon.c
...

/var/ws/ceph-12.2.10/build/bin/ceph-authtool --create-keyring --gen-key --name=mds.c /var/ws/ceph-12.2.10/build/dev/mds.c/keyring
creating /var/ws/ceph-12.2.10/build/dev/mds.c/keyring
/var/ws/ceph-12.2.10/build/bin/ceph -c /var/ws/ceph-12.2.10/build/ceph.conf -k /var/ws/ceph-12.2.10/build/keyring -i /var/ws/ceph-12.2.10/build/dev/mds.c/keyring auth add mds.c mon allow profile mds osd allow * mds allow mgr allow profile mds
added key for mds.c
/var/ws/ceph-12.2.10/build/bin/ceph-mds -i c -c /var/ws/ceph-12.2.10/build/ceph.conf
starting mds.c at -
started.  stop.sh to stop.  see out/ (e.g. 'tail -f out/????') for debug output.

dashboard urls: http://192.168.12.200:41385/
  restful urls: https://192.168.12.200:42385
  w/ user/pass: admin / 84eb0e02-0034-4809-aa81-0c21a468180d

export PYTHONPATH=./pybind:/var/ws/ceph-12.2.10/src/pybind:/var/ws/ceph-12.2.10/build/lib/cython_modules/lib.2:
export LD_LIBRARY_PATH=/var/ws/ceph-12.2.10/build/lib
CEPH_DEV=1
  • 检查集群状态
[root@localhost build]# ./bin/ceph -s
*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
2019-01-18 12:07:02.847675 7fcc629b4700 -1 WARNING: all dangerous and experimental features are enabled.
2019-01-18 12:07:02.907931 7fcc629b4700 -1 WARNING: all dangerous and experimental features are enabled.
  cluster:
    id:     32d792fd-1035-4ad5-a237-0d4851efd5cb
    health: HEALTH_WARN
            no active mgr

  services:
    mon: 3 daemons, quorum a,b,c
    mgr: no daemons active
    mds: cephfs_a-1/1/1 up  {0=a=up:active}, 2 up:standby
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   2 pools, 16 pgs
    objects: 21 objects, 2.19KiB
    usage:   1.99TiB used, 363GiB / 2.34TiB avail
    pgs:     16 active+clean

  • 检查mds
[root@localhost build]# ./bin/ceph mds dump --format=json-pretty
*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
2019-01-18 12:15:45.537644 7f7834519700 -1 WARNING: all dangerous and experimental features are enabled.
2019-01-18 12:15:45.594255 7f7834519700 -1 WARNING: all dangerous and experimental features are enabled.
dumped fsmap epoch 8

{
    "epoch": 7,
    "flags": 12,
    "ever_allowed_features": 0,
    "explicitly_allowed_features": 0,
    "created": "2019-01-18 11:24:14.522559",
    "modified": "2019-01-18 11:24:52.769470",
    "tableserver": 0,
    "root": 0,
    "session_timeout": 60,
    "session_autoclose": 300,
    "max_file_size": 1099511627776,
    "last_failure": 0,
    "last_failure_osd_epoch": 0,
    "compat": {
        "compat": {},
        "ro_compat": {},
        "incompat": {
            "feature_1": "base v0.20",
            "feature_2": "client writeable ranges",
            "feature_3": "default file layouts on dirs",
            "feature_4": "dir inode in separate object",
            "feature_5": "mds uses versioned encoding",
            "feature_6": "dirfrag is stored in omap",
            "feature_8": "no anchor table",
            "feature_9": "file layout v2"
        }
    },
    "max_mds": 1,
    "in": [
        0
    ],
    "up": {
        "mds_0": 4140
    },
    "failed": [],
    "damaged": [],
    "stopped": [],
    "info": {
        "gid_4140": {
            "gid": 4140,
            "name": "a",
            "rank": 0,
            "incarnation": 4,
            "state": "up:active",
            "state_seq": 7,
            "addr": "192.168.12.200:6813/3759861531",
            "standby_for_rank": -1,
            "standby_for_fscid": -1,
            "standby_for_name": "",
            "standby_replay": false,
            "export_targets": [],
            "features": 4611087853745930235
        }
    },
    "data_pools": [
        1
    ],
    "metadata_pool": 2,
    "enabled": true,
    "fs_name": "cephfs_a",
    "balancer": "",
    "standby_count_wanted": 1
}
  • 检查pool状态
[root@localhost build]# ./bin/ceph osd pool ls detail
*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
2019-01-18 12:17:28.173025 7ff840996700 -1 WARNING: all dangerous and experimental features are enabled.
2019-01-18 12:17:28.230196 7ff840996700 -1 WARNING: all dangerous and experimental features are enabled.
pool 1 'cephfs_data_a' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 13 flags hashpspool stripe_width 0 application cephfs
pool 2 'cephfs_metadata_a' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 13 flags hashpspool stripe_width 0 application cephfs
  • 集群配置文件
    我们可以手动修改下面的配置文件,比如日志级别来达到我们想要的效果。
[root@localhost build]# cat ./ceph.conf
; generated by vstart.sh on Fri Jan 18 11:22:57 UTC 2019
[client.vstart.sh]
        num mon = 3
        num osd = 3
        num mds = 3
        num mgr = 1
        num rgw = 0

[global]
        fsid = 32d792fd-1035-4ad5-a237-0d4851efd5cb
        osd pg bits = 3
        osd pgp bits = 5  ; (invalid, but ceph should cope!)
        osd pool default size = 3
        osd crush chooseleaf type = 0
        osd pool default min size = 1
        osd failsafe full ratio = .99
        mon osd nearfull ratio = .99
        mon osd backfillfull ratio = .99
        mon osd reporter subtree level = osd
        mon osd full ratio = .99
        mon data avail warn = 2
        mon data avail crit = 1
        erasure code dir = /var/ws/ceph-12.2.10/build/lib
        plugin dir = /var/ws/ceph-12.2.10/build/lib
        osd pool default erasure code profile = plugin=jerasure technique=reed_sol_van k=2 m=1 crush-failure-domain=osd
        rgw frontends = civetweb port=8000
        ; needed for s3tests
        rgw crypt s3 kms encryption keys = testkey-1=YmluCmJvb3N0CmJvb3N0LWJ1aWxkCmNlcGguY29uZgo= testkey-2=aWIKTWFrZWZpbGUKbWFuCm91dApzcmMKVGVzdGluZwo=
        rgw crypt require ssl = false
        rgw lc debug interval = 10
        filestore fd cache size = 32
        run dir = /var/ws/ceph-12.2.10/build/out
        enable experimental unrecoverable data corrupting features = *
        lockdep = true
        auth cluster required = cephx
        auth service required = cephx
        auth client required = cephx
[client]
        keyring = /var/ws/ceph-12.2.10/build/keyring
        log file = /var/ws/ceph-12.2.10/build/out/$name.$pid.log
        admin socket = /tmp/ceph-asok.ZlA7Lh/$name.$pid.asok

[client.rgw]

[mds]

        log file = /var/ws/ceph-12.2.10/build/out/$name.log
        admin socket = /tmp/ceph-asok.ZlA7Lh/$name.asok
        chdir = ""
        pid file = /var/ws/ceph-12.2.10/build/out/$name.pid
        heartbeat file = /var/ws/ceph-12.2.10/build/out/$name.heartbeat


        debug ms = 1
        debug mds = 20
        debug auth = 20
        debug monc = 20
        debug mgrc = 20
        mds debug scatterstat = true
        mds verify scatter = true
        mds log max segments = 2
        mds debug frag = true
        mds debug auth pins = true
        mds debug subtrees = true
        mds data = /var/ws/ceph-12.2.10/build/dev/mds.$id
        mds root ino uid = 0
        mds root ino gid = 0

[mgr]
        mgr data = /var/ws/ceph-12.2.10/build/dev/mgr.$id
        mgr module path = /var/ws/ceph-12.2.10/src/pybind/mgr
        mon reweight min pgs per osd = 4
        mon pg warn min per osd = 3

        log file = /var/ws/ceph-12.2.10/build/out/$name.log
        admin socket = /tmp/ceph-asok.ZlA7Lh/$name.asok
        chdir = ""
        pid file = /var/ws/ceph-12.2.10/build/out/$name.pid
        heartbeat file = /var/ws/ceph-12.2.10/build/out/$name.heartbeat


        debug ms = 1
        debug monc = 20
    debug mon = 20
        debug mgr = 20

[osd]

        log file = /var/ws/ceph-12.2.10/build/out/$name.log
        admin socket = /tmp/ceph-asok.ZlA7Lh/$name.asok
        chdir = ""
        pid file = /var/ws/ceph-12.2.10/build/out/$name.pid
        heartbeat file = /var/ws/ceph-12.2.10/build/out/$name.heartbeat

        osd_check_max_object_name_len_on_startup = false
        osd data = /var/ws/ceph-12.2.10/build/dev/osd$id
        osd journal = /var/ws/ceph-12.2.10/build/dev/osd$id/journal
        osd journal size = 100
        osd class tmp = out
        osd class dir = /var/ws/ceph-12.2.10/build/lib
        osd class load list = *
        osd class default list = *
        osd scrub load threshold = 2000.0
        osd debug op order = true
        osd debug misdirected ops = true
        filestore wbthrottle xfs ios start flusher = 10
        filestore wbthrottle xfs ios hard limit = 20
        filestore wbthrottle xfs inodes hard limit = 30
        filestore wbthrottle btrfs ios start flusher = 10
        filestore wbthrottle btrfs ios hard limit = 20
        filestore wbthrottle btrfs inodes hard limit = 30
        osd copyfrom max chunk = 524288
        bluestore fsck on mount = true
        bluestore block create = true
    bluestore block db path = /var/ws/ceph-12.2.10/build/dev/osd$id/block.db.file
        bluestore block db size = 67108864
        bluestore block db create = true
    bluestore block wal path = /var/ws/ceph-12.2.10/build/dev/osd$id/block.wal.file
        bluestore block wal size = 1048576000
        bluestore block wal create = true

        debug ms = 1
        debug osd = 25
        debug objecter = 20
        debug monc = 20
        debug mgrc = 20
        debug journal = 20
        debug filestore = 20
        debug bluestore = 30
        debug bluefs = 20
        debug rocksdb = 10
        debug bdev = 20
        debug rgw = 20
    debug reserver = 10
        debug objclass = 20



[mon]
        mgr initial modules = restful status dashboard balancer
        mon pg warn min per osd = 3
        mon osd allow primary affinity = true
        mon reweight min pgs per osd = 4
        mon osd prime pg temp = true
        crushtool = /var/ws/ceph-12.2.10/build/bin/crushtool
        mon allow pool delete = true

        log file = /var/ws/ceph-12.2.10/build/out/$name.log
        admin socket = /tmp/ceph-asok.ZlA7Lh/$name.asok
        chdir = ""
        pid file = /var/ws/ceph-12.2.10/build/out/$name.pid
        heartbeat file = /var/ws/ceph-12.2.10/build/out/$name.heartbeat


        debug mon = 20
        debug paxos = 20
        debug auth = 20
    debug mgrc = 20
        debug ms = 1

        mon cluster log file = /var/ws/ceph-12.2.10/build/out/cluster.mon.$id.log
[global]

[mon.a]
        host = localhost
        mon data = /var/ws/ceph-12.2.10/build/dev/mon.a
        mon addr = 192.168.12.200:40385
[mon.b]
        host = localhost
        mon data = /var/ws/ceph-12.2.10/build/dev/mon.b
        mon addr = 192.168.12.200:40386
[mon.c]
        host = localhost
        mon data = /var/ws/ceph-12.2.10/build/dev/mon.c
        mon addr = 192.168.12.200:40387
[mgr.x]
        host = localhost
[osd.0]
        host = localhost
[osd.1]
        host = localhost
[osd.2]
        host = localhost
[mds.a]
        host = localhost
[mds.b]
        host = localhost
[mds.c]
        host = localhost
  • 日志文件
    日志文件都保存在 build/out/下面,我们借助日志来分析我们所进行的实验原理或者分析问题。

环境创建好了之后你就可以进行自己的实验项目了,这个只是最简单的集群,我们还可以使用vstart来测试multimds, bluesotre,目录分片等功能

停止环境

[root@localhost build]# sh ../src/stop.sh --
usage: ../src/stop.sh [all] [mon] [mds] [osd] [rgw]

根据上面的usage 运行一下上面的脚本就可以了。

你可能感兴趣的:(Ceph vstart 虚拟环境使用)