ceph简介及高可用集群搭建

简介: ceph简介及高可用集群搭建

Ceph简介

Ceph是一个PB,EB级别的分布式存储系统,可以提供文件存储,对象存储、和块存储,它可靠性高,易扩展,管理简便,其中对象存储和块存储可以和其他云平台集成。一个Ceph集群中有Monitor节点、MDS节点(用于文件存储)、OSD守护进程。

Ceph组件

Ceph OSD:OSD守护进程,用于存储数据、数据恢复、数据回滚、平衡数据,并通过心跳程序向Monitor提供数据相关的监控信息。一个Ceph集群中至少需要两个OSD守护进程,这两个osd需要在两个物理服务器上,而不是在一台服务器上启动两个osd。
Monitor:维护集群状态的映射信息,包括monmap,osdmap,pgmap;至少需要三个monitor来实现高可用

MDS:存储Ceph文件系统的元数据。

Managers:Ceph Manager守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。CephManager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph Dashboard和RESTAPI。高可用性通常至少需要两个

安装环境准备

准备机器,osd节点机器需要两个硬盘,配置4GiB/4vCPU/60G x2

监控节点:

monitor1:192.168.85.128

monitor2:192.168.85.130

monitor3:192.168.85.131

osd节点:

osd1:192.168.85.133

osd2:192.168.85.134

初始化机器

1.修改主机名

在monitor1上操作:

    hostnamectl set-hostname monitor1

    在monitor2上操作:

      hostnamectl set-hostname monitor2

      在monitor3上操作:

        hostnamectl set-hostname monitor3

        在osd1上操作:

          hostnamectl set-hostname osd1

          在osd2上操作:

            hostnamectl set-hostname osd2

            2.修改host文件,在各个节点操作

            修改各个主机节点hosts文件

            /etc/hosts文件如下

            192.168.85.128 monitor1
            192.168.85.130 monitor2
            192.168.85.131 monitor3
            192.168.85.133 osd1
            192.168.85.134 osd2

            3.配置master1到三个节点无密码登陆,在master1上操作

            ssh-keygen -t rsa   #一直回车就可以

            ssh-copy-id -i .ssh/id_rsa.pub monitor1

            ssh-copy-id -i .ssh/id_rsa.pub monitor2

            ssh-copy-id -i .ssh/id_rsa.pub monitor3

            ssh-copy-id -i .ssh/id_rsa.pub osd1

            ssh-copy-id -i .ssh/id_rsa.pub osd2

            4.初始化机器(各个节点操作)

              yum -y install wget net-tools nfs-utils lrzsz gccgcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntplibaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-develepel-release lrzsz openssh-server

              yum install deltarpm -y

              5.关闭firewalld防火墙(各个节点操作

              停止firewalld服务 停止防火墙,并禁用这个服务

                systemctl stop firewalld.service && systemctldisable firewalld.service

                安装iptables 如果你要改用iptables的话,需要安装iptables服务

                #安装

                  yum install iptables-services -y

                  禁用iptables

                  service iptables stop && systemctl disableiptables

                  6.时间同步

                  在master1上

                  ntpdate cn.pool.ntp.org
                  systemctl start ntpd &&systemctl enable ntpd

                  除了master1的其他节点

                    ntpdate monitor1

                    计划任务:

                      * */1 * * * /usr/sbin/ntpdate monitor1

                      安装ceph-deploy

                      1.安装epel源,在各个节点上操作

                        yum install -y yum-utils&& sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/&& sudo yum install --nogpgcheck -y epel-release && sudo rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm/etc/yum.repos.d/dl.fedoraproject.org*

                        2.配置ceph的yum源,在各个节点上操作

                        cat /etc/yum.repos.d/ceph.repo

                        [Ceph]
                        name=Ceph packages for$basearch
                        baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
                        priority=1
                        [Ceph-noarch]
                        name=Ceph noarch packages
                        baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
                        priority=1
                        [ceph-source]
                        name=Ceph source packages
                        baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
                        priority=1

                        3.安装ceph-deploy

                          yum update -y        #在各个节点上操作
                            yum install ceph-deploy ceph -y     #在master1上操作
                              yum installyum-plugin-priorities -y #在master1上操作

                              在除了master1的其他节点上操作

                                yum install ceph -y

                                4.创建ceph monitor

                                (1)创建一个目录,用于保存ceph-deploy 生成的配置文件和密钥信息的,在monitor1上操作,

                                  mkdir /root/ceph-deploy&& cd /root/ceph-deploy

                                  (2) 初始化monitor节点,在monitor1上操作,

                                    ceph-deploy new monitor1 monitor2 monitor3

                                    ls可发现在ceph-deploy目录下多了几个文件,如下面这些

                                    ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
                                    ceph.conf            #ceph集群配置文件
                                    ceph-deploy-ceph.log #ceph-deploy命令执行结果的日志
                                    ceph.mon.keyring     #ceph mon角色的key

                                    (3)修改ceph配置文件,在各个monitor节点操作

                                    cat ceph.conf

                                    [global]
                                    fsid = dc97ea52-e32c-404d-9bbc-9d0a90e39e02
                                    mon_initial_members = monitor1, monitor2,monitor3
                                    mon_host =192.168.85.128,192.168.85.129,192.168.85.130
                                    auth_cluster_required = cephx
                                    auth_service_required = cephx
                                    auth_client_required = cephx
                                    osd_pool_default_size = 2

                                    因为我们环境中有两个OSD,Ceph模式的默认osd副本个数为3,因此需要修改配置文件Ceph.conf,在[global]部分增加如下配置:

                                    osd pool default size = 2

                                    (4)安装ceph集群,在monitor1上操作

                                      ceph-deploy install monitor1 monitor2monitor3 osd1 osd2

                                      上面使用ceph-deploy来安装ceph程序,我们之前通过yum手动在各个节点安装过ceph,为了保证ceph安装成功,这两种方法都需要使用

                                      (5)部署初始监视器并收集密钥,在monitor1上操作

                                        ceph-deploy mon create-initial

                                        ll /root/ceph-deploy 会看到生成很多密钥

                                        ceph.bootstrap-mds.keyring
                                        ceph.bootstrap-mgr.keyring
                                        ceph.bootstrap-osd.keyring
                                        ceph.bootstrap-rgw.keyring
                                        ceph.client.admin.keyring
                                        ceph.bootstrap-mds.keyring   #MDS启动key
                                        ceph.bootstrap-osd.keyring   #OSD启动key 
                                        ceph.client.admin.keyring    #管理员key

                                        (6)将配置文件和管理密钥分发到各个ceph节点,在monitor1上操作

                                          ceph-deploy admin monitor1 monitor2 monitor3 osd1 osd2

                                          (7)授权,在各个节点操作

                                            chmod +r/etc/ceph/ceph.client.admin.keyring

                                            配置osd,下面步骤均在monitor1上操作

                                            1.给ceph添osd,并完成激活

                                            在osd节点osd1和osd2上操作

                                            mkdir /data/osd1 -p
                                            chmod 777 /data/osd1/
                                            chown -R ceph.ceph /data/osd1

                                            2.回到master1上操作,准备osd

                                              ceph-deploy osd prepare osd1:/data/osd1osd2:/data/osd1

                                              3.激活osd:

                                                ceph-deploy osd activate osd1:/data/osd1osd2:/data/osd1

                                                ceph health   #查看ceph集群状态,显示如下,在health处看到HEALTH_OK说明集群正常

                                                  cluster a53e18df-5c06-46bb-b4db-7c44f64a367e
                                                     health HEALTH_OK
                                                     monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                            election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3
                                                     osdmap e14: 2 osds: 2 up, 2 in
                                                            flags sortbitwise,require_jewel_osds
                                                      pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects
                                                            14146 MB used, 64246 MB / 78393 MB avail
                                                                 320 active+clean

                                                4.创建ceph pool池

                                                  ceph osd pool create testpool 256

                                                  5.创建rbd

                                                    rbd create testpool/myrbd --size 10240

                                                    6.映射块设备到自己机器

                                                    rbd feature disable testpool/myrbd object-map fast-diff deep-flatten
                                                    #禁用一些map,否则客户端挂载不成功
                                                    rbd map testpool/myrbd 
                                                    显示/dev/rbd0,说明映射成功

                                                    7.测试客户端挂载使用

                                                    mkdir /mnt/firstrbd 
                                                    mkfs.xfs /dev/rbd0 
                                                    mount /dev/rbd0 /mnt/firstrbd

                                                    8.kubernetes对接ceph

                                                    可看视频了解,视频链接如下:

                                                      https://edu.51cto.com/sd/d7dff

                                                      常见错误排查

                                                      1.too many PGs per OSD

                                                      上面测试客户端挂载之后,我们在monitor1上用ceph -s再次查看集群状态

                                                        ceph -s

                                                        可看到有警告health HEALTH_WARN

                                                                            too many PGs per OSD (320 > max300)

                                                        clustera53e18df-5c06-46bb-b4db-7c44f64a367e
                                                             health HEALTH_WARN
                                                                    too many PGs per OSD (320 > max300)
                                                             monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                                    election epoch 4, quorum 0,1,2monitor1,monitor2,monitor3
                                                             osdmap e14: 2 osds: 2 up, 2 in
                                                                    flagssortbitwise,require_jewel_osds
                                                              pgmap v253: 320 pgs, 2 pools, 14752 kBdata, 23 objects
                                                                    14158 MB used, 64235 MB / 78393 MBavail
                                                                         320 active+clean

                                                        这个警告是因为ceph集群中osd 数量较少,创建了pool,每个pool要占用一些pg ,ceph集群默认每个osd 能有300个pgs,这个默认值是可以调整的,但调整会对集群的性能产生一定影响。如果是测试环境,可以消除这种警告,当然这种警告也可以不用理会。

                                                        查询每个osd下最大的pg阈值

                                                          ceph --show-config | grep mon_pg_warn_max_per_osd

                                                          #可以看到每个osd默认有300个pg

                                                            mon_pg_warn_max_per_osd = 300

                                                            解决方法如下:

                                                            在monitor1,monitor2,monitor3上修改ceph配置文件,把osd上的pg数量修改成600cat /etc/ceph/ceph.conf

                                                            [global]
                                                            ...
                                                            mon_pg_warn_max_per_osd = 600

                                                            上面修改好之后重启monitor服务,在monitor1上操作

                                                              systemctl restart ceph-mon@monitor1
                                                              systemctl restart ceph-mon@monitor2
                                                              systemctl restart ceph-mon@monitor3

                                                              ceph -s    看到下面的ceph集群状态正常了

                                                                cluster a53e18df-5c06-46bb-b4db-7c44f64a367e
                                                                   health HEALTH_OK
                                                                   monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                                          election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3
                                                                   osdmap e14: 2 osds: 2 up, 2 in
                                                                          flags sortbitwise,require_jewel_osds
                                                                    pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects
                                                                          14146 MB used, 64246 MB / 78393 MB avail
                                                                               320 active+clean

                                                              2.重启monitor服务报错

                                                              systemctl restart ceph-mon@monitor1
                                                              systemctl restart ceph-mon@monitor2
                                                              systemctl restart ceph-mon@monitor3

                                                              如果启动报错,按如下排查

                                                                systemctl status ceph-mon@monitor1

                                                                报错如下:

                                                                  Sep 05 22:55:30 monitor1 systemd[1]: start request repeated tooquickly for ceph-mon@monitor1.service
                                                                  Sep 05 22:55:30 monitor1 systemd[1]: Failed to start Ceph clustermonitor daemon.

                                                                  解决方法:

                                                                  在各个节点修改配置文件

                                                                    vim /usr/lib/systemd/system/ceph-mon@.service
                                                                    vim /usr/lib/systemd/system/ceph-mon@.service
                                                                    vim /usr/lib/systemd/system/ceph-mon@.service

                                                                    把StartLimitInterval=30min加上注释

                                                                    在各个节点执行如下,重新加载配置文件

                                                                      systemctl daemon-reload

                                                                      在monitor1上执行如下,重启,可启动成功

                                                                      systemctl restart ceph-mon@monitor1 
                                                                      systemctl restart ceph-mon@monitor2 
                                                                      systemctl restart ceph-mon@monitor3 

                                                                      3.全都重新部署

                                                                      当你在部署时遇到问题,排查过程困难重重的话,那么不妨用如下方法,把集群清空,重新部署可以执行以下清除Ceph包之后重新开始安装:

                                                                      在monitor1上操作

                                                                      cd /root/ceph-deploy
                                                                      ceph-deploy purge monitor1 monitor2 monitor3 osd1 osd2
                                                                      ceph-deploy purgedata monitor1 monitor2 monitor3 osd1 osd2ceph-deployforgetkeys
                                                                      rm ceph.*
                                                                      相关文章
                                                                      |
                                                                      2月前
                                                                      |
                                                                      存储
                                                                      Ceph Reef(18.2.X)的CephFS高可用集群实战案例
                                                                      这篇文章是关于Ceph Reef(18.2.X)版本中CephFS高可用集群的实战案例,涵盖了CephFS的基础知识、一主一从架构的搭建、多主一从架构的配置、客户端挂载方式以及fuse方式访问CephFS的详细步骤和配置。
                                                                      90 3
                                                                      Ceph Reef(18.2.X)的CephFS高可用集群实战案例
                                                                      |
                                                                      域名解析 存储 块存储
                                                                      ceph集群的搭建
                                                                      ceph集群的搭建
                                                                      370 1
                                                                      |
                                                                      块存储
                                                                      ceph集群的搭建(下)
                                                                      ceph集群的搭建
                                                                      160 0
                                                                      |
                                                                      存储 负载均衡 NoSQL
                                                                      分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建
                                                                      分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建
                                                                      245 0
                                                                      |
                                                                      存储 监控 网络安全
                                                                      Ceph集群搭建篇
                                                                      Ceph集群搭建篇
                                                                      675 0
                                                                      |
                                                                      存储 Prometheus Kubernetes
                                                                      实战篇:使用rook在k8s上搭建ceph集群
                                                                      实战篇:使用rook在k8s上搭建ceph集群
                                                                      941 0
                                                                      |
                                                                      存储 分布式计算 前端开发
                                                                      Zookper集群搭建
                                                                      🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
                                                                      196 0
                                                                      Zookper集群搭建
                                                                      |
                                                                      Kubernetes Ubuntu Docker
                                                                      k8s集群搭建
                                                                      k8s集群搭建
                                                                      305 0
                                                                      |
                                                                      存储 NoSQL 5G
                                                                      集群-cluster 集群搭建|学习笔记
                                                                      快速学习集群-cluster 集群搭建
                                                                      集群-cluster 集群搭建|学习笔记
                                                                      |
                                                                      存储 运维 监控
                                                                      cephadm 安装部署 ceph 集群
                                                                      块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘” 文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹 对象存储:像百度云盘一样,需要使用单独的客户端 ceph还是一个分布式的存储系统,非常灵活。如果需要扩容,只要向ceph集中增加服务器即可。ceph存储数据时采用多副本的方式进行存储,生产环境下,一个文件至少要存3份。ceph默认也是三副本存储。
                                                                      646 0