ceph部署教程


Ceph部署教程 注意: 关于翻译,术语尤其是不懂的术语保留英文。 本文针对Debian系列操作系统。 如果是虚拟机,不要用重量级的桌面环境。最好不用桌面环境,如果用的话,推荐 LXDE。 准备 如上图,我们一共需要4个节点,一个admin-node用于运行ceph-deploy, 一个 monitor节点以及两个osd节点。 安装ceph-deploy 在admin-node上:   Hosts 在admin node, 添加如下内容到 /etc/hosts :   在本例中, {hostname} 是 node1 , node2 , 和 node3 。 忽略本步骤,你可能遇到 node1 无法解析的错误。 安装NTP 为防止clock shifting,我们应再每个节点上安装ntp,尤其是monitor节点。 对每个节点:   一般如果使用统一操作系统,ntp服务器都是一样的。如果不是,确保ntp服务开启并使 用同一NTP服务器。 如果不是新版,需要使sudo无需密码即可执行 ceph-deploy 需要在节点上执行一些命令,其中有些是需要 sudo 权限的。在老版 中, ceph‐deploy 并不提示密码,所以需要我们使得执行sudo不需要密码,但新版的 ceph‐deploy 可以提示密码了,所以无需本步骤。 在每个节点上: # Add release key $ wget ‐q ‐O‐ 'https://download.ceph.com/keys/release.asc' | sudo apt‐key  add ‐ # Add Ceph package source $ echo deb http://download.ceph.com/debian‐{ceph‐stable‐release}/  $(lsb_release ‐sc) main | sudo tee /etc/apt/sources.list.d/ceph.list # update repository and install ceph‐deploy $ sudo apt‐get update && sudo apt‐get install ceph‐deploy {ip‐address} {hostname}.{domain‐name} {hostname}          sudo apt‐get install ntp 创建新用户。因为我们在装系统时已经创建了一个用户,所以本步可以忽略。   使该用户运行sudo时,无需密码   如果不是新版,要使得无需密码登录SSH 同样是由于老版中 ceph‐deploy 不会提示密码, 新版不需要本步。 *在admin-node上: 生成SSH key。注意执行这个命令时,不要使用sudo,不要使用root用户执行,否 则,ceph-deploy在其它节点运行时,不会使用sudo:   注意要设密码为空 将公钥(public key)复制到其它节点   添加如下内容到 ~/.ssh/config : sudo useradd ‐d /home/{username} ‐m {username} sudo passwd {username} echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee  /etc/sudoers.d/{username} sudo chmod 0440 /etc/sudoers.d/{username} ssh‐keygen ssh‐copy‐id {username}@{node‐hostname}   部署storage cluster 如果在部署过程中出错了,可以通过以下命令回滚:   如果同时你想删除安装文件,执行一下命令:   准备 Host node1    Hostname node1    User {username} Host node2    Hostname node2    User {username} Host node3    Hostname node3    User {username} ceph‐deploy purgedata {ceph‐node} [{ceph‐node}] ceph‐deploy forgetkeys ceph‐deploy purge {ceph‐node} [{ceph‐node}] 在部署过程中, ceph-deploy 会生成很多配置文件。为了清楚,我们建议把它们都放到 同一目录下。在. admin-node上:   下面的步骤中,当我们说在admin-node上运行命令时,我们应在此目录下运行,切 记。 创建集群 在admin-node上: 创建集群   该命令会生成若干文件,其中有ceph的配置文件,这个文件将频繁使用。 在本例中,执行   配置OSD节点个数,本例中是2个。具体方法是在ceph配置文件中的 [global] 部 分,添加:   在所有节点上安装ceph,注意命令还是在admin-node上执行,不是在其它节点上执 行。   PS: 在回滚时,如果我们运行了 ceph‐deploy purge ,那么该安装命令需要重新执 行。 # create a directory to store generated config files mkdir ceph‐cluster cd ceph‐cluster ceph‐deploy new {initial‐monitor‐node(s)} ceph‐deploy new node1 osd pool default size = 2 ceph‐deploy install {ceph‐node} [{ceph‐node} ...] 重点来了: 在默认情况下, ceph‐deploy 会添加默认的镜像网站到apt的source list,但这 个网址速度太慢(或有时太慢),以至于安装命令失败。 此时,需要我们手动安装 ceph 。一共2步: 添加如下内容到 /etc/apt/sources.list.d/ceph.list :     在本例中:   配置初始monitor(s)。并收集私钥。   该命令会生出如下文件: {cluster‐name}.client.admin.keyring  {cluster‐name}.bootstrap‐osd.keyring  {cluster‐name}.bootstrap‐mds.keyring  {cluster‐name}.bootstrap‐rgw.keyring 添加OSD节点 OSD节点用于存储数据以及日志。 数据存储的硬件 数据存储可以有很多配置。不同的配置会造成成本以及性能大不同。 deb http://mirrors.ustc.edu.cn/ceph/debian‐{release‐name}/  {debian‐codename} main sudo apt‐get install ceph ceph‐osd ceph‐mon radosgw ceph‐deploy install admin‐node node1 node2 node3 ceph‐deploy mon create‐initial 多个进程(daemon)在同一块硬盘上,同时执行多个OS操作,以及处理多个读写 请求,将使得系统性能大幅下降。 文件系统: btrfs 不够稳定,不适于生产环境,但另一方面,该文件系统支持日志 和数据的同时写入; XFS 够稳定,但不能实现日志和数据的同时写入。 重点: 因为ceph需要先写入日志,然后再发送ACK(至少XFS是这样的),所以,权 衡日志和OSD性能非常重要。 最佳实践 硬盘有很多的限制:寻道时间、访问时间、读写时间,以及总吞吐量。这些物理限制将 影响总体的系统性能——尤其是在恢复(recovery)时。 大多数OSD慢的原因是由于在同一硬盘上(与分区无关),运行多个OS,多个OSD进 程,多个日志。所以我们的建议是: 在不同的硬盘上运行OS,存储OSD数据,存储OSD日志。 在生产环境中,官方文档推荐使用 XFS 文件系统。不要使用 ext4 。 在同一硬盘上(与分区无关)运行多个OSD,不是好主意。 在同一硬盘上(与分区无关)运行一个OSD,一个monitor,或元数据服务器,不是 好主意。 集成OSD节点到集群 Ceph OSD进程会写入数据以及日志。我们需要把数据和日志分到两个硬盘上。 So you need to provide a disk for the OSD and a path to the journal partition(this is the most common configuration). 列出硬盘 在admin node:   准备硬盘 如果硬盘上原来有分区表,我们需要删之。 在 admin node上: ceph‐deploy disk list {node‐name [node‐name]...}   再次提醒,该命令及将删除硬盘上的所有数据 在本例中,我们可以:   准备OSD 在admin node:   激活OSD 在admin node:   分区在运行 prepare 时,会自动创建. activate 将启动OSD并把它集成到集群中。 Create OSDs = prepare + activate create 是 prepare , activate 的组合。不过,也有人说这个命令执行不成功。 在 admin node:   结束 在admin-node: ceph‐deploy disk zap {osd‐server‐name}:{disk‐name} # assume that /dev/sda is for OS ceph‐deploy disk zap node2:/dev/sdb # for osd data ceph‐deploy disk zap node2:/dev/sdc # for journal ceph‐deploy osd prepare {node‐name}:{data‐disk}[:{journal‐disk}] ceph‐deploy osd prepare osdserver1:sdb:/dev/ssd ceph‐deploy osd prepare osdserver1:sdc:/dev/ssd ceph‐deploy osd activate {node‐name}:{data‐disk‐partition}[:{journal‐ disk‐partition}] ceph‐deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1 ceph‐deploy osd activate osdserver1:/dev/sdc1:/dev/ssd2 ceph‐deploy osd create {node‐name}:{disk}[:{path/to/journal}] ceph‐deploy osd create osdserver1:sdb:/dev/ssd1 将ceph配置文件以及私钥分发到各节点   确保当前用户对 ceph.client.admin.keyring 拥有读( read ) 权限   查看集群是否正常运行   正常,应打印 HEALTH_OK . 添加更多的monitor节点,首次部署不需要 Ceph storage cluster应至少有一个monitor。为实现高可用性,一个典型的集群应拥有 多个monitor。   如前所述,我们应在monitor节点上安装NTP,并确保ntp服务开启且使用同一ntp服务 器。   添加更多的管理节点,首次部署不需要 在 admin node,   然后将此新节点转成管理节点, ceph‐deploy admin {admin‐node} {ceph‐node} [{ceph‐node} ... ] sudo chmod +r /etc/ceph/ceph.client.admin.keyring ceph health ceph‐deploy mon add {ceph‐node} sudo apt‐get install ntp # Like we said, if network is slow, just install them manuall. ceph‐deploy install {node‐name}    配置 Object Gateway 为使用 RESTful API, 我们必须安装Ceph Object Gateway. Ceph Object Gateway ( radosgw )是基于 librados 的对象存储接口,可提供应用程序 RESTful 风格的API用于访问Ceph Storage Clusters. Ceph Object Storage 支持两种接 口: S3-compatible: 兼容Amazon S3 RESTful API. Swift-compatible: 兼容大部分OpenStack Swift API. 在运行ceph object gateway服务前, 需满足 运行的ceph storage cluster 网关(gateway)可以访问外网 安装Ceph Object Gateway 在 admin node,   未做验证 :我觉得,admin节点可能压力不大,所以我们也学可以将amin-node当作网 关。 创建网关实例 ceph‐deploy admin {node‐name} ceph‐deploy install ‐‐rgw  [ ...]   一旦网关运行,我们便可以在 7480 ( civetweb 的默认端口)端口访问它。其响应内容如 下:   修改默认端口号 如果你想把端口号改成 80 ,而不是默认的 7480 。你可以执行如下步骤: 添加如下内容到admin-node 当前目录下的 ceph.conf : [client.rgw.]  rgw_frontends = "civetweb port=80" 注意: port= 不能有任何空格 [client.rgw.] 的意思是, client 表示该部分是配置关于客 户端的信息,客户端类型是 rgw (Ceph Object Gateway), 网关实例名字叫 . 将新的 ceph.conf 分发到网关节点以及其它节点: ceph‐deploy ‐‐overwrite‐conf config push  [] 重启网关节点 sudo systemctl restart  配置 bucket 分片 ceph‐deploy rgw create                         anonymous                                         配置 bucket 分片 Ceph Object Gateway将bucket 索引数据保存在  index_pool 中,该变量默认是   .rgw.buckets.index . 你也许不知道 index_pool 是什么,但不影响理解。 问题: bucket索引数据有可能很大 场景: 有时,用户会将很多对象(几十万到几百万个对象)放到同一个bucket中。 你可以指定每个bucket最多存多少个对象。如果不指定的话,bucket索引将会严重 影响系统性能。 解决方案: bucket索引分片 从Ceph 0.94,我们可以将bucket索引分片,从而避免上述情 况。 rgw_override_bucket_index_max_shards  表示每个bucket最大的分片数。其默认值 为0,表示不分片. 设  rgw_override_bucket_index_max_shards 的值大于0,即可开启分片. 为简单起见,我们可以添加  rgw_override_bucket_index_max_shards  到Ceph的配置文 件。我们可以将它添加到  [global] 下,那么整个系统都是用这一个配置;我们也可以为 每个实例创建不同的值。 一旦修改完配置文件,重启网关: sudo systemctl restart  文档中并没有 rgw_override_bucket_index_max_shards 的推荐值,未经认证 我曾用过 1024 . 使用网关 我们需要创建一个用户,才可以使用网关的RESTful API。 在 admin node sudo radosgw‐admin user create ‐‐uid="testuser" ‐‐display‐name="First  User" 该命令将打印 : {          "user_id": "testuser",          "display_name": "First User",          "email": "",          "suspended": 0,          "max_buckets": 1000,          "auid": 0,          "subusers": [],          "keys": [{                  "user": "testuser",                  "access_key": "I0PJDPCIYZ665MW88W9R",                 "secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"          }],          "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": []  } 为测试ceph storage cluster 以及RESTful API: sudo apt‐get install python‐boto 创建文件,命名为 s3test.py import boto.s3.connection  access_key = 'I0PJDPCIYZ665MW88W9R'  secret_key = 'dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA'  conn = boto.connect_s3(          aws_access_key_id=access_key,          aws_secret_access_key=secret_key,          host='{hostname}', port={port},          is_secure=False,  calling_format=boto.s3.connection.OrdinaryCallingFormat(),         )  bucket = conn.create_bucket('my‐new‐bucket')  for bucket in conn.get_all_buckets():      print "{name} {created}".format(          name=bucket.name,          created=bucket.creation_date,      ) python s3test.py 正常情况下,其应输出类似下面信息: my‐new‐bucket 2015‐02‐16T17:09:10.000Z
还剩13页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

vectorchen

贡献于2016-11-14

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf