docker-compose 部署ceph集群

一、ceph集群部署

本文章参考文档:https://blog.csdn.net/hxx688/article/details/103440967

Ceph镜像
这里要注意版本,不要贸然采用最新版, 有些会是存在缺陷, 安装的时候会出现问题, 这里采用的nautilus版本。
版本说明:
在这里插入图片描述
docker pull ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64

调整防火墙端口
# firewall-cmd--zone=public --add-port=6789/tcp –permanent
# firewall-cmd--zone=public --add-port=6800-7100/tcp–permanent
# firewall-cmd–reload
# firewall-cmd--zone=public --list-all
官方参照文档

前置条件
hostnameip
test1192.168.180.45
test2192.168.180.46
test3192.168.180.47


安装 Docker-Compose

创建文件夹为部署ceph做准备

[root@test1 ~]# mkdir -p /home/compose /etc/ceph/ /var/lib/ceph/
[root@test1 ~]# ssh test2 mkdir -p /home/compose /etc/ceph/ /var/lib/ceph/
[root@test1 ~]# ssh test3 mkdir -p /home/compose /etc/ceph/ /var/lib/ceph/

如果启用了SELinux,则运行以下命令, 给文件夹授权, 否则这一步可以跳过

[root@test1 ~]# chcon -Rt svirt_sandbox_file_t /etc/ceph && chcon -Rt svirt_sandbox_file_t /var/lib/ceph
[root@test1 ~]# ssh test2 chcon -Rt svirt_sandbox_file_t /etc/ceph && ssh test2 chcon -Rt svirt_sandbox_file_t /var/lib/ceph
[root@test1 ~]# ssh test3 chcon -Rt svirt_sandbox_file_t /etc/ceph && ssh test3 chcon -Rt svirt_sandbox_file_t /var/lib/ceph

创建文件夹为osd挂载做准备, 挂载文件夹与分区无关,只要是目录就行, 如果不使用挂载分区, 这一步可以跳过

[root@test1 ~]# mkdir -p /mnt/cephfs
[root@test1 ~]# ssh test2 mkdir -p /mnt/cephfs
[root@test1 ~]# ssh test3 mkdir -p /mnt/cephfs

(可以不做)下载docker镜像,并推送到自己的 harbor 私服仓库中, 如果已经实现,这一步可以跳过

# 下载镜像
docker pull ceph/daemon:latest-luminous
# 改镜像名
docker tag ceph/daemon:latest-luminous sinoeyes.io/cephlib/ceph/daemon:latest-luminous
# 登录 harbor
docker login sinoeyes.io -u admin -p Harbor12345
# 推送到 harbor
docker push sinoeyes.io/cephlib/ceph/daemon:latest-luminous

如果是重新安装,需要清空缓存, 否则这一步可以跳过

[root@test1 ~]# rm -rf /etc/ceph/* && rm -rf /var/lib/ceph/*
[root@test1 ~]# ssh test2 rm -rf /etc/ceph/ && ssh test2 rm -rf /var/lib/ceph/*
[root@test1 ~]# ssh test3 rm -rf /etc/ceph/ && ssh test3 rm -rf /var/lib/ceph/*



1 创建compose文件,并在(test2、test3)节点上同样创建

注意事项

  1. MON_IP不要写多个ip,只写所在服务器的IP即可;如果写多个重启docker以后 mon会启动失败
  2. 这个/etc/ceph/ceph.conf文件中的内容所有节点都要要保持一致,不要单独修改内容
cat > /home/compose/docker-compose.yml << eric

version: '3'

services:

  # 部署 Monitor 模块
  ceph-mon:
    # 镜像已经下载到harbor私服
    image: ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64
    network_mode: host
    container_name: ceph-mon
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/:/var/lib/ceph
    environment:
      # 当前服务器的IP, 在不同的服务器部署不要忘记改IP
      MON_IP: 192.168.180.45,192.168.180.46,192.168.180.47
      CEPH_PUBLIC_NETWORK: 192.168.180.1/24
    command: mon


  # 部署 Manager daemon 模块
  ceph-mgr:
    image: ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64
    network_mode: host
    container_name: ceph-mgr
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/:/var/lib/ceph
    command: mgr


  # 部署 OSD 模块
  ceph-osd:
    image: ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64
    network_mode: host
    container_name: ceph-osd
    restart: always
    privileged: true
    # 跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。
    pid: host
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/:/var/lib/ceph
      - /dev/:/dev/
      # 单独指定osd数据空间, 如果不单独指定,默认在/var/lib/ceph目录下
      #-/mnt/cephfs:/var/lib/ceph/osd
    command: osd_directory


  # 部署 MDS 模块 (用来支持 CephFS文件系统存储, 根据实际情况选用,非必须)
  ceph-mds:
    image: ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64
    network_mode: host
    container_name: ceph-mds
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/:/var/lib/ceph
    environment:
      # CEPHFS_CREATE 是为METADATA服务生成文件系统,0表示不自动创建文件系统(推荐),1表示自动创建
      CEPHFS_CREATE: 0
      #CEPHFS_DATA_POOL_PG是数据池的数量,默认为8。
      CEPHFS_METADATA_POOL_PG: 512
      #CEPHFS_METADATA_POOL_PG是元数据池的数量,默认为8。
      CEPHFS_DATA_POOL_PG: 512
    command: mds


