供测试或开发 RADOS 用的 Ceph 群集简易部署
1. 先决条件
拥有基本的 Ceph 词汇知识(例如:Monitor、OSD、RADOS、RADOS 网关、RBD、MDS 及 CephFS)。
推荐阅读,至少速读,Ceph Hammer 或 master 分支 的结构文件。
最少 7 台相同的 CentOS 7.2 x86_64 系统。此指南假设 KVM 虚拟计算机(磁盘设备是 vdb、vdc 等)但改用实体硬件应该问题不大。
- 安装 = Minimal,及一个可用的时间长注程序(即是可靠的 NTP 来源)
- 5GB 系统磁盘、swap = 512MiB,及主目录 = 3GiB
- 2GiB 内存及每台系统一个虚拟处理器
- 每台系统一个固定的 IP
所有系统必须能用简称(hostname -s)互相 ping。要是没有 DNS 服务,可采用一致的 /etc/hosts 档,内有所有简称(而不是群集的 FQDN)。
2. 描述
我们将会部署:
- 一个管理节点、
- 一个监视器、
- 两个 OSD(存储节点)、
- 一个 RADOS 网关(它为 Ceph 提供 S3 似的访问模式)、
- 一个供 CephFS 用的 MDS、
- 及一个 Ceph 客端系统。
监视器在一个 PAXOS 群集中运作,因此生产用时必须有三个(或五个),但我们可用一个监视器作测试之用。
一个生产用的 Ceph 群集需要最少三个 OSD,因为每样对象缺省都会被存储三次,但我们将会用两个 OSD,并编辑配置文件来反映这个事实。
3. 警告
被创建出来的测试群集并不适用于生产用。请勿按此指引创建生产系统,因为:
- 我们只部署了一个监视器,而不是一个 PAXOS 群集,
- 我们只部署了两个 OSD,因此对象只拥有两个(而不是三个)复制本
我们没有采用正式、独立的量产型和可管理的乙太网界面,
未设置CRUSH(Controlled Replication Under Scalable Hashing)结构,
- 未将系统加固,
我们选用了 ceph-deploy 用户,但实际部署最起码会混淆该用户名称,
- 未测量性能。
4. RADOS 群集安装
4.1. 系统名称
- c7-ceph-admin
- c7-ceph-mon0
- c7-ceph-osd0
- c7-ceph-osd1
4.2. 防火墙设置
监视器缺省在 tcp:6789 上聆听,在此在 c7-ceph-mon0 上执行:
# firewall-cmd --zone=public --add-port=6789/tcp --permanent # firewall-cmd --reload
OSD 在一组端口上聆听,缺省为 tcp:6800-7300,因此在 c7-ceph-osd{0,1} 上执行:
# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent # firewall-cmd --reload
4.3. Yum 软件库设置
在所有主机上,安装来自 centos-extras 的 centos-release-ceph 组件:
# yum -y install --enablerepo=extras centos-release-ceph
4.4. ceph-deploy 用户
在所有主机上,创建一个 ceph-deploy 用户,连同 sudo/NOPASSWD 功能:
# adduser ceph-deploy # echo myPassword | passwd ceph-deploy --stdin # cat << EOF >/etc/sudoers.d/ceph-deploy ceph-deploy ALL = (root) NOPASSWD:ALL Defaults:ceph-deploy !requiretty EOF # chmod 440 /etc/sudoers.d/ceph-deploy
注:请勿采用 ceph 用户。Ceph 长注程序在 Hammer 以 root 身份运行,但 Infernalis 及其后版本改用 ceph 用户。
在 ceph-admin 以 ceph-deploy 身份创建一个拥有口令的 ssh 金钥:
$ ssh-keygen -b 4096 (do not use an empty passphrase) $ ssh-agent bash $ ssh-add $ for node in c7-ceph-admin c7-ceph-mon0 c7-ceph-osd0 c7-ceph-osd1 ; do ssh-copy-id $node ; done
4.5. 停用 SELinux
采用 Ceph Hammer 必须停用 SELinux。Ceph Infernalis 及其后版本已含有正式的 SELinux 政策。
$ for node in c7-ceph-admin c7-ceph-mon0 c7-ceph-osd0 c7-ceph-osd1 ; do ssh $node sudo sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ; done $ for node in c7-ceph-mon0 c7-ceph-osd0 c7-ceph-osd1 ; do ssh $node sudo reboot ; done $ sudo reboot
在 ceph-admin 上再次登录成为 ceph-deploy:
$ ssh-agent bash $ ssh-add
4.6. 组件安装
在 ceph-admin 上以 ceph-deploy 身份安装监视器和 OSD 的 Ceph 组件。
$ sudo yum -y install ceph-deploy $ ceph-deploy install --mon c7-ceph-mon0 $ ceph-deploy install --osd c7-ceph-osd0 c7-ceph-osd1
注意:上游的 ceph-deploy 缺省使用 ceph.com 的 yum 软件库。StorageSIG 版的 ceph-deploy 不会这样做,因为 StorageSIG Ceph 的软件库预计快会被启用。
4.7. 群集安装
在 ceph-admin 上以 ceph-deploy 身份创建群集配置文件:
$ ceph-deploy new c7-ceph-mon0
加入设置:10GiB 日志、每样对象采用(一般及最少)2 个复制本、等。
$ cat << EOF >> ceph.conf osd_journal_size = 10000 osd_pool_default_size = 2 osd_pool_default_min_size = 2 osd_crush_chooseleaf_type = 1 osd_crush_update_on_start = true max_open_files = 131072 osd pool default pg num = 128 osd pool default pgp num = 128 mon_pg_warn_max_per_osd = 0 EOF
在 ceph-admin 上以 ceph-deploy 身份创建监视器:
$ ceph-deploy mon create-initial
在 ceph-admin 上以 ceph-deploy 身份安装及设置群集的命令行界面:
$ ceph-deploy install --cli c7-ceph-admin $ ceph-deploy admin c7-ceph-admin
由于我们不会进行升级,优化 CRUSH 的设置:
$ sudo ceph osd crush tunables optimal
现在将两个 12GiB 硬盘连到每台 OSD 并重新开机。这些硬盘会成为 vdb 及 vdc。
在 ceph-admin 上以 ceph-deploy 身份删除 c7-ceph-osd0 和 c7-ceph-osd1 上的 vdb 及 vdc:
$ ceph-deploy disk zap c7-ceph-osd0:vdb c7-ceph-osd1:vdb c7-ceph-osd0:vdc c7-ceph-osd1:vdc
c7-ceph-osd0 和 c7-ceph-osd1 的 vdc 上创建一个分区,填满全个硬盘。 待做
Add parted command here
在 ceph-admin 上以 ceph-deploy 身份安装及设置 OSD,利用 vdb 作为数据库(一般采用大型的 RAID0 转盘),然后以 vdc1 作为它的日志(一般采用 SSD 上的分区):
$ ceph-deploy osd prepare c7-ceph-osd0:vdb:vdc1 c7-ceph-osd1:vdb:vdc1
在 ceph-admin 上以 ceph-deploy 身份引导 OSD。请留意先前的步骤分割了 vdb,因此我们引导 OSD 时指定以 vdb1 存放数据:
$ ceph-deploy osd activate c7-ceph-osd0:vdb1:vdc1 c7-ceph-osd1:vdb1:vdc1
要是你够快,以下指令会先输出 HEALTH_WARN,再过一会便输出 HEALTH_OK:
$ sudo ceph -s
4.8. RADOS 群集监控
群集健康状态:
$ sudo ceph health HEALTH_OK
业集现况:
$ sudo ceph status cluster 02b3e99f-b8a6-4fa0-a2ea-f70c46340ee6 health HEALTH_OK monmap e1: 1 mons at {c7-ceph-mon0=192.168.2.181:6789/0} election epoch 2, quorum 0 c7-ceph-mon0 osdmap e12: 2 osds: 2 up, 2 in pgmap v202: 65 pgs, 2 pools, 179 kB data, 1 objects 68740 kB used, 24486 MB / 24553 MB avail 65 active+clean
监视状况:
$ sudo ceph mon_status {"name":"c7-ceph-mon0","rank":0,"state":"leader","election_epoch":2,"quorum":[0],"outside_quorum":[],"extra_probe_peers":[],"sync_provider":[],"monmap":{"epoch":1,"fsid":"02b3e99f-b8a6-4fa0-a2ea-f70c46340ee6","modified":"0.000000","created":"0.000000","mons":[{"rank":0,"name":"c7-ceph-mon0","addr":"192.168.2.181:6789\/0"}]}}
枚举 OSD:
$ sudo ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.01999 root default -2 0.00999 host c7-ceph-osd0 0 0.00999 osd.0 up 1.00000 1.00000 -3 0.00999 host c7-ceph-osd1 1 0.00999 osd.1 up 1.00000 1.00000
显示空间:
$ sudo ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 24553M 24486M 68868k 0.27 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS rbd 0 0 0 12243M 0
5. RADOS 使用方法
5.1. 创建集用池
若要创建集用池:
$ sudo ceph osd pool create mypool 1 pool 'mypool' created $ sudo ceph osd lspools 0 rbd,4 mypool, $ sudo ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 24553M 24486M 68912k 0.27 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS rbd 0 0 0 12243M 0 mypool 4 0 0 12243M 0
5.2. 对象调处
若要创建一件对象及上载文件至该对象:
$ echo "test data" > testfile $ sudo rados put -p mypool testfile testfile $ sudo rados -p mypool ls testfile
若要设置该对象的关键码/值:
$ sudo rados -p mypool setomapval testfile mykey myvalue $ sudo rados -p mypool getomapval testfile mykey (length 7) : 0000 : 6d 79 76 61 6c 75 65 : myvalue
若要下载文件:
$ sudo rados get -p mypool testfile testfile2 $ md5sum testfile testfile2 39a870a194a787550b6b5d1f49629236 testfile 39a870a194a787550b6b5d1f49629236 testfile2
6. Ceph 客户端
6.1. 系统名称
- c7-ceph-client
6.2. Yum 软件库设置
StorageSIG Ceph 软件库仍未公开,因此以下步骤行不通。请手动从 cbs.centos.org 提取 storage7-ceph-hammer-testing 建设标签。
安装来自 centos-extras 的 centos-release-ceph 组件:
# yum -y install --enablerepo=extras centos-release-ceph
6.3. Ceph 组件
你需要以下组件才能利用 C/C++、Python 及像 S3 般访问 Ceph 群集:
# yum -y install librados2-devel python-rados python-boto
6.4. 设置 Ceph 访问
即将出现。
7. RADOS C++ 程序界面
即将出现。
8. RADOS 网关安装及设置
8.1. 安装
系统名称:
- c7-ceph-radosgw
停用 SELinux:
$ sudo sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config $ sudo reboot
安装 Apache 网页服务器及 mod_ssl:
$ sudo yum -y install httpd mod_ssl openssl $ sudo firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent $ sudo firewall-cmd --reload success
要是你的测试环境没有 PKI,请创建一张自行签署的凭证:
$ openssl genrsa -out ca.key 2048 $ openssl req -new -key ca.key -out ca.csr \ -subj "/C=KI/ST=Phoenix Islands/L=Nikumaroro/O=NR16020/OU=Ren Tree/CN=$(hostname -f)" $ openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt $ sudo cp ca.crt /etc/pki/tls/certs $ sudo cp ca.key /etc/pki/tls/private/ca.key $ sudo cp ca.csr /etc/pki/tls/private/ca.csr
当中:
/C=: 2 个字母的 [ISO 3166 https://en.wikipedia.org/wiki/ISO_3166] 国家码(KI=Kiribati)
- /ST=: 本地或省份(Phoenix Islands)
- /L=: 地区(Nikumaroro)
- /O=: 机构名称(NR16020)
- /OU=: 机构单位名称(Ren Tree)
- /CN=: 通用名称。采用 FQDN。
设置 Apache 网页服务器:
$ sudo sed -i -e 's,^SSLCertificateFile.*,SSLCertificateFile\ /etc/pki/tls/certs/ca.crt,g' \ /etc/httpd/conf.d/ssl.conf $ sudo sed -i -e 's,SSLCertificateKeyFile.*,SSLCertificateKeyFile\ /etc/pki/tls/private/ca.key,g' \ /etc/httpd/conf.d/ssl.conf
引导及启用 Apache:
$ sudo service httpd configtest Syntax OK $ sudo systemctl start httpd $ sudo systemctl enable httpd
由于我们的群集是一个测试/示范群集,我们将会安装所谓的 简易 RADOS 网关。如何为求容错而安装 联合网关(采用分布不同地域的 Ceph 存储服务)已超越本文章涵盖的范围。
8.2. 简易 RADOS 网关设置
在 c7-ceph-admin 上以 ceph-deploy 身份执行:
$ ceph-deploy install --rgw c7-ceph-radosgw $ ceph-deploy rgw create c7-ceph-radosgw (...) [ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host c7-ceph-radosgw and default port 7480
在 c7-ceph-radosgw 上以 ceph-deploy 身份执行:
$ sudo vi /etc/httpd/conf.d/rgw.conf
然后加插以下内容:
<VirtualHost *:80> ServerName localhost DocumentRoot /var/www/html ErrorLog /var/log/httpd/rgw_error.log CustomLog /var/log/httpd/rgw_access.log combined # LogLevel debug RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] SetEnv proxy-nokeepalive 1 ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/ </VirtualHost>
编辑 SSL VirtualHost 的设置:
$ sudo vi /etc/httpd/conf.d/ssl.conf
然后在文件底部,于 </VirtualHost> 标签前插入:
ErrorLog /var/log/httpd/rgw_error.log CustomLog /var/log/httpd/rgw_access.log combined # LogLevel debug RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] SetEnv proxy-nokeepalive 1 ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/
重新引导 httpd:
sudo systemctl restart httpd
创建一名用户:
$ sudo radosgw-admin user create --uid="testuser" --display-name="First User"
过了一会(在采用 SSD 为后台的 Ceph 群集约需十秒),便会输出:
{ "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "testuser", "access_key": "ACCESS_KEY", "secret_key": "SECRET_KEY" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "temp_url_keys": [] }
请保留 ACCESS_KEY 和 SECRET_KEY 的值。
8.3. 利用 S3 程序界面测试网关
在 c7-ceph-client 上创建一个含有以下内容的 s3test.py 档:
import boto import boto.s3.connection access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 'c7-ceph-radosgw', is_secure=True, calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.create_bucket('my-new-bucket') for bucket in conn.get_all_buckets(): print "{name}\t{created}".format( name = bucket.name, created = bucket.creation_date, ) bucket = conn.delete_bucket('my-new-bucket')
执行它:
$ python s3test.py my-new-bucket 2016-01-30T22:05:30.000Z
截至此处,你便拥有一个可用的 S3 网关。你可在 官方教程 找到更多关于 python-boto 的信息。
9. MDS 及 CephFS 的安装
即将出现。
10. 总结
此页的灵感源自 Ceph 社群 的快速入门指南。
请参考 Ceph 社群的文档 主页 取得更详尽的数据。
Translation of revision 32