• ceph高可用


    操作系统:centos8

    三台服务器

    192.168.6.22:mon,mgr,mds,osd

    192.168.6.23:mon,mgr,mds,osd

    192.168.6.24:mon,mgr,mds,osd

    正式环境osd和mon不应该在一个节点,建议osd单独服务器安装。

    ceph版本:18.1.3

    配置基础环境

    1. # 关闭防火墙
    2. systemctl stop firewalld
    3. systemctl disable firewalld
    4. # 关闭selinux
    5. setenforce 0
    6. sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

    安装基础环境

       然后安装ceph的密钥,centos7和8都要执行,下面不特别说明都是centos7/8都执行命令:

    rpm --import 'https://download.ceph.com/keys/release.asc'

    把基础centos镜像传上去,才能执行下面

    1. # 更新yum源
    2. yum install epel-release
    3. yum install snappy leveldb gdisk gperftools-libs

    把ceph镜像源加进去,才能安装ceph 

    或者vim /etc/yum.repos.d/ceph.repo

    1. [ceph]
    2. name=ceph
    3. baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//x86_64/
    4. enabled=1
    5. gpgcheck=1
    6. priority=2
    7. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
    8. [ceph-noarch]
    9. name=cephnoarch
    10. baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//noarch/
    11. gpgcheck=1
    12. priority=2
    13. enabled=1
    14. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
    15. [ceph-source]
    16. name=Ceph source packages
    17. baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//SRPMS
    18. gpgcheck=1
    19. enabled=0
    20. priority=2
    21. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

    每个节点都安装

    yum install ceph

    安装过程中会自动安装python3.6以及相关

    的依赖等,安装完成之后最好再确认一下下面两个python模块是否存在,不存在就需要安装一下:

    pip3 install pecan
    pip3 install werkzeug

    ceph-mon服务部署

    在第一个节点执行

    uuidgen 生成id

    创建配置文件   vim /etc/ceph/ceph.conf

    fsid,  public netword (网络按cidr设置),mon_initial_members ,mon_host 默认端口6789,

      osd pool default size = 3(正常数据会复制多少个副本)
      osd pool default min size = 2(降级状态下,数据最少有多少副本,如果副本数小于它说明出问题了不能正常用)

    osd pool default pg num(pg的数量,官方建议 (100*osd数量)/副本数量, 并且最接近2的幂,这里是 (100*3)/3=100,最接近2的幂是128)

    osd pool default pgp num的值和osd pool default pg num相等

      这些配置都需要改

    1. [global]
    2. fsid = 88ad70c0-b814-426b-bd92-745cea0e9dd5
    3. mon_initial_members = server22,server23,server24
    4. mon_host = 192.168.6.22,192.168.6.23,192.168.6.24
    5. public network = 192.168.6.0/22
    6. auth cluster required = cephx
    7. auth service required = cephx
    8. auth client required = cephx
    9. osd journal size = 1024
    10. osd pool default size = 3
    11. osd pool default min size = 2
    12. osd pool default pg num = 128
    13. osd pool default pgp num = 128
    14. osd crush chooseleaf type = 1
    15. mon_allow_pool_delete = true

     创建秘钥

    1. # 为集群创建1个密钥环,作为监视器密钥 注意其中的点.不要丢
    2. ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
    3. # 生成管理员密钥环 创建admin用户 也是第一个客户端用户
    4. ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
    5. # 生成bootstrap密钥环和用户
    6. ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
    7. # 然后将刚才生成的密钥追加到ceph.mon.keyring
    8. ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    9. ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
    10. # 修改ceph.mon.keyring的权限为ceph ceph用户安装时已经自动创建
    11. chown ceph:ceph /tmp/ceph.mon.keyring

     安装监控

    1. # 使用主机名,主机IP地址和FSID生成monitor map。另存为/tmp/monmap:
    2. #node1 注意修改 hostname和ip地址
    3. monmaptool --create --add server22 192.168.6.22 --add server23 192.168.6.23 --add server23 192.168.6.23 --fsid 88ad70c0-b814-426b-bd92-745cea0e9dd5 /tmp/monmap
    4. # 复制monitor map到另外2个节点
    5. #node1
    6. scp /tmp/monmap root@server23:/tmp
    7. scp /tmp/monmap root@server24:/tmp
    8. # 复制ceph.client.admin.keyring到另外2个节点
    9. #node1
    10. scp /etc/ceph/ceph.client.admin.keyring root@server23:/etc/ceph/
    11. scp /etc/ceph/ceph.client.admin.keyring root@server24:/etc/ceph/
    12. # 复制ceph.mon.keyring到另外2个节点
    13. #node1
    14. scp /tmp/ceph.mon.keyring root@server23:/tmp/
    15. scp /tmp/ceph.mon.keyring root@server24:/tmp/
    16. #复制conf
    17. scp /etc/ceph/ceph.conf root@server23:/etc/ceph/
    18. scp /etc/ceph/ceph.conf root@server24:/etc/ceph/
    19. #注意修改文件权限
    20. #node1
    21. chown ceph:ceph /tmp/ceph.mon.keyring
    22. #node2
    23. chown ceph:ceph /tmp/ceph.mon.keyring
    24. #node3
    25. chown ceph:ceph /tmp/ceph.mon.keyring
    26. # 创建monitor数据目录. {集群名}-{节点名}
    27. #node1
    28. sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server22
    29. #node2
    30. sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server23
    31. #node3
    32. sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server24
    33. # 用monitor map和keyring填充monitor守护程序。 注意修改节点名
    34. #node1
    35. sudo -u ceph ceph-mon --mkfs -i server22 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    36. #node2
    37. sudo -u ceph ceph-mon --mkfs -i server23 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    38. #node3
    39. sudo -u ceph ceph-mon --mkfs -i server24 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    40. 执行这如果出错报/var/lib/ceph/mon/ceph-server23已经存在,就手动把这个目录删了,再次执行
    41. # 查看生成的文件
    42. #node1
    43. ls /var/lib/ceph/mon/ceph-server22/
    44. keyring kv_backend store.db
    45. # 启动monitor服务
    46. #node1
    47. systemctl restart ceph-mon@server22
    48. systemctl enable ceph-mon@server22
    49. #node2
    50. systemctl restart ceph-mon@server23
    51. systemctl enable ceph-mon@server23
    52. #node3
    53. systemctl restart ceph-mon@server24
    54. systemctl enable ceph-mon@server24

     查看集群状态

    ceph -s,此时应该有三个监控启动

    1. # 若异常则启用msgr2
    2. # ceph mon enable-msgr2

    manager节点部署

    1. 在三个节点分别执行
    2. #server22
    3. # 创建mgr密钥目录, 命名为: 集群名-主机名
    4. mkdir /var/lib/ceph/mgr/ceph-server22
    5. # 创建mgr身份验证密钥 注意里面的mgr.server22,为主机名
    6. ceph auth get-or-create mgr.server22 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server22/keyring
    7. # 修改权限
    8. chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server22/
    9. #server23
    10. # 创建mgr密钥目录, 命名为: 集群名-主机名
    11. mkdir /var/lib/ceph/mgr/ceph-server23
    12. # 创建mgr身份验证密钥 注意里面的mgr.server23,为主机名
    13. ceph auth get-or-create mgr.server23 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server23/keyring
    14. # 修改权限
    15. chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server23/
    16. #server24
    17. # 创建mgr密钥目录, 命名为: 集群名-主机名
    18. mkdir /var/lib/ceph/mgr/ceph-server24
    19. # 创建mgr身份验证密钥 注意里面的mgr.server24,node1为主机名
    20. ceph auth get-or-create mgr.server24 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server24/keyring
    21. # 修改权限
    22. chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server24/
    23. # 注意官网这里用$name代替主机名,这里说的很含糊,建议使用主机名,无论如何和前面指定的那个host保持一致,这样后面就不会有一些奇怪的问题导致集群不能用,然后启动ceph-mgr守护进程:
    24. ceph-mgr -i server22
    25. ceph-mgr -i server23
    26. ceph-mgr -i server24
    27. # 启动ceph-mgr守护程序:
    28. #node1
    29. systemctl restart ceph-mgr@server22
    30. systemctl enable ceph-mgr@server22
    31. #node2
    32. systemctl restart ceph-mgr@server23
    33. systemctl enable ceph-mgr@server23
    34. #node3
    35. systemctl restart ceph-mgr@server24
    36. systemctl enable ceph-mgr@server24
    37. # 通过ceph status查看输出来检查mgr是否出现
    38. 这时候应该有三个mgr


    [root@server24 ceph-server24]# ceph -s
      cluster:
        id:     88ad70c0-b814-426b-bd92-745cea0e9dd5
        health: HEALTH_WARN
                mons are allowing insecure global_id reclaim
                OSD count 0 < osd_pool_default_size 3

      services:
        mon: 3 daemons, quorum server22,server23,server24 (age 2h)
        mgr: server22(active, since 2h), standbys: server24, server23
        osd: 0 osds: 0 up, 0 in

      data:
        pools:   0 pools, 0 pgs
        objects: 0 objects, 0 B
        usage:   0 B used, 0 B / 0 B avail
        pgs:

    OSD部署

    1. # 复制keyring到其他2个节点
    2. #node1
    3. scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@server23:/var/lib/ceph/bootstrap-osd/
    4. scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@server24:/var/lib/ceph/bootstrap-osd/
    5. # 创建OSD
    6. [root@node1 ~]# lsblk
    7. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    8. sda 8:0 0 100G 0 disk
    9. ├─sda1 8:1 0 1G 0 part /boot
    10. └─sda2 8:2 0 99G 0 part
    11. ├─cs-root 253:0 0 61.2G 0 lvm /
    12. ├─cs-swap 253:1 0 7.9G 0 lvm
    13. └─cs-home 253:2 0 29.9G 0 lvm /home
    14. sdb 8:16 0 10G 0 disk
    15. # 3个节点上执行
    16. ceph-volume lvm create --data /dev/sdb
    17. # 启动各个节点osd进程
    18. #node1
    19. systemctl restart ceph-osd@0
    20. systemctl enable ceph-osd@0
    21. #node2
    22. systemctl restart ceph-osd@1
    23. systemctl enable ceph-osd@1
    24. #node3
    25. systemctl restart ceph-osd@2
    26. systemctl enable ceph-osd@2
    27. # 查看集群状态
    28. ceph -s
    29. cluster:
    30. id: 8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
    31. health: HEALTH_WARN
    32. mons are allowing insecure global_id reclaim
    33. services:
    34. mon: 3 daemons, quorum node1,node2,node3 (age 5m)
    35. mgr: node3(active, since 4m), standbys: node1, node2
    36. osd: 3 osds: 3 up (since 7s), 3 in (since 62s)
    37. data:
    38. pools: 1 pools, 1 pgs
    39. objects: 2 objects, 577 KiB
    40. usage: 18 MiB used, 30 GiB / 30 GiB avail
    41. pgs: 1 active+clean
    42. io:
    43. client: 1.2 KiB/s rd, 36 KiB/s wr, 1 op/s rd, 1 op/s wr
    44. recovery: 27 KiB/s, 0 objects/s

    mds部署

    1. # 创建mds数据目录。
    2. #node1
    3. sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server22
    4. #node2
    5. sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server23
    6. #node3
    7. sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server24
    8. # 创建keyring:
    9. #node1
    10. ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server22/keyring --gen-key -n mds.server22
    11. #node2
    12. ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server23/keyring --gen-key -n mds.server23
    13. #node3
    14. ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server24/keyring --gen-key -n mds.server24
    15. # 导入keyring并设置权限:
    16. #node1
    17. ceph auth add mds.server22 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server22/keyring
    18. chown ceph:ceph /var/lib/ceph/mds/ceph-server22/keyring
    19. #node2
    20. ceph auth add mds.server23 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server23/keyring
    21. chown ceph:ceph /var/lib/ceph/mds/ceph-server23/keyring
    22. #node3
    23. ceph auth add mds.server24 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server24/keyring
    24. chown ceph:ceph /var/lib/ceph/mds/ceph-server24/keyring

    1. 所有节点修改ceph.conf配置文件,追加以下内容
    2. cat >> /etc/ceph/ceph.conf <
    3. [mds.server22]
    4. host = server22
    5. [mds.server23]
    6. host = server23
    7. [mds.server24]
    8. host = server24
    9. EOF
    1. 重新启动所有服务
    2. #node1
    3. systemctl restart ceph-mon@server22
    4. systemctl restart ceph-mgr@server22
    5. systemctl restart ceph-mds@server22
    6. systemctl enable ceph-mds@server22
    7. systemctl restart ceph-osd@0
    8. #node2
    9. systemctl restart ceph-mon@server23
    10. systemctl restart ceph-mgr@server23
    11. systemctl restart ceph-mds@server23
    12. systemctl enable ceph-mds@server23
    13. systemctl restart ceph-osd@1
    14. #node3
    15. systemctl restart ceph-mon@server24
    16. systemctl restart ceph-mgr@server24
    17. systemctl restart ceph-mds@server24
    18. systemctl enable ceph-mds@server24
    19. systemctl restart ceph-osd@2

    创建存储池以及ceph文件系统

        ceph所有的存储都是基于存储池才能分配,因此要先创建存储池,初始情况至少创建两个存储池(RADOS):1个用于存储数据,1个用于存储元数据信息,创建命令如下:

    这个大小需要再研究

    # 创建名字为cephfs_data的数据池 pg大小为128
    ceph osd pool create cephfs_data 128
    # 创建名字为cephfs_metadata的存储池 pg大小为64
    ceph osd pool create cephfs_metadata 64

        存储池可以创建多个,并且所有的存储池共享底层的存储空间,比如A存储池占用了一部分,那个B存储池就只能用剩下的部分了,而且之后挂载后剩余大小的显示也会变小,这个后面可以验证 

        另外就是注意这里pg大小正常指定128或64就够了,正常默认1个pool最多支持250个pg,可以通过参数调整限制大小,这里两个池都是一样的数据池,后续创建文件系统会指定哪个用于数据,哪个用于元数据存储,这里名字只是个代号,然后基于存储池创建文件系统,命令如下:

    # ceph fs new  <元数据池> <数据池>
    ceph fs new cephfs cephfs_metadata cephfs_data

        执行成功之后通过命令: ceph fs ls 查看存在的文件系统,正常显示如下:

         然后还可以执行 ceph mds stat 查看mds当前的活动状态

    挂载

        挂载文件系统有两种方式,一种是基于操作系统内核直接挂载,另一种是使用ceph fuse挂载,通常推荐第一种方式挂载,这样性能和效率都是最高的,如果第一种方式挂载不成功的话,可以尝试使用fuse方式挂载,看看能否定位到什么问题,下面我们直接使用内核方式挂载:

        使用内核方式挂载要确认mount是否支持ceph: stat /sbin/mount.ceph ,正常安装好ceph包都会有/sbin/mount.ceph这个文件,说明支持ceph的文件系统,然后创建挂载点使用admin用户挂载:

    在服务端节点直接挂载:

    mkdir /home/unity-data
    mount -t ceph :/ /home/unity-data/ -o name=admin

    在客户端节点挂载:

    1. # 获取最小配置 这里ssh的是ceph-mon节点机器 注意配置hosts 执行按照提示输入密码
    2. ssh root@server22 "ceph config generate-minimal-conf" | tee /etc/ceph/ceph.conf
    3. # 设置默认权限
    4. chmod 644 /etc/ceph/ceph.conf
    5. # 创建用户密钥环 cephfs是文件系统名称 这里用户名是zzy 对根目录/有rw权限
    6. ssh root@server22 "ceph fs authorize cephfs client.zzy / rw" | tee /etc/ceph/ceph.client.zzy.keyring
    7. # 设置密钥文件的权限
    8. chmod 600 /etc/ceph/ceph.client.zzy.keyring
    9. # 创建挂载点
    10. mkdir /home/unity-data
    11. mount -t ceph :/ /home/unity-data/ -o name=zzy

    删除挂载:

    umount /home/unity-data

    安装Dashboard

    开启插件。

    #ceph mgr module enable dashboard

    禁用SSL。

    #ceph config set mgr mgr/dashboard/ssl false

    配置监听IP。

    #ceph config set mgr mgr/dashboard/server_addr 0.0.0.0

    温馨提醒

    此处必须设置监控地址为0.0.0.0,而不能是直接IP地址,因为其监控的是所有本地地址包括IPV4和IPV6,同时也不能禁用IPV6地址。

    配置监听端口。

    #ceph config set mgr mgr/dashboard/server_port 8443

    在一个文件里写下密码,比如 vim /etc/ceph/dashboard_pwd.txt  

    设置用户及密码。

    #ceph dashboard ac-user-create admin -i /etc/ceph/dashboard_pwd.txt administrator

    查看已开启模块信息。

    #ceph mgr services

    使用配置生效。

    1. #ceph mgr module disable dashboard
    2. #ceph mgr module enable dashboard

    通过查看ceph mgr services命令输出地址。

    1. #ceph mgr services
    2. {
    3. "dashboard": "http://ceph-node1.localdomain:8443/"
    4. }

    访问Ceph Dashboard地址http://192.168.123.199:8443/#

    如果发现用户权限有问题,登录不了,可以先删除用户,再创建

    删除命令:ceph dashboard ac-user-delete admin 

    常用命令

    查看有几个client连接。对mds主查

    ceph daemon mds.server23 session ls

    健康:ceph health detail

    查询osd状态和权重: ceph osd tree

    查看osd服务: systemctl status ceph-osd@2

    查看mon服务: systemctl status ceph-mon@server24

    查看mgr服务:systemctl status ceph-mgr@server24

    查看mds服务:systemctl status ceph-mds@server24

    查询文件在哪个pg,哪个osd上,[1,2,0]代表三个osd都有文件,p1代表1是primary osd: 

    ceph osd map cephfs_data /home/unity-data/out22-.txt
    结果:osdmap e3313 pool 'cephfs_data' (2) object '/home/unity-data/out22-.txt' -> pg 2.b65944d6 (2.16) -> up ([1,2,0], p1) acting ([1,2,0], p1)

    查询pg在哪个osd:

    ceph pg map 2.16
    osdmap e3313 pg 2.16 (2.16) -> up [1,2,0] acting [1,2,0]

    查询fs状态、查mds主、及状态:ceph fs status

    查询文件池名称:ceph fs ls

  • 相关阅读:
    【无标题】
    js数组去重的六种方法
    Docker Compose 安装 MinIO 并设置用户名和密码
    【EI会议征稿】第四届计算机网络安全与软件工程国际学术会议(CNSSE 2024)
    MySQL之视图、存储过程
    Vue项目优化方案
    weui citypicker 多次动态赋值
    QComboBox多选框的实现(源码):采用QListWidget实现多选后控件丢失的问题(探讨)
    说说你对vue的mixin的理解,有什么应用场景
    会计制度设计名词解释
  • 原文地址:https://blog.csdn.net/u014203449/article/details/134070579