#  # 部署 Rados Gateway 模块 (用来支持 对象存储, 根据实际情况选用,非必须)
#  ceph-rgw:
#    image: sinoeyes.io/cephlib/ceph/daemon:latest-luminous
#    network_mode: host
#    container_name: ceph-rgw
#    restart: always
#    volumes:
#      - /etc/localtime:/etc/localtime
#      - /etc/ceph:/etc/ceph
#      - /var/lib/ceph/:/var/lib/ceph
#    command: rgw


#  # 部署 RBD mirror 模块 (用来支持 块存储, 根据实际情况选用,非必须)
#  ceph-rbd:
#    image: sinoeyes.io/cephlib/ceph/daemon:latest-luminous
#    network_mode: host
#    container_name: ceph-rbd
#    restart: always
#    volumes:
#      - /etc/localtime:/etc/localtime
#      - /etc/ceph:/etc/ceph
#      - /var/lib/ceph/:/var/lib/ceph
#    command: rbd_mirror

eric

如果IP跨网段,那么CEPH_PUBLIC_NETWORK必须写上所有网段,否则就会像网上大部分已有教程一样,只指定一个IP和一个网段是无法启动的!


2 先启动 test1
[root@test1 compose]# docker-compose up -d

3 将多个节点组建成集群

如果要增加同一个集群的Monitor,需要将test1服务器上的/etc/ceph//var/lib/ceph/bootstrap-*下的文件,分别复制到test2test3服务器的/etc/ceph//var/lib/ceph/目录下,记得不要保留文件的属主权限。

[root@test1 compose]# scp -r /etc/ceph/* test2:/etc/ceph/ && scp -r /var/lib/ceph/bootstrap-* test2:/var/lib/ceph/
......
[root@test1 compose]# scp -r /etc/ceph/* test3:/etc/ceph/ && scp -r /var/lib/ceph/bootstrap-* test3:/var/lib/ceph/
ceph.client.admin.keyring                                100%  161   116.0KB/s   00:00
ceph.conf                                                100%  235   204.5KB/s   00:00
ceph.mon.keyring                                         100%  690   385.9KB/s   00:00
ceph.keyring                                             100%  113    84.3KB/s   00:00
ceph.keyring                                             100%  113    50.4KB/s   00:00
ceph.keyring                                             100%  113    35.3KB/s   00:00
ceph.keyring                                             100%  113    29.0KB/s   00:00
[root@test1 compose]#

4 启动其它节点机
[root@test1 compose]# ssh test2 docker-compose -f /home/compose/docker-compose.yml up -d
[root@test1 compose]# ssh test3 docker-compose -f /home/compose/docker-compose.yml up -d
5 查看各组件启动是否成功
# 查看 osd 是否加入集群
[root@test1 compose]# docker-compose exec ceph-osd ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.16676 root default
-3       0.05559     host test1
 0   hdd 0.05559         osd.0      up  1.00000 1.00000
-5       0.05559     host test2
 1   hdd 0.05559         osd.1      up  1.00000 1.00000
-7       0.05559     host test3
 2   hdd 0.05559         osd.2      up  1.00000 1.00000
[root@test1 compose]#

其它查看命令

[root@test1 compose]# docker-compose exec ceph-mon ceph -s
  cluster:
    id:     dd864482-6028-4f48-a321-27f9e41c8057
    health: HEALTH_WARN
            too few PGs per OSD (16 < min 30)

  services:
    mon: 3 daemons, quorum app01,test1,test2
    mgr: app01(active), standbys: test1, test2
    mds: cephfs-1/1/1 up  {0=app01=up:active}, 2 up:standby
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   2 pools, 16 pgs
    objects: 21 objects, 2.19KiB
    usage:   88.8GiB used, 82.1GiB / 171GiB avail
    pgs:     16 active+clean

[root@test1 compose]# docker-compose exec ceph-mgr ceph -s
[root@test1 compose]# docker-compose exec ceph-mds ceph -s
[root@test1 compose]# docker-compose exec ceph-rgw ceph -s
[root@test1 compose]# docker-compose exec ceph-rbd ceph -s

6 安装Dashboard管理后台

