目录
1、服务端部署
2、Dashboard的配置
3、配置块存储
4、配置对象存储
5、配置文件系统
准备环境 系统版本: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