ceph常用运维技巧总结2

集群缩容

1.如果已经有ceph集群在运行,首先需要将集群下线。测试环境下线方法:关闭osd、mon、mds、radosgw这些进程。
    删除节点上的osd(此方法也可以是缩减集群的机器)(依次把一个 OSD 移出集群 CRUSH 图、删除认证密钥、删除 OSD 图条目、删除 ceph.conf 条目。如果主机有多个硬盘,每个硬盘对应的 OSD 都得重复此步骤。)
    ceph osd out {osd-num} 把 OSD 踢出集群后,它可能仍在运行,就是说其状态为 up 且 out 。删除前要先停止 OSD 进程。
    /etc/init.d/ceph stop osd.{osd-num}停止 OSD 后,状态变为 down 。
    ceph osd crush remove osd.{osd-num} 删除 CRUSH 图的对应 OSD 条目,它就不再接收数据了。你也可以反编译 CRUSH 图、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH 图里,而且你想删除主机),重编译 CRUSH 图并应用它。
    ceph auth del osd.{osd-num} 删除 OSD 认证密钥
    ceph osd rm osd.{osd-num}删除 OSD
    ceph osd crush remove `hostname -s`  在crushMap中删除主机名,这个命令在这个主机下的所有的osd都删除的时候会生效。如果还有没有移除的不会生效。  

----删除主机上的所有的osd----
for id in 12 13 14 15 16 17 18 19 20 21 22 23
do 
    ceph osd out osd.$id
    /etc/init.d/ceph stop osd.$id
    ceph osd crush remove osd.$id
    ceph auth del osd.$id
    ceph osd rm osd.$id
     umount /var/lib/ceph/osd/ceph-$id
done
ceph osd crush remove `hostname -s`

monitor下线

删除mon进程:Mon删除
从健康的集群中删除
1、  service ceph –a stop mon.{mon-id} 停止监视器
2、  ceph mon remove {mon-id}从集群删除监视器
3、  从ceph.conf中删除
从不健康的集群中删除
1、  ceph mon dump
2、  service ceph stop mon
3、  ceph-mon –i {mon-id} --extract-monmap {mappath}
4、  monmaptool {mappath}  -rm {mon-id}
5、  ceph-mon –I {mon-id} –inject-monmap {monpath}

清除集群