1、在mgr点执行,开启dashboard功能

docker exec ceph-mgr ceph mgr module enable dashboard

2、创建证书

docker exec ceph-mgr ceph dashboard create-self-signed-cert

3、创建登陆用户与密码:

docker exec ceph-mgr ceph dashboard set-login-credentials admin test

设置用户名为admin, 密码为test。

4、配置外部访问端口

docker exec ceph-mgr ceph config set mgr mgr/dashboard/server_port 18080

5、配置外部访问IP

docker exec ceph-mgr ceph config set mgr mgr/dashboard/server_addr 192.168.180.45

6、关闭https(如果没有证书或内网访问, 可以关闭)

docker exec ceph-mgr ceph config set mgr mgr/dashboard/ssl false

7、重启Mgr DashBoard服务

docker restart ceph-mgr

8、查看Mgr DashBoard服务信息

[root@CENTOS7-1 admin]# docker exec ceph-mgr ceph mgr services
{
   "dashboard": "http://0.0.0.0:18080/"
}

9、管理控制台界面:


使用 K8S 挂载
注意:如果想使用 k8s pv 进行挂载,如下的操作就不需要在做了,k8s pv 配置好以后,pod 启动时会自动挂载



测试 内核方式挂载cephfs

明文挂载

# 获取密钥
[root@test1 compose]# docker-compose exec ceph-mon ceph-authtool --print-key /etc/ceph/ceph.client.admin.keyring
AQAzdARew/d7JRAAbwbgRh9p0z8sXCDVsg61eQ==
[root@test1 ~]#

# 挂载之前
[root@test1 ~]# df -h | grep mnt
[root@test1 ~]#

# 挂载目录
[root@test1 ~]# mount -t ceph 192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/ /mnt/cephfs -o name=admin,secret=AQAzdARew/d7JRAAbwbgRh9p0z8sXCDVsg61eQ==
[root@test1 ~]# 

# 挂载之后
[root@test1 compose]# df -h | grep mnt
192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/   46G     0   46G    0% /mnt/cephfs
[root@test1 compose]#


# 卸载目录
[root@test1 ~]# umount /mnt/cephfs
注意:当你的当前路径为/mnt下,即在挂载文件的里面时,卸载会失败,提示:Dev   is besy.解决办法:退出挂载的目录
    当有别的程序正在访问挂载的文件时,也会提示卸载失败,通过 lsof  /mnt  查看是哪个进程占用了/mnt,kill  -9   $pid  ,然后再卸载
    使用:umount  -l  /mnt      (-l  :  卸载前检查占用该挂载文件的程序并迅速kill掉,以达到快速卸载的目的)
其它节点挂载情况

这里要**注意** 挂载盘的ip地址都是**192.168.180.46:6789**,不是每个节点的IP

[root@test2 ~]# mount -t ceph 192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/ /mnt/cephfs -o name=admin,secret=AQAzdARew/d7JRAAbwbgRh9p0z8sXCDVsg61eQ==
[root@test2 ~]# df -h | grep mnt
192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/   46G     0   46G    0% /mnt/cephfs
[root@test2 ~]#

[root@test3 ~]# mount -t ceph 192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/ /mnt/cephfs -o name=admin,secret=AQAzdARew/d7JRAAbwbgRh9p0z8sXCDVsg61eQ==
[root@test3 ~]# df -h | grep mnt
192.168.180.46:6789,192.168.180.47:6789,192.168.180.48:6789:/   46G     0   46G    0% /mnt/cephfs
[root@test3 ~]#

二、Ceph常用操作

检查集群监控状况

# docker exec ceph-mon ceph health
HEALTH_OK

检查集群的使用情况

[root@app01 ceph]#  docker exec ceph-mon ceph df
GLOBAL:
    SIZE       AVAIL       RAW USED     %RAW USED
    171GiB     82.1GiB      88.8GiB         51.98
POOLS:
    NAME                ID     USED        %USED     MAX AVAIL     OBJECTS
    cephfs_data         1           0B         0       16.1GiB           0
    cephfs_metadata     2      2.19KiB         0       16.1GiB          21

检查OSD状态

[root@app01 ceph]# docker exec ceph-mon ceph  osd stat
3 osds: 3 up, 3 in

或者

# docker exec ceph-mon ceph osd dump
[root@app01 ceph]# docker exec ceph-mon ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.16676 root default
-3       0.05559     host app01
 0   hdd 0.05559         osd.0      up  1.00000 1.00000
-5       0.05559     host test1
 1   hdd 0.05559         osd.1      up  1.00000 1.00000
-7       0.05559     host test2
 2   hdd 0.05559         osd.2      up  1.00000 1.00000

查看PG

[root@app01 ceph]# docker exec ceph-mon ceph  pg dump

