A-A+
Ceph 安装部署、配置
操作系统环境:
CentOS 7.5
Ceph 简介
Ceph 集群 至少需要一个CephMonitor 和两个OSD 守护进程, 运行ceph 文件系统客户端时则必须要用元数据服务器 (MDS)Metadata Server
- Ceph OSDs: 功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
- Monitors: 维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
- MDSs: 为ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
一. 操作系统预安装第三方依赖、配置yum源
1 2 3 4 5 6 7 8 9 10 |
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 或者: yum install epel-release -y ceph需要的库: snappy leveldb gdisk python-argparse gperftools-libs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#配置ceph yum 源,CentOS 7 (el7): rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-0.el7.noarch.rpm # 境外下载太慢,可以选择网易的镜像地址,下面内容保存为ceph.repo(centos7)即可 [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.163.com/ceph/rpm-octopus/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://mirrors.163.com/ceph/rpm-octopus/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://mirrors.163.com/ceph/rpm-octopus/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc #或者也可以直接从下面地址下载rpm包 https://download.ceph.com/rpm-luminous #安装第三方依赖 yum install snappy leveldb gdisk python-argparse gperftools-libs -y |
二. 安装ceph
1 2 |
#安装 yum install ceph -y |
三. ceph 集群安装
1 2 3 4 5 6 7 8 9 10 11 |
环境安排: node0: admin ,ceph-deploy节点 node1: monitor 监控节点 node2: OSD 节点 node3: OSD 节点 node4: ceph-client 节点 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#依赖安装 yum install snappy leveldb gdisk python-argparse gperftools-libs -y #预 安装 yum-plugin-priorities并启用 rhel-7-server-optional-rpms 软件库 yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms #安装ceph-deploy工具 ,操作节点:node0, admin: rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-0.el7.noarch.rpm yum install ceph-deploy -y #admin服务器配置 hosts 39.99.147.41 node1 39.99.128.64 node2 39.99.148.33 node3 |
3.1. 安装NTP服务(所有节点,尤其是monitor节点)
1 |
yum install ntp ntpdate ntp-doc -y |
3.2. 安装SSH服务器(centos7正常都已经安装,已安装忽略)
1 |
yum install openssh-server -y |
3.3.创建部署CEPH的用户(定义:ceph-cluster, 密码:hylink@123)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#ceph-deploy 需要用普通用户登录各个节点, --username {username} 使用,除了ceph,ceph Infernalis 版本 起 ,ceph这个用户保留给守护进程使用。 #创建用户 (密码:test@123,admin节点也需要) ssh root@node1 useradd -d /home/ceph-cluster -m ceph-cluster passwd ceph-cluster ssh root@node2 useradd -d /home/ceph-cluster -m ceph-cluster passwd ceph-cluster ssh root@node3 useradd -d /home/ceph-cluster -m ceph-cluster passwd ceph-cluster #确认各个节点 新创建的用户 ceph-cluster 有sudo权限 echo "ceph-cluster ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph-cluster chmod 0440 /etc/sudoers.d/ceph-cluster #admin节点也要创建ceph-cluster,同时增加sudo权限,同时做免密钥登录到其他节点(用户:ceph-cluster,不能是root) useradd -d /home/ceph-cluster -m ceph-cluster passwd ceph-cluster echo "ceph-cluster ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph-cluster chmod 0440 /etc/sudoers.d/ceph-cluster |
3.4.允许无密码SSH登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# a. 生成密钥对 (admin节点上生成私钥,拷贝至node1、node2、node3,方便使用ceph-deploy工具直接管理其他节点) su ceph-cluster ssh-keygen ssh-copy-id ceph-cluster@node1 ssh-copy-id ceph-cluster@node2 ssh-copy-id ceph-cluster@node3 #具体操作如下: [ceph-cluster@admin ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ceph-cluster/.ssh/id_rsa): Created directory '/home/ceph-cluster/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ceph-cluster/.ssh/id_rsa. Your public key has been saved in /home/ceph-cluster/.ssh/id_rsa.pub. The key fingerprint is: SHA256:XkXFaxQhduXZ/DFCjxD5M4C0syVQibnlcjQYYwl3pKk ceph-cluster@admin The key's randomart image is: +---[RSA 2048]----+ | ..*X=oo*+=+.| | o=**.=oo=oo| | o=+..++ *+| | .o o=. ++ +| | E S.. .o .| | . . | | . | | | | | +----[SHA256]-----+ #b. 复制密钥对到其他节点 (admin 生成密钥的公钥拷贝到node1、node2、node3) ssh-copy-id ceph-cluster@node1 ssh-copy-id ceph-cluster@node2 ssh-copy-id ceph-cluster@node3 #操作如下: [root@admin ~]# su ceph-cluster [ceph-cluster@admin root]$ ll^C [ceph-cluster@admin root]$ ssh-copy-id ceph-cluster@node1 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ceph-cluster/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ceph-cluster@node1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'ceph-cluster@node1'" and check to make sure that only the key(s) you wanted were added. # c. 做一个ssh config的管理,简化ssh操作,修改 ~/.ssh/config 文件,内容如下: Host node1 Hostname node1 User ceph-cluster Host node2 Hostname node2 User ceph-cluster Host node3 Hostname node3 User ceph-cluster |
3.5. 联网
- ceph 的各种OSD 进程通过网络 互联同时向monitors 上报 状态,确认网络是通的
- 端口
- ceph monitor使用6789 端口,osd 之间默认用6800:7300 这个范围内段鸥通信
- centos7 firewalld 操作: firewall-cmd --zone=public --add-port=6789/tcp --permanent && firewall-cmd --reload
- SELIINUX , setenforce 0 或者修改selinux 配置为disabled
3.6. 创建集群
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
注意: 如果使用普通用户登录,不能使用sudo 因为ceph-deploy 不会在远程主机调用sudo ,解决办法(官网介绍,未测试): 禁用 requiretty 在某些发行版(如 CentOS )上,执行 ceph-deploy 命令时,如果你的 Ceph 节点默认设置了 requiretty 那就会遇到报错。可以这样禁用此功能:执行 sudo visudo ,找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty ,这样 ceph-deploy 就能用 ceph 用户登录并使用 sudo 了。 # 安装错误 ,清楚卸载集群执行 ,修改{ceph-node} 为实际节点名字比如:admin ,node1,node2,node3 等等 ceph-deploy purge {ceph-node} #创建集群 sudo mkdir /my-cluster cd /my-cluster #初始化集群 ,会在当前母生成ceph 配置文件,一个moitor keyring 和一个日志文件 ceph-deploy new node1 # 修改副本数3 为2 ,默认副本数是3,增加下面配置到ceph.conf,配置到global osd pool default size = 2 #如果多个网卡需要指定下网卡地址,配置到global public network = {ip-address}/{netmask} #安装ceph [ceph-cluster@admin my-cluster]$ ceph-deploy install admin node1 node2 node3 #初始化monitors 和获取keys ceph-deploy mon create-initial # 复制配置文件和admin的key到其他ceph节点这样可以用ceph cli 不需要指定monitor地址和ceph.client.admin.keyring 执行命令 ceph-deploy admin node1 node2 node3 # 增加两个osd,操作如下图 ceph-deploy osd create --data /dev/vdb node2 ceph-deploy osd create --data /dev/vdb node3 |
# 添加OSD 截图
注意:新版本的ceph中已经去掉了 ceph-deploy osd prepare/activate 这两个命令,也就是说不能通过制定不同目录实现弄多个osd节点的部署方式了。官网未给出,所以只能使用磁盘或者lvm
添加node2 osd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 发布一个manager 守护进程 ceph-deploy mgr create node1 #检查节点健康状况 [ceph-cluster@admin my-cluster]$ ssh node1 sudo ceph health HEALTH_OK # 查看集群健康状况 [ceph-cluster@admin my-cluster]$ ssh node1 sudo ceph -s cluster: id: 4ebd3579-dc6d-4ead-903d-faf03d0bdcc1 health: HEALTH_OK services: mon: 1 daemons, quorum node1 mgr: node1(active) osd: 2 osds: 2 up, 2 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 2.0 GiB used, 36 GiB / 38 GiB avail pgs: |
#查看集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 增加monitors 节点 ceph-deploy mon add node2 # 增加monitor节点的时候也报了一个错误 admin_socket: exception getting command descriptions: [Errno 2] No such file or direc # 解决办法:public network = 172.20.233.0/24 添加到/my-cluster/ceph.conf 中,然后推送到节点上 ceph-deploy --overwrite-conf admin admin node1 node2 node3 sudo ceph -s # 执行结果 [ceph-cluster@admin my-cluster]$ sudo ceph -s cluster: id: 4ebd3579-dc6d-4ead-903d-faf03d0bdcc1 health: HEALTH_OK services: mon: 2 daemons, quorum node2,node1 mgr: node1(active) osd: 2 osds: 2 up, 2 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 2.0 GiB used, 36 GiB / 38 GiB avail pgs: #再次执行 ceph-deploy mon add node2 ,恢复正常,见下图 |
# 解决添加monitor节点 错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#启动dashboard ceph mgr module enable dashboard #这里遇到一个错误(原因是找不到/etc/ceph/ceph.client.admin.keyring,需要从当时最开始初始化时生成的目录拷贝到这个目录去) [ceph-cluster@admin my-cluster]$ ceph mgr module enable dashboard 2020-02-25 11:03:19.663 7f8f3b157700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory 2020-02-25 11:03:19.663 7f8f3b157700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication [errno 2] error connecting to the cluster # 解决办法: sudo cp ceph.client.admin.keyring /etc/ceph/ sudo chmod +r /etc/ceph/ceph.client.admin.keyring |
四. 配置CEPHFS
- 增加一个RGW实例,配置存储和获取对象数据
|
- # 存储 查询对象数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
a. 设置一个对象名 b. 指定一个池子 # ceph client 的查询集群映射是通过CRUSH算法计算如何将对象映射到一个放置组 然后再动态计算将放置组分配给ceph osd 进程, 要查找对象位置, 只需要提供对象名和池名即可 #练习: # 先需要为数据池映射一个对象名 #参考:ceph osd map {poolname} {object-name} ceph osd map mytest testfile #### mytest 数据池名字; testfile 为object-name echo "testfile" >> /my-cluster/testfile.txt ceph osd pool create mytest ## mytest 为池名 rados put testfile ./testfile.txt --pool=test #### testfile 为object 名字, ./testfile.txt 是文件路径 # 查询ceph 是否存储这个对象: rados -p mytest ls #定位对象存储位置 ceph osd map mytest ## mytest 为池名 # 删除对象 rados rm testfile --pool=mytest # 删除池 rados osd pool rm mytest #操作: # 先配置ceph-client节点 ceph-deploy install ceph-client # 下发配置 ceph-deploy admin ceph-client |