ceph 的 luminous版本里bluestore已经稳定了,这里尝试部署一下使用bluestore
转发:http://www.tang-lei.com/2018/06/15/ceph-luminous-%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2-bluestore/
对象可以直接存放在裸盘上,不需要任何文件系统接口。
BlueStore 直接使用一个原始分区,ceph对象将直接写在块设备上,不再需要任何的文件系统;
和osd一起进来的元数据将存储在 一个 名为 RocksDB 的键值对 数据库;
RocksDB :存储 WAL 日志和元数据(omap)
BlueRocksEnv: 与RocksDB 交互的接口
BlueFS : 一个类似文件系统的 mini C++,使 rocksdb 生效,ENv 接口(存储 RocksDB 日志和 sst 文件);
因为rocksdb 一般跑在一个文件系统的上层,所以创建了 BlueFS。
对象的元数据
write-ahead 日志
ceph omap 数据
allocator metadata(元数据分配器):决定数据存放位置;此功能可插拔
第一个小分区(XFS或者ext4),包括ceph files
(init system descriptor,status,id,fsid,keyring 等)和RocksDB 文件
第二个分区是一个原始分区
每一部分都可以存放在不同的磁盘中,RocksDB WAL 和 DB 可以存放在不同的磁盘或者小分区中
1 |
# ceph-bluestore-tool show-label --path /var/lib/ceph/osd/ceph-0/ |
在node1、node2、node3上分别有两块磁盘:vdb 和vdc
其中vdb不分区,用于存储osd数据
vdc有一个分区:vdc1,(类似于之前filestore下的日志分区,可以用ssd磁盘), 用于存放block.db
主机名 | IP | 部署 | 系统 | 磁盘 |
---|---|---|---|---|
node1 | 172.28.7.239 | 管理、存储、监控 | Centos7最小安装 | 2块(osd、block.db) |
node2 | 172.28.7.240 | 存储、监控 | Centos7最小安装 | 2块(osd、block.db) |
node3 | 172.28.7.241 | 存储、监控 | Centos7最小安装 | 2块(osd、block.db) |
Centos7系统安装完成执行:
yum update
vim /etc/yum.repos.d/ceph.repo
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 |
[ceph] name=Ceph packages for $basearch baseurl=http://download.ceph.com/rpm-luminous/el7/$basearch enabled=1 priority=2 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-noarch] name=Ceph noarch packages baseurl=http://download.ceph.com/rpm-luminous/el7/noarch enabled=1 priority=2 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS enabled=0 priority=2 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc |
1 |
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm |
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 |
# Kernel pid max echo 4194303 > /proc/sys/kernel/pid_max #关闭selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 ##停止firewall 禁止firewall开机启动 systemctl stop firewalld.service systemctl disable firewalld.service ##关闭自带网络管理 systemctl stop NetworkManager systemctl disable NetworkManager ##host访问 vim /etc/hosts: 172.28.7.239 node1 172.28.7.240 node2 172.28.7.241 node3 ## 安装ntp yum installl ntp ## 修改启动ntp服务 ##注释如下四项,然后选择内部的时钟服务器或者ceph管理节点 server 172.25.0.110 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst ##启动 systemctl restart ntpd.service systemctl enable ntpd.service ## 终端 sudo visudo 找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty 或者直接注释掉 ## 其他 yum install vim net-tools |
1 2 3 4 5 |
##生成秘钥,免密码登陆 ssh-keygen ssh-copy-id root@node1 ssh-copy-id root@node2 ssh-copy-id root@node3 |
1 2 3 4 5 6 7 |
yum install ceph-deploy vim /usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos/install.py: def install(…): … adjust_repos = False ##添加该行 … |
创建目录
1 |
mkdir my_cluster |
生成ceph.conf和kering
1 2 |
cd my-cluster ceph-deploy new node1 node2 node3 ##会生成ceph.conf和ceph.mon.keyring |
配置ceph.conf
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 |
cd my-cluster vim ceph.conf: [global] fsid = 2595ba62-8ae1-difg-893a-892a675757c6 mon_initial_members = node01, node02, node03 mon_host = 172.28.7.239,172.28.7.240,172.28.7.241 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx ##如果有两块可以连通的网卡,配置public_network和cluster_network,如果是测试环境没有,就不配置 #public_network = 172.28.7.0/22 #管理网络 #cluster_network = 172.28.11.0/22 #集群网络 mon_pg_warn_max_per_osd = 1000 osd_pool_default_size = 3 osd_pool_default_min_size = 2 mon_osd_backfillfull_ratio = 0.75 mon_osd_full_ratio = .85 mon_osd_nearfull_ratio = .70 osd_failsafe_full_ratio = 0.90 osd_deep_scrub_randomize_ratio = 0.01 [mgr] mgr modules = dashboard [osd] osd_max_write_size = 1024 osd_recovery_op_priority = 1 osd_recovery_max_active = 1 osd_recovery_max_single_start = 1 osd_recovery_max_chunk = 1048576 osd_recovery_threads = 1 osd_max_backfills = 1 osd_scrub_begin_hour = 22 osd_scrub_end_hour = 7 osd_recovery_sleep = 0 osd_crush_update_on_start = false ##如果初始化的时候,把该值设置为true,然后重启所有osd。不然创建完pool会提示:100.000% pgs unknown100.000% pgs unknown。所有osd都加入,集群ok后,再统一把该值设置为false, 然后重启所有osd |
注意:只要新创建了pool, 所有osd 设置:osd_crush_update_on_start = true 才会进行调整
安装ceph
1 |
ceph-deploy install node1 node2 node3 |
集群初始化
1 2 3 4 5 6 7 |
cd my-cluster ##如果给mon 单独一块磁盘存储数据,这里需要把每个mon节点的磁盘mount 到/var/lib/ceph/mon/ ## mount /dev/sdj1 /var/lib/ceph/mon/ #然后再执行: #ceph-deploy mon create node1 node2 node3 ceph-deploy mon create-initial # 会生成ceph.bootstrap-osd.keyring、ceph.client.admin.keyring等认证文件 |
拷贝管理文件
根据实际情况,拷贝管理文件到设定的管理节点
1 |
ceph-deploy admin node1 node2 node3 |
统一节点上ceph.conf文件命令:
1 |
# ceph-deploy config push node node node3 |
添加osd
由于Luminous里默认使用Bluestore,可以直接操作裸盘,data和block-db会使用lv。综合成本及性能,我们把block.db使用ssd的分区,osd仍然使用sas,block.wal不指定. 这里vdb作为osd盘,vdc作为block-db盘
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 |
首先ssh到各个存储节点,block.db使用的ssd分区,这里node1举例: # ssh node1 # pvcreate /dev/vdb # 创建pv, 这里使用的整块磁盘(与后面的分区对比), pvs 查看pv列表 Physical volume "/dev/vdb" successfully created. # vgcreate data_vg1 /dev/vdb # 创建vg, vgs查看vg列表 Volume group "data_vg1" successfully created # lvcreate -n data_lv1 -L 1020.00m data_vg1 #创建lv,lvs查看lv列表, -n指定lv名称, -L指定lv的大小,需要小于或者等于vg的VSize Logical volume "data_lv1" created. --------------------------------------------- 生产环境一块ssd磁盘会对应多块osd,所以这里也需要把ssd多个分区 # parted /dev/vdc (parted) mklabel gpt (parted) mkpart primary 0% 25% #因为测试,这里只做了一个占据磁盘25%容量的分区,实际情况根据osd数目划分相应的分区数 (parted) quit # pvcreate /dev/vdc1 # 创建pv, 这里使用的是磁盘分区, pvs 查看pv列表 Physical volume "/dev/vdc1" successfully created. # vgcreate block_db_vg1 /dev/vdc1 # 创建vg, vgs查看vg列表 Volume group "block_db_vg1" successfully created # lvcreate -n block_db_lv1 -L 1020.00m block_db_vg1 # 创建lv, lvs查看lv列表, -L指定lv的大小,需要小于或者等于 vg的VSize Logical volume "block_db_lv1" created. --------------------------------------------- # 不需要加--bluestore 参数,默认就是使用bluestore方式,data_vg1/data_lv1 是数据盘,block_db_vg1/block_db_lv1是block-db 管理节点执行: ceph-deploy --overwrite-conf osd create node1 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1 ceph-deploy --overwrite-conf osd create node2 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1 ceph-deploy --overwrite-conf osd create node3 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1 |
使用node1(172.28.7.239) 作为dashboard, 登陆到172.28.7.239执行:
1 2 |
ceph config-key put mgr/dashboard/server_addr 172.28.7.239 ceph config-key put mgr/dashboard/server_port 7000 |
1 2 3 |
ceph-deploy mgr create node1:node1-mgr node2:node2-mgr node3:node3-mgr ## 登陆到管理节点启动dashboard ceph mgr module enable dashboard |
netstat -tunlp|grep 7000
systemctl restart ceph-mgr@node1
http://172.28.7.239:7000
有时候我们安装错误,可以执行清理操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 管理节点执行: ceph-deploy purge node1 ceph-dpeloy purgedata node1 ## ssh到node1 ssh node1 vgs ## 获取vg信息 vgremove VG ##删除上面获取的vg ##如果不执行该步骤,则该磁盘无法再次被使用 pvs ##查看pv信息 pvremove PV ##删除pv parted /dev/vdc rm 1 ##删除之前block.db的分区 quit |
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 |
#创建测试池mytest ceph osd pool create mytest 128 rados lspools # ceph osd pool set mytest size 2 #副本为2 # ceph osd pool delete mytest #删除 #Rados性能测试(关注 bandwidth带宽,latency延迟) rados bench -p mytest 10 write --no-cleanup #写测试10秒 rados bench -p mytest 10 seq #顺序读 rados bench -p mytest 10 rand #随机读 rados -p mytest cleanup #清理测试数据 #rbd块设备测试 rbd create --size 2G mytest/test1 #创建块设备映像test1 rbd ls mytest rbd info mytest/test1 rbd map mytest/test1 #映射块设备 #/dev/rbd0 #rbd showmapped #查看已映射块设备 #挂载 mkfs.xfs /dev/rbd0 mkdir -p /mnt/ceph mount /dev/rbd0 /mnt/ceph/ df -h /mnt/ceph #测试 rbd bench-write mytest/test1 #默认参数io 4k,线程数16,总写入1024M, seq顺序写 rbd unmap mytest/test1 #取消块设备映射 rbd rm mytest/test1 #删除块设备映像 |