[root@app01 ceph]# docker exec ceph-mon ceph  pg stat
16 pgs: 16 active+clean; 2.19KiB data, 88.8GiB used, 82.1GiB / 171GiB avail

列出存储池

[root@app01 ceph]# docker exec ceph-mon ceph osd lspools
1 cephfs_data,2 cephfs_metadata,

创建存储池

# docker exec ceph-mon ceph osd pool create data 200
pool 'data' created
   data 是存储池的名称

   200 是设置的PG数量

设置PG值:

少于5个OSD可把pg_num设置为128
OSD数量在5到10,可以设置pg_num为512
OSD数量在10到50,可以设置pg_num为4096
OSD数量大于50,需要计算pg_num的值

设置存储池最大对象数

# docker exec ceph-mon ceph osd pool set-quota data max_objects 10000
set-quota max_objects = 10000 for pool data

删除存储池

# docker exec ceph-mon ceph osd pool delete data data  --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool

如果确定要删除存储,需要将pg_name 输入两次,然后写上–yes-i-really-really-mean-it

这里有个提示,修改当前的Monitor配置文件/etc/ceph/ceph.conf
添加参数: mon_allow_pool_delete = true
然后执行 docker restart ceph-mon

# docker exec ceph-mon ceph osd pool delete data data  --yes-i-really-really-mean-it
pool 'data' removed

重命名存储池

# docker exec ceph-mon ceph osd pool rename data datanew
pool 'data' renamed to 'datanew'

查看存储池统计信息

# docker exec ceph-mon rados df 
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRAED RD_OPS RD WR_OPS WR 
datanew      0       0      0      0                  0       0       0      0  0      0  0 
rbd          0       0      0      0                  0       0       0      0  0      0  0 

total_objects    0
total_used       420M
total_avail      60989M
total_space      61410M

拍下存储池快照

# docker exec ceph-mon ceph osd pool mksnap datanew data_snap2017
created pool datanew snap data_snap2017

删除存储池快照

# docker exec ceph-mon ceph osd pool rmsnap datanew data_snap2017
removed pool datanew snap data_snap2017

设置对象副本数

# docker exec mon  ceph osd pool set datanew size  5

需要注意一下,一个处于降级模式的对象其副本数小于规定值的pool_size, 仍然可以接收I/O请求。为了保证I/O正常,可以设置min_size, 确保数据存储池里任何对象的副本数小于min_size都不接收I/O

# docker exec ceph-mon ceph osd pool set datanew min_size 2

获取对象副本数

# docker exec ceph-mon ceph osd dump|grep 'replicated size'
pool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0
pool 4 'datanew' replicated size 5 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 200 pgp_num 200 last_change 36 flags hashpspool stripe_width 0
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤使用docker-compose部署Ceph集群: 1. 创建一个新的文件夹,用于存docker-compose文件和Ceph配置文件。 2. 在该文件夹中创建一个名为`docker-compose.yml`的文件,并添加以下内容: ```yaml version: '3' services: mon: image: ceph/daemon:latest container_name: ceph-mon command: mon environment: - MON_IP=<mon_IP> - CEPH_PUBLIC_NETWORK=<public_network> volumes: - ./ceph:/etc/ceph networks: - ceph-net osd: image: ceph/daemon:latest container_name: ceph-osd command: osd privileged: true environment: - OSD_DEVICE=/dev/sdb - OSD_TYPE=disk - OSD_FORCE_ZAP=1 volumes: - /dev:/dev - ./ceph:/etc/ceph networks: - ceph-net networks: ceph-net: ``` 请确保将`<mon_IP>`替换为mon节点的IP地址,并将`<public_network>`替换为Ceph集群的公共网络CIDR。 3. 在该文件夹中创建一个名为`ceph.conf`的文件,并添加以下内容: ``` [global] fsid = $(uuidgen) mon_initial_members = mon mon_host = <mon_IP> auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx [mon] log file = /var/log/ceph/ceph-mon.log chdir = "" [osd] log file = /var/log/ceph/ceph-osd.log chdir = "" osd_journal_size = 100 ``` 请确保将`<mon_IP>`替换为mon节点的IP地址。 4. 在终端中导航到该文件夹,并运行以下命令来启动Ceph集群: ``` docker-compose up -d ``` 这将使用docker-compose启动一个名为`ceph-mon`的容器作为mon节点,以及一个名为`ceph-osd`的容器作为osd节点。 5. 确保Ceph集群已成功启动,可以使用以下命令来检查: ``` docker exec -it ceph-mon ceph -s ``` 这将显示Ceph集群的状态信息。 以上是使用docker-compose部署Ceph集群的基本步骤。你可以根据自己的需求进行自定义配置和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值