清除集群中的ceph保证有一个干净的ceph环境
rm -rf /etc/ceph/*.keyring
rm -rf /etc/ceph/*.conf
rm -rf /var/log/ceph/*
rm -rf /var/lib/ceph/{bootstrap-mds,bootstrap-osd,mds,mon,osd}/*再删除osd目录时可能会报设备忙,因为该目录mount到了一个设备上,此时是删除不掉的。需要先umount掉相关的磁盘 umount /var/lib/ceph/osd/ceph-2
ceph auth list #检查keyring被清除
kill -9 $pid_osd $pid_mds $pid_mon #杀死相关进程   看看每台主机上还有那些进程没有删掉,进行删除。
----umount主机上所有的osd连接的硬盘-----
for id in 104 280 521 698 926 1086
do 
    umount /var/lib/ceph/osd/ceph-$id
done

机器上有ceph, 删除的时候可能删不全,安装新ceph的时候会报一些错误, 可以使用下面的命令全清除掉
yum remove ceph ceph-common ceph-devel librados2 libcephfs1 python-ceph librbd1 ceph-test  libcephfs_jni1 libcephfs_jni1 libradosstriper1  librbd1 ceph-radosgw  ceph-libs-compat cephfs-java  libcephfs1 rbd-fuse rbd-fuse rest-bench -y

搭建ceph集群

1.完全手动搭建一个ceph集群
    准备/etc/hosts  包含所有的集群。

    规划网络,分为public_network 和 cluster_network

    增加ceph的yum repo
    编辑文件/etc/yum.repos.d/ceph.repo
    [ceph-updates]
    gpgcheck=0
    enabled=1
    name=Letv Cloud's Ceph packages
    priority=1
    baseurl=http://IP/ceph/el6/update/
    [letv-ceph]
    gpgcheck=0
    enabled=1
    name=Letv Cloud's Ceph packages
    priority=1
    baseurl=http://IP/ceph/el6/update/

    配置ntp
    就算是配置好了ntp服务,经过长时间运行,系统也可能出现时钟skew的情况,此时重启ntp服务即可

    增加新用户cephadmin
    ssh root@ceph-server
    useradd -d /home/cephadmin -m cephadmin
    passwd cephadmin

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

    配置用户cephadmin ssh无密码登陆
    打开防火墙
    端口 6789 用于monitor
    端口 6800:7100 用于osd

    禁用SELINUX
    sudo setenforce 0

    ##所有节点安装ceph和客户端工具
    yum install ceph striprados

2.ceph-deploy部署 
选择一个部署机进行ceph-deploy部署。部署机器需要能够ssh免密码连接所有的部署机器。
----------ceph-deploy安装monitor节点-----------------
    yum install ceph-deploy

    开始配置ceph.conf
    su - cephadmin
    mkdir mycluster
    此后所有操作都用cephadmin用户在mycluster下进行

    cd mycluster
    ceph-deploy new 初始moniter节点{ test-98 test-95 test-55 }
    此时会在当前目录下自动创建ceph.conf  ceph.log   ceph.mon.keyring(为此集群创建密钥环、并生成监视器密钥)三个文件

    修改ceph.conf文件
    如果确定osd的文件系统是xfs, filestore xattr use omap 为false. 同时filestore journal writeahead为true

    如果使用自定义的crushmap, 设置osd crush update on start = false

    如果使用osd-domain, 设置osd crush chooseleaf type = {osd-domain-num}

    [global]
    auth service required = cephx
    filestore xattr use omap = true
    auth client required = cephx
    auth cluster required = cephx
    mon host = 10.18.20.24,10.82.20.78,10.82.20.77
    mon initial members = <初始moniter节点>
    fsid = ee4ea70c-093f-4797-8d3d-871c0aacc92b
    osd pool default size = 3
    osd pool default min size = 2
    osd pool default pg num = 128
    osd pool default pgp num = 128
    public network = x.x.x.x/x
    cluster network = x.x.x.x/x

    [mon]
    mon compact on start = true

    [osd]
    osd max backfills = 1
    osd backfill scan min = 16
    osd backfill scan max = 256
    filestore op threads = 4
    osd recovery max active = 1
    osd recovery max chunk = 32M
    osd recovery threads = 1
    journal max write bytes = 32M
    journal queue max bytes = 32M
    mon osd down out interval  = 900
    osd heartbeat interval = 180
    osd heartbeat grace = 360
    mon_osd_min_down_reporters = 6
    osd_heartbeat_use_min_delay_socket = True

    安装monitor节点
    ceph-deploy mon create-initial   此时目录下会生成ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.bootstrap-rgw.keyring  ceph.client.admin.keyring  ceph.conf  ceph.log  ceph.mon.keyring

    推送admin keyring到所有节点
    sudo chmod +r ./ceph.client.admin.keyring
    ceph-deploy admin <所有节点>
    保留mycluster文件架,为以后自动添加monitor节点准备

    检查
    ceph -s
    状态是HEALTH_ERR,无osd,mon节点都已经加入

增加monitor节点

---------------------手动增加monitor节点--------------------------
增加 Monitor(手动)
1、在目标节点上,新建 mon 的默认目录。{mon-id} 一般取为节点的 hostname 。
ssh {new-mon-host}
sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
2、创建一个临时目录(和第 1 步中的目录不同,添加 mon 完毕后需要删除该临时目录),来存放新增 mon 所需的各种文件,
mkdir {tmp}
3、获取 mon 的 keyring 文件,保存在临时目录下。
ceph auth get mon. -o {tmp}/{key-filename}
4、获取集群的 mon map 并保存到临时目录下。
ceph mon getmap -o {tmp}/{map-filename}
5、格式化在第 1 步中建立的 mon 数据目录。需要指定 mon map 文件的路径(获取法定人数的信息和集群的 fsid )和 keyring 文件的路径。
sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
6、启动节点上的 mon 进程,它会自动加入集群。守护进程需要知道绑定到哪个 IP 地址,可以通过 --public-addr {ip:port} 选择指定,或在 ceph.conf 文件中进行配置 mon addr。
ceph-mon -i {mon-id} --public-addr {ip:port}
---------------------手动删除monitor节点-------------------------
删除 Monitor(手动)

当你想要删除一个 mon 时,需要考虑删除后剩余的 mon 个数是否能够达到法定人数。
1、停止 mon 进程。
stop ceph-mon id={mon-id}
2、从集群中删除 monitor。
ceph mon remove {mon-id}
3、从 ceph.conf 中移除 mon 的入口部分(如果有)。

---------------------ceph-deploy在集群中删除或者添加一个monitor节点---------
a.移除ceph.conf中的monitor节点
b.将ceph.conf推送到各个节点 ceph-deploy  --overwrite-conf  config  push  ceph1  ceph2  
c.删除monitor   ceph-deploy  mon  destroy  ceph1

a.添加ceph.conf中的monitor中的节点
b.将ceph.conf推送到各个节点 ceph-deploy  --overwrite-conf  config  push  ceph1  ceph2   
c.增加一个monitor节点 ceph-deploy  --overwrite-conf  mon  create  ceph1

当添加或删除Monitor后,查看选举状态
ceph  quorum_ status  --format  json-pretty

安装OSD节点

---------------------手动安装OSD节点--------------------------    
    手动安装OSD节点
    检查硬盘情况
    megacli64 检查Raid卡状态,确保是Cached, WriteBack, No Cache if no BBU
    yum install disktest 测试硬盘性能

    所有osd节点用手动安装的方式, 使用root用户

    创建osd号
    ceph osd create
    返回一个数字,这个数字就是osd的唯一号,记录为{osd-number}
    ceph osd tree
    检查出现osd.0,状态是down.
    准备ceph osd文件夹
    mkdir /var/lib/ceph/osd/ceph-{osd-number}
    #如果是普通硬盘
    mkfs -t xfs -i size=2048 /dev/disk
    #如果是RAID0
    mkfs -t xfs -i size=2048 -d su=64k -d sw=2 /dev/disk
    mount -o noatime,nodiratime,inode64 /dev/disk /var/lib/ceph/osd/ceph-{osd-number}
    在文件夹内建立osd keyring等数据

    ceph-osd -i {osd-num} --mkfs --mkkey
    检查文件夹/var/lib/ceph/osd/ceph-{osd-number}内容, 并建立sysvinit

    touch  /var/lib/ceph/osd/ceph-{osd-number}/sysvinit
    添加osd权限

    ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring   
    检查权限是否已经添加

    ceph auth list
    加入osd,权值1代表1T,所有如果是500G硬盘,就为0.5

    ceph osd crush add osd.{osd-num} {weight} root=default host={机器名}
    检查osd列表

    ceph osd tree
    启动ceph osd

    /etc/init.d/ceph start osd
    检查是否加入集群

    ceph osd tree
    ceph -s
-------------------------ceph-deply快速搭建osd节点-------------------------
ceph-deploy osd --zap-disk create test-98:/dev/sdb  test-98:/dev/sdc  test-95:/dev/sdb test-95:/dev/sdc   test-55:/dev/sdb  test-55:/dev/sdc
--zap-disk 擦除分区
#如果使用的是目录而不是磁盘的话:
ceph-deploy osd prepare osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd activate osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd create --zap-disk bj-tdxy-ceph-144-128:/dev/sdb %s:/dev/sdc %s:/dev/sdd %s:/dev/sde %s:/dev/sdf
------------------增加 OSD( ceph-deploy )-------------------------------

还可以通过 ceph-deploy 工具很方便的增加 OSD。
1、登入 ceph-deploy 工具所在的 Ceph admin 节点,进入工作目录。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
2、列举磁盘。
执行下列命令列举一节点上的磁盘:
ceph-deploy disk list {node-name [node-name]...}
3、格式化磁盘。
用下列命令格式化(删除分区表)磁盘,以用于 Ceph :
ceph-deploy disk zap {osd-server-name}:{disk-name}
ceph-deploy disk zap osdserver1:sdb
重要: 这会删除磁盘上的所有数据。
4、准备 OSD。
ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]
ceph-deploy osd prepare osdserver1:sdb:/dev/ssd
ceph-deploy osd prepare osdserver1:sdc:/dev/ssd
prepare 命令只准备 OSD 。在大多数操作系统中,硬盘分区创建后,不用 activate 命令也会自动执行 activate 阶段(通过 Ceph 的 udev 规则)。
前例假定一个硬盘只会用于一个 OSD 守护进程,以及一个到 SSD 日志分区的路径。我们建议把日志存储于另外的驱动器以最优化性能;你也可以指定一单独的驱动器用于日志(也许比较昂贵)、或者把日志放到 OSD 数据盘(不建议,因为它有损性能)。前例中我们把日志存储于分好区的固态硬盘。
注意: 在一个节点运行多个 OSD 守护进程、且多个 OSD 守护进程共享一个日志分区时,你应该考虑整个节点的最小 CRUSH 故障域,因为如果这个 SSD 坏了,所有用其做日志的 OSD 守护进程也会失效。
5、准备好 OSD 后,可以用下列命令激活它。
ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]
ceph-deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1
ceph-deploy osd activate osdserver1:/dev/sdc1:/dev/ssd2
activate 命令会让 OSD 进入 up 且 in 状态。该命令使用的分区路径是前面 prepare 命令创建的。

radosgw搭建

-------------------------radosgw搭建-------------------------------------------
yum  install  -y  ceph-radosgw  radosgw-agent  在相关节点上安装对象网管
a.  创建keyring
ceph-authtool  --create-keyring  /etc/ceph/ceph.client.radosgw.keyring
chmod  +r  /etc/ceph/ceph.client.radosgw.keyring
b.  创建key
ceph-authtool  /etc/ceph/ceph.client.radosgw.keyring  \
  -n  client.radosgw.gateway --gen-key
c.  Add capabilities to Key
ceph-authtool  -n  client.radosgw.gateway  --cap  osd  'allow rwx' \
  --cap  mon  'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
d.  Add the key to Ceph Storage Cluster
ceph  -k  /etc/ceph/ceph.client.admin.keyring  auth  add  client.radosgw.gateway \
  -i  /etc/ceph/ceph.client.radosgw.keyring
如果其他节点需要ceph.client.radosgw.keyring,可以推送到/etc/ceph目录下
e.  Add gateway configuration to /etc/ceph/ceph.conf
[client.radosgw.gateway]
host = ceph1
keyring = /etc/ceph/ceph.client.radosgw.keyring
rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file = /var/log/radosgw/client.radosgw.gateway.log
√ 启动radosgw服务(默认监听7480端口)
#/usr/bin/radosgw  -c  /etc/ceph/ceph.conf  -n  client.radosgw.gateway
√ 创建用户
#sudo radosgw-admin user create --uid=ningyougang --display-name=ningyougang --email=ningyougang@navercorp.com

------------------------------------------部署rados gateway---------------------------------------------------------
注意,必须在集群部署成功之后才能继续部署rados gateway. 注意,一下操作都是在ceph的存储节点上进行的,即必须要在跑ceph进程的节点上运行。

1.安装ceph-radosgw
yum install ceph-radosgw -y
2.登陆到ceph存储节点上,创建rados gateway需要的pool.
zone=default
ceph osd pool create ${zone}.rgw.data.root 32 32
ceph osd pool create .rgw.root 32 32
ceph osd pool create ${zone}.rgw.control 32 32
ceph osd pool create ${zone}.rgw.gc 16 16
ceph osd pool create ${zone}.rgw.buckets.data 1024 1024
ceph osd pool create ${zone}.rgw.buckets.index 128 128
ceph osd pool create ${zone}.rgw.buckets.non-ec 16 16
ceph osd pool create ${zone}.rgw.log 32 32
ceph osd pool create ${zone}.rgw.intent-log 16 16
ceph osd pool create ${zone}.rgw.usage 16 16
ceph osd pool create ${zone}.rgw.users.keys 32 32
ceph osd pool create ${zone}.rgw.users.email 16 16
ceph osd pool create ${zone}.rgw.users.uid 32 32
ceph osd pool create ${zone}.rgw.meta 16 16

3.创建keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
sudo chmod +r /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key
sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring
4.追加rados gateway配置到/etc/ceph/ceph.conf
把以下内容追加到/etc/ceph/ceph.conf的最后,其中最后一行的host为本地的hostname。

[client.radosgw.gateway]
rgw dns name = mytests3.com
keyring = /etc/ceph/ceph.client.radosgw.keyring
log file = /var/log/radosgw/client.radosgw.gateway.log
rgw_thread_pool_size = 2000
rgw_num_async_rados_threads = 32
rgw frontends = civetweb port=80 request_timeout_ms=90000 access_log_file=/var/log/radosgw/access.log  这里是没有用nginx作为负载均衡器转发,所以端口还是80端口。
rgw_override_bucket_index_max_shards = 16
host = $(hostname -s)

5.创建日志目录
mkdir -p /var/log/radosgw
6.重启rados gateway
systemctl restart ceph-radosgw@radosgw.gateway
7.查看是否存在/usr/bin/radosgw进程。
ps aux|grep radosgw
如果不存在,说明有问题,请查看/var/log/radosgw/client.radosgw.gateway.log日志.

8.验证80端口是否能正常工作
curl localhost
是否能够返回一个xml:

<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
如果能,说明gateway已经部署成功了.

9.创建用户和ak/sk
运行一下命令之后,就能得到一组ak/sk

radosgw-admin user create --uid=leengine --display-name="leengine"
ak/sk以为keys下,输出形如:

    "keys": [
        {
            "user": "leengine",
            "access_key": "aaasda",
            "secret_key": "sgbweogwe"
        }
    ],
这个key之后可以通过一下命令行查询:

radosgw-admin user info --uid=leengine
10.在其他节点上部署rados gateway
只需将已经部署好的节点的/etc/ceph/ceph.client.radosgw.keyring拷贝到新的节点上,并参照第4步追加新节点的/etc/ceph/ceph.conf. 不需要在其他节点上进行其他操作。
----------------------------------nginx负载均衡机-----------------------------------------------------------------------
------------------------------------dnsmasq------------------------------------------------------------------------------------
yum install dnsmasq 
vim /etc/dnsmasq.conf

conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
resolv-file=/etc/resolv.dnsmasq.conf  //这里面配置的是公网dns的配置 8.8.8.8
conf-dir=/etc/dnsmasq.d               //这个里面配置的是用户配置的本地生效的dns配置,或者在下面这样配置也是可以的。
listen-address=127.0.0.1
#address=/.s3.lecloud.com/127.0.0.1
address=/.s3bjtest.lecloud.com/127.0.0.1
address=/.s3-bj.lecloud.com/127.0.0.1
address=/.s3-gd.lecloud.com/10.116.5.134
address=/.replicate.com/10.116.5.135
address=/.mytests3.com/10.110.12.219 
address=/mytests3.com/10.110.12.219    配置一下域名和对应的IP地址

systemctl restart  dnsmasq.service       开启dnsmasq服务
---------------------------------s3cmd搭建---------------------------------------------------------------
yum install s3cmd 
修改~/.s3cfg
[default]
access_key = ss
secret_key = ss
default_mime_type = binary/octet-stream
enable_multipart = True
encoding = UTF-8
host_base = mytests3.com
host_bucket = %(bucket)s.mytests3.com
use_https = False
put_continue = True
multipart_chunk_size_mb = 128
recursive = True
signature_v2 = True

s3md 直接发80端口的radosgw上。
测试命令: s3cmd mb s3://test01 -d (debug模式) -c (指定配置文件)
------------------------------------------------------------------------------------------------

ceph运维操作

ceph运维操作:

1.ceph -s  集群整体当前状态情况查看
2.ceph -w  实时状态查看
3.ceph df  ceph存储空间查看
4.ceph osd tree  查看osd状态
5.ceph osd dump  查看pool设置的信息和osd设置信息和各种状态
--------pool相关操作-------
6.ceph osd lspools  查看pools
7.ceph osd pool create images 100   创建一个image名称的pool,包涵100个pgnum  (pgsnum = (osd数量 * 100) / 副本数 向上对齐)
8.ceph  osd  pool  set  images  size  3    #设置pool:images的副本数为3
  ceph osd pool set rbd pg_num 2048
  ceph osd pool set rbd  pgp_num 2048  设置pool的pg数目
9.ceph  osd  pool  set-quota  images  max_objects  10000   #设置pool最大对象数
10.ceph  osd  pool  delete  images  images  --yes-i-really-really-mean-it  删除images pool
11.ceph osd pool set {rbdpool} min_size 1  修改ceph数据的最小副本数和副本数
12.ceph osd pool set {rbdpool} size 2
13.ceph osd pool set {rbdpool} target_max_bytes 100000000000000  设置池的最大的存储空间为100T
14.ceph osd pool set-quota {rbdpool} max_objects 10000  为集群pool设置配额,达到预警前集群会告警,达到上限之后就不在写入数据
15.ceph osd pool rename {current——pool-name} {new-pool-name} 重命名pool
16.rados df 展示pool统计
17.ceph osd pool get {pool-name} {key} 获取pool相关的参数值
18.ceph osd dump |grep '参数'
19.要设置一个存储池的选项值,执行命令:
ceph osd pool set {pool-name} {key} {value}
常用选项介绍:
size:设置存储池中的对象副本数,详情参见设置对象副本数。仅适用于副本存储池。
min_size:设置 I/O 需要的最小副本数,详情参见设置对象副本数。仅适用于副本存储池。
pg_num:计算数据分布时的有效 PG 数。只能大于当前 PG 数。
pgp_num:计算数据分布时使用的有效 PGP 数量。小于等于存储池的 PG 数。
crush_ruleset:
hashpspool:给指定存储池设置/取消 HASHPSPOOL 标志。
target_max_bytes:达到 max_bytes 阀值时会触发 Ceph 冲洗或驱逐对象。
target_max_objects:达到 max_objects 阀值时会触发 Ceph 冲洗或驱逐对象。
scrub_min_interval:在负载低时,洗刷存储池的最小间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_min_interval 。
scrub_max_interval:不管集群负载如何,都要洗刷存储池的最大间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_max_interval 。
deep_scrub_interval:“深度”洗刷存储池的间隔秒数。如果是 0 ,就按照配置文件里的 osd_deep_scrub_interval 。

9.10 可调选项
1、调整现有集群上的可调选项。注意,这可能会导致一些数据迁移(可能有 10% 之多)。这是推荐的办法,但是在生产集群上要注意此调整对性能带来的影响。此命令可启用较优可调选项:
ceph osd crush tunables optimal(调整集群参数到最优的状态)
如果切换得不太顺利(如负载太高)且切换才不久,或者有客户端兼容问题(较老的 cephfs 内核驱动或 rbd 客户端、或早于 bobtail 的 librados 客户端),你可以这样切回:
ceph osd crush tunables legacy(调整集群的参数到默认的状态)
2、不对 CRUSH 做任何更改也能消除报警,把下列配置加入 ceph.conf 的 [mon] 段下:
mon warn on legacy crush tunables = false
为使变更生效需重启所有监视器,或者执行下列命令:
ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables

--------对象存储-----------
11.rados  put  test-object-1  a.txt  --pool=data 创建对象
12.rados -p   data ls 查看pool中的对象
13.ceph osd map data  test-object-1 确定对象的存储的位置
14.rados rm test-object-1 --pool=data 删除对象
15.rados ls -p poolname  列出poolname中所有的objects


---------查看crushMap--------
16.ceph osd getcrushmap -o crush.out
17.crushtool -d crush.out -o crush.txt
18.ceph osd crush dump
19.ceph osd crush rule dump   //将rule结果调出来

ceph osd 维护模式
ceph osd set noout
/etc/init.d/ceph stop osd.{osd-num}
ceph osd crush rule rm {rule name}   从crush中删除一个rule

----------ceph injectargs 维护模式--------
#How often an Ceph OSD Daemon pings its peers (in seconds).
#默认为6
ceph tell osd.* injectargs '--osd-heartbeat-interval 10'

#The elapsed time when a Ceph OSD Daemon hasn’t shown a heartbeat that the Ceph Storage Cluster considers it down.
#默认为20
ceph tell osd.* injectargs '--osd-heartbeat-grace 30'
-----------维护完成------------------------
/etc/init.d/ceph start osd.{osd-num}
ceph osd unset noout

------------radosgw运维--------------------(ceph底层是没有权限控制的,权限控制在上层的radosgw进行提供,如果是s3cmd的话只能查看自己的相关信息)
创建用户
#sudo  radosgw-admin  user  create  --uid=newtouchstep  --display-name=newtouchstep --email=jingyi.liu@newtouch.cn
修改用户
#sudo  radosgw-admin user  modify  --uid=newtouchstep  --display-name=newtouchstep --email=jingyi.liu@newtouch.cn
查看用户信息
#sudo  radosgw-admin  user  info  --uid=newtouchone
删除用户
#sudo  radosgw-admin    user  rm  --uid=newtouchone  #没有数据才可以删除
#sudo  radosgw-admin   user  rm  --uid=newtouchone   --purge-data #删除用户删除数据
暂停用户使用
#sudo  radosgw-admin   user  suspend   --uid=newtouchone
用户生效
#sudo  radosgw-admin  user  enable   --uid=newtouchone
用户检查
#sudo  radosgw-admin    user  check   --uid=newtouchone
查询bucket
#sudo  radosgw-admin  bucket  list    查询所有的bucket 信息
查询指定bucket的对象
#sudo  radosgw-admin  bucket  list  --bucket=images
统计bucket信息
#sudo  radosgw-admin  bucket  stats     #查询所有bucket统计信息
#sudo  radosgw-admin  bucket  stats  --bucket=images  #查询指定bucket统计信息
删除bucket
删除pucket(但是不删除object,加上bucket后恢复)
#sudo  radosgw-admin  bucket  rm  --bucket=images
删除bucket后同时删除object
#sudo  radosgw-admin  bucket  rm  --bucket=images   --purge-objects
检查bucket
#sudo  radosgw-admin  bucket  check
删除object
#sudo  radosgw-admin  object  rm  --bucket=attach  --object=fanbingbing.jpg
为bucket设置配额
#sudo  radosgw-admin  quota  set  --max-objects=200   --max-size=10000000000 --quota-scope=bucket  --bucket=images
#sudo  radosgw-admin  quota  enable   --quota-scope=bucket   --bucket=images  
#sudo  radosgw-admin  quota  disable   --quota-scope=bucket  --bucket=images
为帐号设置配额
#sudo  radosgw-admin  quota  set  --max-objects=2  --max-size=100000  --quota-scope=user --uid=newtouchstep
#sudo  radosgw-admin  quota  enable   --quota-scope=user  --uid=newtouchstep
#sudo  radosgw-admin  quota  disable   --quota-scope=user  --uid=newtouchstep

radosgw-admin metadata get bucket:maoweitest02  查看bucket的详细信息 包括ID号,存储的位置,创建的时间,拥有者

#添加用户权限,允许其读写users权限
radosgw-admin caps add  --uid=admin --caps="users=*"
radosgw-admin caps add --uid=admin --caps="usage=read,write"

---------------/etc/init.d/ceph的使用(关闭这个集群上的所有的ceph相关进程,包括mon。mds.osd 等进程)-------------
/etc/init.d/ceph start 、stop、restart   单节点启动、关闭、重启ceph集群
/etc/init.d/ceph -a start 、stop、 restart  所有节点启动、关闭、重启ceph集群
service ceph start 、stop、restart   把ceph当做service服务
service ceph start -a start、stop、restart
/etc/init.d/ceph start osd.2
service ceph start osd.2

-----------查看monitor的状态-------------------------------
ceph mon stat   查看mon的状态信息
ceph mon dump   查看mon的映射信息
ceph quorum_status    检查mon的选举状态
ceph mon remove test-55  删除一个mon节点
ceph quorum_status -f json-pretty  产看monitor的选举情况

-----------osd相关操作-------------------------------------
ceph osd df  详细列出集群每块磁盘的使用情况,包括大小、权重多少空间率等 
ceph osd down 0  把osd.0给down掉,主要是标记为down
ceph osd  in 0   把osd.0标记为in
ceph osd rm 0 在集群中删除一个osd硬盘
ceph osd crush rm  osd.0 在集群中删除一个osd硬盘crush map
ceph osd crush set osd.1  0.5 host=node241 设置osd crush的权重为0.5
ceph osd out osd.3  此时osd.3的reweight变为0,此时不在此节点上分配数据,但是osd进程设备还在
ceph osd in osd.3   将逐出的osd加入到集群中
ceph osd pause      暂停整个集群的osd,此时集群不能接受数据
ceph osd unpause     再次开启接受数据
ceph osd set nodown  设置标志flags,不允许关闭osd,解决网络不稳定,osd状态不断切换的问题
ceph osd unset nodown 取消设置
ceph osd lost {id} [--yes-i-really-mean-it]  把OSD 标记为丢失,有可能导致永久性数据丢失,慎用!

------------rados命令相关操作--------------------------------
rados是和ceph的对象存储集群进行通信的方式
rados lspools <====>ceph osd pool ls 查看集群里面有多少个pool
rados mkpool test_pool 创建一个pool
rados create test_object -p test_pool 创建一个对象
rados -p test_pool ls 查看test_pool下所有的对象文件
rados rm test_object  -p test_pool 删除一个pool中指定的对象
rados rmpool test_pool test_pool -yes-i-really-really-mean-it 删除pool池和它中的数据
rados -p test_pool put test_object xx.txt上传一个对象到test_pool
rados bench 600 write  rand -t 100 -b 4096 -p test_pool  使用rados进行 性能测试
ceph --admin-daemon /var/run/ceph/ceph-client.radosgw.gateway.asok config set debug_rgw 20/20  修改radosgw的日志等级

------------pg相关操作---------------------------------------
ceph pg dump <===> ceph pg ls 查看pg组的映射关系
ceph pg map 2.06 查看一个pg的map映射
ceph pg stat  查看pg的状态
ceph pg 2.06 query 查看一个pg的详细信息
ceph pg scrub {pg-id} 洗刷一个pg组
ceph pg dump_stuck unclean  查看pg中的各种pg状态
ceph pg dump_stuck inactive
ceph pg dump_stuck stable 
ceph pg dump --format plain (纯文本)显示一个集群中所有的pg统计
             --format json  (json格式)
要查询某个 PG,用下列命令:
ceph pg {poolnum}.{pg-id} query
为找出卡住的归置组,执行:
ceph pg dump_stuck [unclean|inactive|stale|undersized|degraded]

ceph tell mon.FOO injectargs --debug_mon 10/10   设置mon的日志等级
查看mon的配置文件信息
ceph daemon mon.FOO config show
or:
ceph daemon mon.FOO config get 'OPTION_NAME'

其他常用命令

-----------------------------------------------------------------------------
more /etc/redhat-release   查看Linux系统版本
uname -a  查看Linux内核版本
ceph -v   查看ceph版本
ceph-deploy  --version  查看ceph-deploy版本
ceph mon_status  查看monitor的状态
lsblk  查看osd磁盘挂载情况
ceph df 检查集群的数据使用量及其在存储池内的分布情况
#查看ceph默认的配置文件的设置内容:
ceph --show-config

centos7命令模式

centos7命令模式:
1.停止某个节点上的某个指定的守候进程:启动某个节点上某个指定的守候进程:
systemctl stop/restart/start ceph-osd@{id}
systemctl stop/restart/start ceph-mon@{hostname}[.service]
systemctl stop/restart/start ceph-mds@{hostname}[.service]
2.按类型启动某个节点上某一类守护进程:
systemctl start/stop/restart ceph-osd.target
systemctl start/stop/restart ceph-mon.target
systemctl start/stop/restart ceph-mds.target
3.停止某一个节点上的所有的守护进程:
systemctl start/stop/restart   ceph\*.service ceph\*.target
systemctl start ceph.target

4.列出本节点中所有的ceph进程,为什么能用,因为在crushmap中有啊!!!!所以针对的是运维而不是搭建
systemctl status ceph\*.service ceph\*.target
5.启动/停止某一ceph节点上所有的守候进程
systemctl start ceph.target
systemctl stop ceph\*.service ceph\*.target

ceph auth list  查看所有的auth
5.关闭一个ceph集群:
首先关闭每个节点上的osd,然后关闭mon

#查看当前osd的配置文件信息
 ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | grep osd_journal

--------------------------------------------------------------------------
如果你的配置文件或 keyring 文件不在默认路径下,你得在命令中指定:
这个就解决了一个跳板机维护多个ceph集群的功能,但是操作相对来说比较麻烦:
ceph -c /path/to/conf -k /path/to/keyring health

--------------------------------------------------------------------------
2.10 使用管理套接字
Ceph 管理套接字允许你通过套接字接口查询守护进程,它们默认存在于 /var/run/ceph 下。要通过管理套接字访问某个守护进程,先登录它所在的主机、再执行下列命令:
ceph daemon {daemon-name}
ceph daemon {path-to-socket-file}
比如,这是下面这两种用法是等价的:
ceph daemon osd.0 foo
ceph daemon /var/run/ceph/ceph-osd.0.asok foo
用下列命令查看可用的管理套接字命令:
ceph daemon {daemon-name} help
管理套接字命令允许你在运行时查看和修改配置。
另外,你可以在运行时直接修改配置选项(也就是说管理套接字会绕过 Mon,不要求你直接登录宿主主机,不像 ceph {daemon-type} tell {id} injectargs 会依赖监视器)。

写入4M的object数据:
--> first 4M osd.primary journal --> osd.primary --> osd.secondary journal --> osd.secondary --> second 4M osd.primary journal --> osd.primary --> and so on...

[mon.a]
        host = host01
        addr = 10.0.0.1:6789
[mon.b]
        host = host02
        addr = 10.0.0.2:6789
[mon.c]
        host = host03
        addr = 10.0.0.3:6789

ceph monitor 的选举展示:
 ceph quorum_status --format json-pretty
----------------------------------------------------------------------------------
rados  ls -p  rbd  查看一个pool下面的对象
rados -p test rm my-object  删除一个对象
rados mkpool test  创建一个pool
rados rmpool test test  --yes-i-really-really-mean-it 删除一个pool
rados lspools
ceph osd lspools
rados -p test put my-object  data/file   上传一个数据到对象my-object
rados -p test stat my-object    查看对象状态
ceph osd map test my-object     查看pool到对象到osd的映射
find /var/lib/ceph/osd/ceph-x/current/  -name  查看存储到osd的数据

--------------------------------------------------------------------------------------
s3cmd setacl --acl-private s3://testpool  设置bucket和object的acl
# 创建s3用户key
radosgw-admin key create --uid='user_id' --key-type=s3 --gen-secret  --gen-access-key
# 创建swift用户key
radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
# 删除s3用户key
radosgw-admin key rm --uid='testuser'  --access-key=9JEB64N3OFDODAZAIZ8H
# 删除swift用户key
radosgw-admin key rm --subuser=testuser:swift --key-type=swift
# 列出所有的用户
radosgw-admin meatadata list user
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页