目录
准备环境 系统版本:centos7.4 x86_64 server 硬件配置:5台vm,1核1G内存,每台node角色的机器至少挂载1块不低于5个G的空闲盘为osd存储 ? ? 主机名 ? ? ? ? ? ? ? ? ip ? ? ? ? ? ? ? ? ? ? ? role ? admin ? ? ? ? ? ?192.168.153.130 ? ? ? ? ? ? ? admin--安装ceph-deploy ? node1 ? ? ? ? ? ?192.168.153.131 ? ? ? ? ? ? ? mon / mgr / osd ? node2 ? ? ? ? ? ?192.168.153.132 ? ? ? ? ? ? ? osd ? node3 ? ? ? ? ? ?192.168.153.133 ? ? ? ? ? ? ? osd ? ceph-client ? ? ?192.168.153.134 ? ? 1.给三台node节点添加一块大小5G以上的磁盘。 2.所有节点修改主机名并相互解析 3.关闭所有机器的防火墙和selinux 4.所有节点创建普通用户并设置密码--所有节点都操作 5.同步时间,保证时间一致 6.配置好yum源 epel 官方源[root@admin ~]# useradd cephu [root@admin ~]# passwd cephu
? 5.确保各 Ceph 节点上新创建的用户都有 sudo 权限--所有节点操作[root@admin ~]# visudo ----在root ALL=(ALL) ALL下面添加: cephu ALL=(root) NOPASSWD:ALL
6.实现ssh无密码登录(admin节点操作)[root@admin ~]# su - cephu [cephu@admin ~]$ ssh-keygen
? 7.将admin节点cephu用户生成的密钥拷贝到各Ceph节点:[cephu@admin ~]$ ssh-copy-id cephu@node1 [cephu@admin ~]$ ssh-copy-id cephu@node2 [cephu@admin ~]$ ssh-copy-id cephu@node3 [cephu@admin ~]$ ssh-copy-id cephu@ceph-client
? 8.在admin节点用root用户添加~/.ssh/config配置文件,并进行如下设置,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了[root@admin ~]# mkdir ~/.ssh [root@admin ~]# vim ~/.ssh/config Host node1 Hostname node1 User cephu ? Host node2 Hostname node2 User cephu ? Host node3 Hostname node3 User cephu
9.添加下载源,安装ceph-deploy(admin节点,root用户)[root@admin ~]# vim /etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph noarch packages baseurl=https://download.ceph.com/rpm-luminous/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
? 更新源,安装ceph-deploy:[root@admin ~]# yum makecache [root@admin ~]# yum update
开启yum缓存[root@admin ~]# vim /etc/yum.conf keepcache=1
安装[root@admin ~]# yum install ceph-deploy vim wget unzip -y ?
10.安装ntp(所有节点) #注意!!选择任何一台机器当ntp时间服务器,其他的节点当时间服务器的客户端跟服务器同步时间 我选择的是admin上:[root@admin ~]# yum install -y ntpdate [root@admin ~]# ntpdate ntp.aliyun.com
部署ceph集群 #注意!!没有特别说明以下所有操作均是在admin节点,cephu用户下执行 1.创建cephu操作的目录:[root@admin ~]# su - cephu [cephu@admin ~]$ mkdir my-cluster ? #之后,所有ceph-deploy命令操作必须在该目录下执行 ?
2.创建集群---这里报错查看后面的错误整理 首先在这里需要先下载一个包并安装否则会报错,然后在创建集群[cephu@admin ~]$ wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip [cephu@admin ~]$ unzip distribute-0.7.3.zip [cephu@admin ~]$ cd distribute-0.7.3 [cephu@admin distribute-0.7.3]$ sudo python setup.py install ?
创建集群[cephu@admin ~]$ cd my-cluster/ [cephu@admin my-cluster]$ ceph-deploy new node1 [cephu@admin my-cluster]$ ls ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
创建成功会有三个文件:ceph.conf, ceph.mon.keyring, and a log file ? 3.安装luminous-12.2.13 目标:在node1,node2,node3三个节点上安装ceph和ceph-radosgw主包 ? 方法1:利用官方脚本全自动安装[cephu@admin my-cluster]$ ceph-deploy install --release luminous node1 node2 node3
#这一步时间很长,容易超时,可以利用手动安装 ? ? ? 如果ceph和ceph-radosgw安装不上,则采用方法2 测试是否安装完成:分别在node1 node2 node3中确认安装版本为12.2.13[cephu@node1 ~]$ ceph --version ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
? ? 方法2:手动部署安装三台机器分别创建:三台node节点相同操作 ? ?1)安装epel源 ? ?# yum install -y epel-release ? ?2)创建Ceph源,内容如下:官方源? ?# vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://download.ceph.com/rpm-luminous/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 ? [Ceph-noarch] name=Ceph noarch packages baseurl=http://download.ceph.com/rpm-luminous/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 ? [ceph-source] name=Ceph source packages baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 ? #下面的是阿里云的ceph源 # vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch 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-luminous/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-luminous/el7/SRPMS enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 ?
? ?3)分别在node1,node2,node3节点执行下面命令安装软件,可以完全手动安装,但需要yum的ceph缓存目录结构 ? ?$sudo yum install ceph ceph-radosgw ?-y ? ? ? 如果因为速度慢导致安装失败可以按ctrl+c,利用它创建的yum缓存目录,手动把安装包下载下来保存到缓存目录/var/cache/yum/x86_64/Ceph/packages目录下 ? 再次执行安装命令: ? ?$sudo yum install ceph ceph-radosgw ?-y ? 测试是否安装完成:分别在node1 node2 node3中确认安装版本为12.2.13 ? ?[cephu@node1 ~]$ ceph --version ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
4.初始化mon:admin节点--cephu用户执行[cephu@admin my-cluster]$ ceph-deploy mon create-initial ?
5.赋予各个节点使用命令免用户名权限:[cephu@admin my-cluster]$ ceph-deploy admin node1 node2 node3
? 6.安装ceph-mgr:只有luminous才有,为使用dashboard做准备[cephu@admin my-cluster]$ ceph-deploy mgr create node1
? 7.添加osd: 注意:各个节点上提供存储空间的磁盘大小不能太小,最好5G以上,注意检查你的磁盘名字[cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node1 [cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node2 [cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node3
命令中/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区需要指定具体分区)。 最后通过如下命令查看集群状态:[cephu@admin my-cluster]$ ssh node1 sudo ceph -s
如果显示health_ok,3个osd up就成功了
在node1上操作 把ceph-mgr和ceph-mon安装在同一个主机上,最好只有一个ceph-mgr[root@node1 ~]# su - cephu
? 1.创建管理域秘钥:[cephu@node1 ~]$ sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' [mgr.node1] key = AQAePadeYsvJLxAA9Pnmib3S+0Kj1jAeuSQcKw== ?
2.开启 ceph-mgr 管理域[cephu@node1 ~]$ sudo ceph-mgr -i node1 ?
3.查看ceph的状态:确认mgr的状态为active[cephu@node1 ~]$ sudo ceph status cluster: ? id: ? ? aec06bc6-428c-49ff-a2c1-2d84808bcb54 ? health: HEALTH_OK services: ? mon: 1 daemons, quorum node1 ? mgr: node1(active, starting) ? osd: 3 osds: 3 up, 3 in data: ? pools: ? 0 pools, 0 pgs ? objects: 0 objects, 0B ? usage: ? 3.01GiB used, 12.0GiB / 15.0GiB avail ? pgs:
? ? 4.打开dashboard模块:加载dashboard模块到内存里面[cephu@node1 ~]$ sudo ceph mgr module enable dashboard ?
5.绑定开启dashboard模块的ceph-mgr节点的ip地址:[cephu@node1 ~]$ sudo ceph config-key set mgr/dashboard/node1/server_addr 192.168.153.136
set mgr/dashboard/node1/server_addr # ip地址为mgr节点的ip地址,也就是node1的ip地址 ? 5.web登录:浏览器地址栏输入: mgr地址:7000
到这里Ceph分布式集群完成!
创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行--也就是规划好的node1节点 创建存储池:[cephu@node1 ~]$ sudo ceph osd pool create rbd 128 128 pool 'rbd' created
? 注释: 创建pool # 若少于5个OSD, 设置pg_num为128。 # 5~10个OSD,设置pg_num为512。 # 10~50个OSD,设置pg_num为4096。 ? ? ? 初始化存储池[cephu@node1 ~]$ sudo rbd pool init rbd
? 准备客户端client(客户端操作): 升级client内核到最新版本 更新前,内核版本为:[root@ceph-client ~]# uname -r 3.10.0-693.el7.x86_64
? 升级方法 导入key[root@client ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
? 安装elrepo的yum源[root@client ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm ?
查看可用的系统内核包[root@client ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available ?
安装内核[root@client ~]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y ?
查看内核默认启动顺序[root@client ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg CentOS Linux (5.7.8-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-f0079ffdc1064b91b9f525935ca9c3e7) 7 (Core)
? 选择处于0位置的新内核为默认启动内核[root@client ~]# grub2-set-default 0 [root@client ~]# reboot ?
重启后的内核版本:[root@client ~]# uname -r 5.7.8-1.el7.elrepo.x86_64 ?
删除旧内核[root@client ~]# yum remove kernel -y ?
client安装ceph: 环境准备参考部署ceph文档开头环境准备的2-5步 ? 安装依赖包、epel、配置ceph源[root@client ~]# yum install -y python-setuptools epel-release [root@client ~]# vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch 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-luminous/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-luminous/el7/SRPMS enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 ? [root@client ~]# yum install ceph ceph-radosgw -y [root@client ~]# ceph --version ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable) ?
在admin节点赋予client使用命令免用户名权限:[cephu@admin my-cluster]# ceph-deploy admin client
? 修改client下该文件的读权限:[root@client ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
? 修改client下的ceph配置文件:这一步是为了解决映射镜像时出错问题[root@client ~]# vi /etc/ceph/ceph.conf #在global section下添加: rbd_default_features = 1 ?
client节点创建块设备镜像:单位是M,这里是4个G[root@client ~]# rbd create foo --size 4096
? client节点映射镜像到主机:[root@client ~]# rbd map foo --name client.admin /dev/rbd0
? client节点格式化块设备:[root@client ~]# mkfs.ext4 -m 0 /dev/rbd/rbd/foo
? client节点mount块设备:[root@client ~]# mkdir /mnt/ceph-block-device #创建挂载点 [root@client ~]# mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载 ?
客户端重起之后,设备需要重新作映射,不然可能会卡死,有需要做开机挂载可以在/etc/rc.local中进行映射和挂载 ? ? # 删除块存储[root@client ~]# umount /mnt/ceph-block-device #客户端先卸载 [root@client ~]# rbd unmap /dev/rbd/rbd/foo1 #取消映射 [root@client ~]# ceph osd pool delete rbd rbd --yes-i-really-really-mean-it #删除pool pool 'rbd_pool' removed ?
# 如果遇到以下错误[root@client ~]# ceph osd pool delete rbd rbd --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
? # 处理方法:[root@node1 ~]# vim /etc/ceph/ceph.conf # 在文件中增加以下行 mon_allow_pool_delete= true [root@node1 ~]# systemctl restart ceph-mon@node1
继续删除即可
由于客户端已经升级了内核,并安装了客户端,在做对象存储是就不在进行客户端配置了
# 在node1上创建rgw对象网关,端口为7480[root@admin ~]# ceph-deploy rgw create node1 [root@node1 ~]# ss -tnlp State ? ? Recv-Q Send-Q Local Address:Port ? ? ? ? ? ? ? Peer Address:Port ? ? ? ? ? ? ? LISTEN ? ? 0 ? ? ?128 ? ? ? ? ? ? *:7480 ? ? ? ? ? ? ? ? ? ? ? ? *:* ? ? ? ? ? ? ? ? ? users:(("radosgw",pid=972,fd=36)) ?
# 在客户端测试连接对象网关。连接对象存储需要用户账号秘钥连接,所以需要再客户端创建用户秘钥 #创建账号秘钥,如下所示(radosgw-admin命令其实是yum -y install ceph-common安装的)[root@client ~]# radosgw-admin user create --uid="newrain" --display-name="newrain" { ? ?"user_id": "newrain", ? ?"display_name": "newrain", ? ?"email": "", ? ?"suspended": 0, ? ?"max_buckets": 1000, ? ?"auid": 0, ? ?"subusers": [], ? ?"keys": [ ? ? ? { ? ? ? ? ? ?"user": "newrain", ? ? ? ? ? ?"access_key": "53HERX0LCC7UV4FT9EFL", ? ? ? ? ? ?"secret_key": "ucN9AYrPofCB1u3PGpEEzIqW6NHNe6F5OTE9qKVy" ? ? ? } ? ], ? ?"swift_keys": [], ? ?"caps": [], ? ?"op_mask": "read, write, delete", ? ?"default_placement": "", ? ?"placement_tags": [], ? ?"bucket_quota": { ? ? ? ?"enabled": false, ? ? ? ?"check_on_raw": false, ? ? ? ?"max_size": -1, ? ? ? ?"max_size_kb": 0, ? ? ? ?"max_objects": -1 ? }, ? ?"user_quota": { ? ? ? ?"enabled": false, ? ? ? ?"check_on_raw": false, ? ? ? ?"max_size": -1, ? ? ? ?"max_size_kb": 0, ? ? ? ?"max_objects": -1 ? }, ? ?"temp_url_keys": [], ? ?"type": "rgw" } ?
# 使用S3连接ceph对象网关 [root@client ~]# #AmazonS3是一种面向Internet的对象存储服务.我们这里可以使用s3工具连接ceph的对象存储进行操作。 [root@client ~]# yum install s3cmd -y #安装s3模块,用于连接对象存储#安装好s3包后就会有s3cmd命令用于连接对象存储,为了方便,我们可以把一些连接参数写成一个.s3cfg文件,s3cmd命令默认会去读这个文件 [root@client ~]# vim /root/.s3cfg #创建文件,并写入一下内容 [default] access_key = 53HERX0LCC7UV4FT9EFL #这个访问秘钥就是我们创建newrain用户时的访问秘钥 secret_key = ucN9AYrPofCB1u3PGpEEzIqW6NHNe6F5OTE9qKVy #这个安全秘钥就是我们创建newrain用户时的安全秘钥 host_base = 192.168.75.129:7480 #对象存储的IP和端口 host_bucket = 192.168.75.129:7480/%(bucket) #桶,对象存储的IP和端口 cloudfront_host = 192.168.75.129:7480 use_https = False ? # s3cmd命令测试连接对象存储 [root@client ceph]# s3cmd mb s3://newrain #创建一个名为newrain的桶,桶的概念可理解为目录 Bucket s3://newrain/ created [root@client ceph]# s3cmd ls #查看桶 2022-01-05 16:19 s3://newrain [root@client ~]# s3cmd put /var/log/yum.log s3://newrain #put文件到桶,即上传文件 upload: /var/log/yum.log -> s3://newrain/yum.log [1 of 1]5014 of 5014 ? 100% in ? 1s ? ? 3.72 KB/s ?done [root@client ~]# s3cmd get s3://newrain/yum.log #get文件到本地,即下载文件到本地 download: s3://newrain/yum.log -> ./yum.log [1 of 1]5014 of 5014 ? 100% in ? 0s ?1106.05 KB/s ?done [root@client ~]# ll #查看文件 total 12 -rw-------. 1 root root 1203 Jan ?1 15:45 anaconda-ks.cfg -rw-r--r--. 1 root root 5014 Jan ?5 16:22 yum.log # 生成带签名的url[root@client ~]# s3cmd signurl s3://newrain/yum.log $(date -d 'now + 1 year' +%s) http://192.168.75.129:7480/newrain/yum.log?AWSAccessKeyId=53HERX0LCC7UV4FT9EFL&Expires=1724326642&Signature=n71mSypF6u0NdHLky43cbT5srsE%3D ?
# 创建Ceph文件存储 # 要运行Ceph文件系统, 你必须先创建至少带一个mds的Ceph存储集群(Ceph块设备和Ceph对象存储不使用MDS)。 # Ceph MDS: Ceph文件存储类型存放与管理元数据metadata的服务。 [cephu@admin my-cluster]$ ceph-deploy mds create node1 node2 node3 #第1步、 在node1节点创建mds服务(最少创建一个mds,也可以做多个mds实现HA) [root@node1 ~]# ceph mds stat #查看mds状态 cephfs-1/1/1 up ?{0=node3=up:active}, 2 up:standby [root@node1 ceph]# #第2步、 一个Ceph文件系统需要至少两个RADOS存储池,一个用于存放数据,一个用于存放元数据,下面我们就来创建这两个池 [root@node1 ceph]# ceph osd pool create ceph_data 16 #创建ceph_data池,用于存数据 [root@node1 ceph]# ceph osd pool create ceph_metadata 8 #创建ceph_metadata池,用于存元数据 #第3步、创建ceph文件系统,并确认客户端访问的节点 [root@node1 ceph]# ceph fs new cephfs ceph_metadata ceph_data ? #cephfs就是ceph文件系统名,即客户端挂载点,ceph_metadata是上一步创建的元数据池,ceph_data是上一步创建的数据此,这两个池的顺序不能乱 new fs with metadata pool 3 and data pool 4 [root@node1 ceph]# ceph fs ls #查看我们创建的ceph文件系统 name: cephfs, metadata pool: ceph_metadata, data pools: [ceph_data ] [root@node1 ceph]# ? ? # 客户端挂载 [root@node1 ~]# cd /etc/ceph [root@node1 ceph]# cat ceph.client.admin.keyring #在node1上查看客户端的秘钥文件内容,这个文件叫ceph.client.admin.keyring,其中admin是用户名 [client.admin] #admin是用户名key = AQDYGeJkiAemGBAAakLZFEr7HQTIDwrmgIg3KA== #这个就是客户端的秘钥 [root@node1 ceph]# [root@client ~]# mkdir /etc/ceph && cd /etc/ceph #在cline客户端创建一个/etc/ceph目录 [root@client ceph]# echo 'AQDYGeJkiAemGBAAakLZFEr7HQTIDwrmgIg3KA==' >> admin.key #新建一个秘钥文件,并把从node1上看到的客户端秘钥复制到这个文件里来 [root@client ceph]# cat admin.key AQDYGeJkiAemGBAAakLZFEr7HQTIDwrmgIg3KA== [root@client ceph]# mkdir /cephfs_data #先创建一个目录作为挂载点 [root@client ceph]# mount.ceph node1:6789:/ /cephfs_data/ -o name=admin,secretfile=/etc/ceph/admin.key #解读:node1:6789:/ /cephfs_data/,其中6789是mon的端口,客户端挂载连接找mon的,因为我们node1上创建了3个mon,所以这里写node2,node3都可以,斜杠表示找根,找node1的根就是找我们在node1上创建的cephfs文件系统,/cephfs_data/表示挂载到本地的ceph_data目录,-o表示指定参数选项,name=admin,secretfile=/etc/ceph/admin.key 表示使用用户名为admin,秘钥使用/etc/ceph/admin.key秘钥文件进行连接[root@client ceph]# df -h #查看是否挂载了 Filesystem ? ? ? ? ? ? ? Size Used Avail Use% Mounted on devtmpfs ? ? ? ? ? ? ? ? 475M ? ? 0 475M ? 0% /dev tmpfs ? ? ? ? ? ? ? ? ? 487M ? ? 0 487M ? 0% /dev/shm tmpfs ? ? ? ? ? ? ? ? ? 487M ? 14M 473M ? 3% /run tmpfs ? ? ? ? ? ? ? ? ? 487M ? ? 0 487M ? 0% /sys/fs/cgroup /dev/mapper/centos-root ?6.2G ?1.6G ?4.7G ?26% / /dev/sda1 ? ? ? ? ? ? ? 1014M 138M 877M ?14% /boot tmpfs ? ? ? ? ? ? ? ? ? ? 98M ? ? 0 ? 98M ? 0% /run/user/0 192.168.118.128:6789:/ ? 532M ? ? 0 532M ? 0% /cephfs_data