Ceph安装配置手册 作者: sysit 分类: d 发表于 2018-11-01 1317人围观 >本文档在CentOS7.3操作系统安装配置Ceph Mimic版本 ## 1. 组件介绍 `Ceph`:开源的分布式存储系统。主要分为对象存储、块设备存储、文件系统服务。`Ceph`核心组件包括:`Ceph OSDs`、`Monitors`、`Managers`、`MDSs`。`Ceph`存储集群至少需要一个`Ceph Monitor`,`Ceph Manager`和`Ceph OSD`。运行`Ceph Filesystem`客户端时也需要`Ceph`元数据服务器(`Metadata Server`)。 `Ceph OSDs`: `Ceph OSD` 守护进程(`ceph-osd`)的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他 `OSD` 守护进程的心跳来向 `Ceph Monitors` 提供一些监控信息。冗余和高可用性通常至少需要3个`Ceph OSD`。当 `Ceph` 存储集群设定为有2个副本时,至少需要2个 `OSD` 守护进程,集群才能达到 `active+clean` 状态( `Ceph` 默认有3个副本,但你可以调整副本数)。 `Monitors`: `Ceph Monitor`(`ceph-mon`) 维护着展示集群状态的各种图表,包括监视器图、 `OSD` 图、归置组( `PG` )图、和 `CRUSH` 图。 `Ceph` 保存着发生在`Monitors` 、 `OSD` 和 `PG`上的每一次状态变更的历史信息(称为 `epoch` )。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常至少需要三个监视器。 `Managers`: `Ceph Manager`守护进程(`ceph-mgr`)负责跟踪运行时指标和`Ceph`集群的当前状态,包括存储利用率,当前性能指标和系统负载。`Ceph Manager`守护进程还托管基于`python`的插件来管理和公开`Ceph`集群信息,包括基于`Web`的`Ceph Manager Dashboard`和 `REST API`。高可用性通常至少需要两个管理器。 `MDSs`: `Ceph` 元数据服务器( `MDS `)为 `Ceph` 文件系统存储元数据(也就是说,`Ceph` 块设备和 `Ceph` 对象存储不使用`MDS` )。元数据服务器使得 `POSIX` 文件系统的用户们,可以在不对 `Ceph` 存储集群造成负担的前提下,执行诸如 `ls`、`find` 等基本命令。 > 以上信息整理至http://www.mamicode.com/info-detail-2404519.html ## 2. 服务器规划 主机 | public ip | cluster ip | 功能 ---|--- | ---|--- node1 | 10.28.103.211 | 172.32.103.211 | osd,mon node2 | 10.28.103.212 | 172.32.103.212 | osd,mon node3 | 10.28.103.213 | 172.32.103.213 | osd,mon ## 3 环境初始化 ### 3.1 环境基础配置 * 配置`hosts` ``` cat >/etc/hosts <<'EOF' 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.28.103.211 node1.sysit.cn node1 10.28.103.212 node2.sysit.cn node2 10.28.103.213 node3.sysit.cn node3 EOF ``` * 关闭`selinux` ``` setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config ``` * 关闭`firewalld` ``` systemctl stop firewalld && systemctl disable firewalld ``` * 修改ulimit ``` cat > /etc/security/limits.conf <<'EOF' * soft nproc unlimited * hard nproc unlimited * soft nofile 65535 * hard nofile 65535 EOF # 修改systemd系统ulimit cat >> /etc/systemd/system.conf <<'EOF' DefaultLimitCORE=infinity DefaultLimitNOFILE=100000 DefaultLimitNPROC=100000 EOF #修改systemd用户ulimit cat >> /etc/systemd/user.conf <<'EOF' DefaultLimitCORE=infinity DefaultLimitNOFILE=100000 DefaultLimitNPROC=100000 EOF # reload systemctl daemon-reload ``` ### 3.2 创建用户并配置免密登录 * 创建用户 ``` useradd -d /home/admin -m admin echo "adminpassword" | passwd admin --stdin #sudo权限 echo "admin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/admin sudo chmod 0440 /etc/sudoers.d/admin ``` * 配置免密 ``` [root@node1 ~]# su - admin [admin@node1 ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/admin/.ssh/id_rsa): Created directory '/home/admin/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/admin/.ssh/id_rsa. Your public key has been saved in /home/admin/.ssh/id_rsa.pub. The key fingerprint is: SHA256:qfWhuboKeoHQOOMLOIB5tjK1RPjgw/Csl4r6A1FiJYA admin@admin.ops5.bbdops.com The key's randomart image is: +---[RSA 2048]----+ |+o.. | |E.+ | |*% | |X+X . | |=@.+ S . | |X.* o + . | |oBo. . o . | |ooo. . | |+o....oo. | +----[SHA256]-----+ [admin@node1 ~]$ ssh-copy-id admin@node1 [admin@node1 ~]$ ssh-copy-id admin@node2 [admin@node1 ~]$ ssh-copy-id admin@node3 #注:client可以不免密码,我这里为了方面就一起添加了。 ``` * 服务器端口为非`22`端口处理 ``` #注:如果ssh端口非默认22,则添加 cat > ~/.ssh/config <<'EOF' Host node1 Hostname node1 User admin Port 51668 Host node2 Hostname node2 User admin Port 51668 Host node3 Hostname node3 User admin Port 51668 EOF chmod 700 ~/.ssh/config ``` ### 3.3 时间同步 见`chrony`时间同步 ## 4 ceph集群 ### 4.1 安装ceph-deploy并安装ceph软件包 * 配置ceph源 > 这里使用清华大学的源,以提高安装速度。 ``` cat > /etc/yum.repos.d/ceph.repo<<'EOF' [Ceph] name=Ceph packages for $basearch baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 EOF ``` * 安装ceph-deploy ``` [admin@node1 ~]$ sudo yum install ceph-deploy [admin@node1 ~]$ rpm -qa ceph-deploy ceph-deploy-2.0.0-0.noarch ``` ### 4.2 卸载ceph > 如果以前安装过ceph,或者安装过程中出现问题,则卸载掉 ``` ceph-deploy purge node1 node2 node3 ceph-deploy purgedata node1 node2 node3 ceph-deploy forgetkeys ps aux|grep ceph |awk '{print $2}'|xargs kill -9 umount /var/lib/ceph/osd/* rm -rf /var/lib/ceph rm -rf /etc/ceph rm -rf /var/run/ceph ``` ### 4.3 初始化mon点 ``` # 创建目录 [admin@node1 ~]$ mkdir my-cluster [admin@node1 ~]$ cd my-cluster # new [admin@node1 my-cluster]$ ceph-deploy new node1 node2 node3 Traceback (most recent call last): File "/bin/ceph-deploy", line 18, in <module> from ceph_deploy.cli import main File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module> import pkg_resources ImportError: No module named pkg_resources #以上出现报错,是因为没有pip,安装pip [admin@node1 my-cluster]$ sudo yum install epel-release [admin@node1 my-cluster]$ sudo yum install python-pip #重新初始化 [admin@node1 my-cluster]$ ceph-deploy new node1 node2 node3 [admin@node1 my-cluster]$ ls ceph.conf ceph-deploy-ceph.log ceph.mon.keyring [admin@node1 my-cluster]$ cat ceph.conf [global] fsid = a1132f78-cdc5-43d0-9ead-5b590c60c53d mon_initial_members = node1, node2, node3 mon_host = 10.28.103.211,10.28.103.212,10.28.103.213 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx #修改ceph.conf,添加如下配置 public network = 10.28.103.0/24 cluster network = 172.30.103.0/24 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 128 osd pool default pgp num = 128 osd pool default crush rule = 0 osd crush chooseleaf type = 1 max open files = 131072 ms bind ipv6 = false [mon] mon clock drift allowed = 10 mon clock drift warn backoff = 30 mon osd full ratio = .95 mon osd nearfull ratio = .85 mon osd down out interval = 600 mon osd report timeout = 300 mon allow pool delete = true [osd] osd recovery max active = 3 osd max backfills = 5 osd max scrubs = 2 osd mkfs type = xfs osd mkfs options xfs = -f -i size=1024 osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog filestore max sync interval = 5 osd op threads = 2 # 安装Ceph软件到指定节点 # 用法:ceph-deploy install --no-adjust-repos {ceph-node} [{ceph-node} ...] [admin@node1 my-cluster]$ ceph-deploy install --no-adjust-repos node1 node2 node3 #注意:ceph需要epel源的包,所以安装的节点都需要yum install epel-release # --no-adjust-repos是直接使用本地源,不生成官方源。 #部署初始的monitors,并获得keys ceph-deploy mon create-initial # 做完这一步,在当前目录下就会看到有如下的keyrings: ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.mon.keyring ``` ### 4.4 分发admin key > 要在节点使用`ceph`命令行需要将`ceph.client.admin.keyring`放在需要的节点的`/etc/ceph`目录下。如这里希望在所有的节点使用命令行,可以通过如下命令将`ceph.client.admin.keyring`拷贝到各节点,当然也可以使用cp命令。 ``` ceph-deploy admin node1 node2 node3 ``` ### 4.5 部署ceph-mgr ``` #在L版本的`Ceph`中新增了`manager daemon`,如下命令部署一个`Manager`守护进程 [admin@node1 my-cluster]$ ceph-deploy mgr create node1 ``` ### 4.6 创建osd ``` #用法:ceph-deploy osd create –data {device} {ceph-node} ceph-deploy osd create --data /dev/sdb node1 ceph-deploy osd create --data /dev/sdb node2 ceph-deploy osd create --data /dev/sdb node3 ceph-deploy osd create --data /dev/sdc node3 ceph-deploy osd create --data /dev/sdc node2 ceph-deploy osd create --data /dev/sdc node1 #如果报错,登录报错的服务器,用root执行: ceph-volume lvm zap --destroy /dev/sdd # 如果zap --destroy报错如下: Running command: /usr/sbin/cryptsetup status /dev/mapper/ stdout: /dev/mapper/ is inactive. --> Zapping: /dev/sdb --> Destroying physical volume /dev/sdb because --destroy was given Running command: /usr/sbin/pvremove -v -f -f /dev/sdb stderr: Wiping internal VG cache stderr: Wiping cache of LVM-capable devices stderr: Device /dev/sdb excluded by a filter. --> Unable to remove vg /dev/sdb --> RuntimeError: command returned non-zero exit status: 5 # 则如下操作: dd if=/dev/urandom of=/dev/sdb bs=512 count=64 # 检查osd状态 [admin@node1 my-cluster]$ sudo ceph health HEALTH_OK [admin@node1 my-cluster]$ sudo ceph -s cluster: id: a1132f78-cdc5-43d0-9ead-5b590c60c53d health: HEALTH_OK services: mon: 3 daemons, quorum mon1,mon2,mon3 mgr: admin(active) osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 6163 MB used, 1193 GB / 1199 GB avail pgs: # 查看osds [admin@node1 my-cluster]$ sudo ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 1.17178 root default -5 0.39059 host node1 0 hdd 0.19530 osd.0 up 1.00000 1.00000 5 hdd 0.19530 osd.5 up 1.00000 1.00000 -3 0.39059 host node2 1 hdd 0.19530 osd.1 up 1.00000 1.00000 4 hdd 0.19530 osd.4 up 1.00000 1.00000 -7 0.39059 host node3 2 hdd 0.19530 osd.2 up 1.00000 1.00000 3 hdd 0.19530 osd.3 up 1.00000 1.00000 ``` ### 4.7 删除osd ``` ceph osd out 10 #out之后,ceph开始重新平衡,拷贝此osd上数据到其它osd,此osd状态变为up且out,10就是osd的编号,取osd.10的数值 systemctl stop ceph-osd@10 #stop osd进程之后,状态变为down 且 out ceph osd crush remove osd.10 #删除 CRUSH 图的对应 OSD 条目,它就不再接收数据了 ceph auth del osd.10 #移除osd认证key ceph osd rm 10 #从osd中删除osd 10,ceph osd tree中移除 # 如果需要移除相关主机 ceph osd crush remove ceph-4 ``` ## 5 检查运行情况 * 检查进程 ``` systemctl status ceph-mon.target systemctl status ceph/*.service systemctl status | grep ceph ``` * 查看存储空间 ``` sudo ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 11 TiB 11 TiB 4.0 GiB 0.04 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS ``` * 查看mon信息 ``` ceph mon stat #查看 mon 状态信息 ceph quorum_status #查看 mon 的选举状态 ceph mon dump #查看 mon 映射信息 ceph daemon mon.mon01 mon_status #查看 mon 详细状态 ``` * 查看osd相关 ``` ceph osd stat #查看 osd 运行状态 ceph osd dump #查看 osd 映射信息 ceph osd perf #查看数据延迟 ceph osd df #详细列出集群每块磁盘的使用情况 ceph osd tree #查看 osd 目录树 ceph osd getmaxosd #查看最大 osd 的个数 ``` * 查看PG信息 ``` ceph pg dump #查看 PG 组的映射信息 ceph pg stat #查看 PG 状态 ceph pg dump --format plain #显示集群中的所有的 PG 统计,可用格式有纯文本plain(默认)和json ``` ## 6 开启MGR监控模块 * 方式一:命令操作 ``` ceph mgr module enable dashboard ``` 如果以上操作报错如下: ``` Error ENOENT: all mgr daemons do not support module 'dashboard', pass --force to force enablement ``` 则因为没有安装`ceph-mgr-dashboard`,在mgr的节点上安装。 ``` yum install ceph-mgr-dashboard ``` * 方式二:配置文件 ``` # 编辑ceph.conf文件 vi ceph.conf [mon] mgr initial modules = dashboard #推送配置 [admin@admin my-cluster]$ ceph-deploy --overwrite-conf config push node1 node2 node3 #重启mgr sudo systemctl restart ceph-mgr@node1 ``` * 查看`mgr`状态,显示`admin(active)` ``` [admin@node1 my-cluster]$ sudo ceph -s cluster: id: a1132f78-cdc5-43d0-9ead-5b590c60c53d health: HEALTH_OK services: mon: 3 daemons, quorum node1,node2,node3 mgr: node1(active) osd: 6 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 0 kB used, 0 kB / 0 kB avail pgs: ``` * 报错处理 ``` # 如果重启ceph-mgr报错,则进行重置 sudo systemctl reset-failed ceph-mgr@node1.service sudo systemctl restart ceph-mgr@node1.service ``` * web登录配置 >默认情况下,仪表板的所有HTTP连接均使用SSL/TLS进行保护。 ``` #要快速启动并运行仪表板,可以使用以下内置命令生成并安装自签名证书: ceph dashboard create-self-signed-cert #创建具有管理员角色的用户: ceph dashboard set-login-credentials admin admin # 以上命令被以下命令代替 ceph dashboard ac-user-create admin password administrator #查看ceph-mgr服务: ceph mgr services { "dashboard": "https://node1.sysit.cn:8443/", } ``` 以上配置完成后,浏览器输入`https://node1.sysit.cn:8443`输入用户名`admin`,密码`admin`登录即可查看  * 特别地 如果dashboard无法正常登录,在`/var/log/messages`中看到如下日志: ``` SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:618) ``` 则需要手动生成证书并添加进去。 ``` openssl req -new -nodes -x509 \ -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \ -keyout dashboard.key -out dashboard.crt -extensions v3_ca ``` 以上会生成'dashboard.crt'和'dashboard.key'两个文件。 ``` ceph config-key set mgr mgr/dashboard/crt -i dashboard.crt ceph config-key set mgr mgr/dashboard/key -i dashboard.key ``` 每个主机配置,$name就是mgr的实例主机名 ``` ceph config-key set mgr/dashboard/$name/crt -i dashboard.crt ceph config-key set mgr/dashboard/$name/key -i dashboard.key ``` 配置hostname和端口号 ``` ceph config set mgr mgr/dashboard/server_addr $IP $ ceph config set mgr mgr/dashboard/server_port $PORT $ ceph config set mgr mgr/dashboard/ssl_server_port $PORT ``` 多个mgr配置,$name 是每个Mgr的主机名 ``` ceph config set mgr mgr/dashboard/$name/server_addr $IP ceph config set mgr mgr/dashboard/$name/server_port $PORT ceph config set mgr mgr/dashboard/$name/ssl_server_port $PORT ``` 重新启用dashboard ``` ceph mgr module disable dashboard ceph mgr module enable dashboard ``` 如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作! 赞赏支持