Ceph是一个分布式存储系统,提供对象,块和文件存储,是一个免费开源软件的存储解决方案,随着云计算的发展,Ceph搭上Openstack这趟快车,成为了开源社区备受关注的项目之一。
系统配置
系统架构
主机名 | 主机IP | 功能 |
cephmgr | 10.10.200.150 | ceph-deploy |
ceph01 | 10.10.200.181 | ceph-mon |
ceph02 | 10.10.200.182 | |
ceph03 | 10.10.200.183 | |
osd01 | 10.10.100.201 | ceph-osd |
osd02 | 10.10.100.202 |
说明:
- Ceph管理节点可以安装在openstack的控制节点,甚至可以部署集群。
- 可以将ceph-deploy部署在任意节点,建议部署在一个独立的节点。
- 建议每个osd节点单独一块系统磁盘(sda),用于安装操作系统。
- 建议每个osd节点单独一块日志磁盘(sdb),而且最好是SSD,用于存储OSD日志。
- 日志磁盘分成与挂载的OSD磁盘等数量的分区,即挂载了多少块OSD磁盘就分多少个区。
- 文件系统均使用官方推荐的xfs,OSD日志分区不需要创建文件系统,由ceph自己管理。
- 也可以使用现成的文件系统划分目录或分区给OSD,但不建议这种方案,本文也不讲。
所有节点需要调整防火墙规则、解析主机名、同步时钟,以及最好免密登录等,方法略……
配置yum源(所有节点)
编辑/etc/yum.repos.d/CentOS-Ceph-Luminous.repo:
[ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc [ceph-source] name=ceph-source baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
yum clean all yum makecache # yum repolist
部署ceph-deploy(管理节点)
可以将ceph集群直接部署在openstack的控制节点,如果独立安排服务器,同样需要调整防火墙规则、解析主机名、同步时钟,以及免密登录等。
以下操作均在管理节点执行,部署前先了解几个名词:
名词 | 说明 |
fsid | 集群唯一标识,通常用uuid表示 |
cluster name | 集群名称,可以不指定,默认是ceph |
monitor map | 集群内MON节点的map,用于MON节点之间互相发现 |
monitor keyring | 集群内MON节点之间通信所用的KEY |
administrator keyring | 客户端通过admin用户及KEY与服务端通信 |
0x01 创建工作目录
mkdir ceph-cluster cd ~/ceph-cluster uuidgen >> fsid.txt #cat fsid.txt #d9de3482-448c-4fc4-8ccc-f32e00b8764e
0x02 安装ceph-deploy
yum -y install ceph-deploy ceph-deploy --version
部署ceph-mon(管理节点)
1x01 安装ceph-mon
# 通过ceph-deploy自动为管理节点和OSD节点安装ceph-mon ceph-deploy install ceph0{1,2,3} ceph-deploy install osd0{1,2} ceph-deploy install controller ceph-deploy install compute # 若自动安装失败,则手动为管理节点和OSD节点安装ceph-mon # for i in 1 2 3; do ssh root@ceph0$i "yum install -y ceph ceph-radosgw";done # for i in 1 2 ; do ssh root@osd0$i "yum install -y ceph ceph-radosgw";done # 配置ceph-mon开机启动 for i in 1 2 3; do ssh root@ceph0$i "systemctl enable ceph";done for i in 1 2 ; do ssh root@osd0$i "systemctl enable ceph";done
1x02 创建ceph-mon集群
# 创建ceph-mon管理集群 ceph-deploy new ceph0{1,2,3}
集群创建成功后,会自动生成配置文件/etc/ceph/ceph.conf,默认无需修改,建议根据实际需求进行调整。
[global] fsid = d9de3482-448c-4fc4-8ccc-f32e00b8764e mon_initial_members = ceph01, ceph02, ceph03 mon_host = 10.10.100.181,10.10.100.182,10,10,100,183 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx cluster network = 10.10.100.0/24 #OSD间数据复制专用网络 public network = 10.10.200.0/16 #公共访问网络 #以下参数,请根据实际情况配置 osd pool default size = 3 osd pool default pg nmu = 128 osd pool default pgp nmu = 128 osd crush update on start = false max open files = 262144 rbd_default_features = 1 mon_clock_drift_allowed = 1 mon clock drift warn backoff = 30 #mon_allow_pool_delete = true [mgr] mgr modules = dashboard [mon] mon data = /var/lib/ceph/mon/ceph-$id [osd] osd data = /var/lib/ceph/osd/ceph-$id osd journal size = 20000 osd mkfs type = xfs osd mkfs options xfs = -f filestore xattr use omap = true filestore min sync interval = 10 filestore max sync interval = 15 filestore queue max ops = 25000 filestore queue max bytes = 1048576000 filestore queue committing max ops = 5000 filestore queue committing max bytes = 10485760000 filestore op threads = 32 journal max write bytes = 1073714824 journal max write entries = 10000 journal queue max ops = 50000 journal queue max bytes = 10485760000 osd max write size = 512 osd client message size cap = 2147483648 osd deep scrub stride = 131072 osd op threads = 8 osd disk threads = 4 osd map cache size = 1024 osd map cache bl size = 128 osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" osd recovery op priority = 4 osd recovery max active = 10 osd max backfills = 4 [client] rbd cache = true rbd cache size = 268435456 rbd cache max dirty = 134217728 rbd cache target dirty = 67108864 rbd cache max dirty age = 5
备注:所有需要连接ceph的openstack节点都需要安装ceph,并复制如上配置文件。
关于pgp的说明,具体请参照官方文档:
- OSD<5 pg_num=128
- 5<OSD<10 pg_num=512
- 10<OSD<50 pg_num=4096
1x03 配置ceph-mon
ceph-deploy mon create-initial systemctl status ceph-mon@ceph01
部署ceph-mgr(管理节点)
# 创建ceph-mgr ceph-deploy mgr create ceph01:ceph01_mgr ceph02:ceph02_mgr ceph03:ceph03_mgr # 查看ceph-mgr状态 systemctl status ceph-mgr@ceph01_mgr ceph-mgr@ceph02_mgr ceph-mgr@ceph03_mgr # 启动ceph-mgr ceph mgr module enable dashboard # 检查ceph-mgr运行状态 netstat -tunlp | grep mgr
启动后,访问控制面板:http://10.10.200.181:7000,可以考虑加入haproxy。
附加知识
重建Ceph集群:
ceph-deploy purge ceph01 ceph02 ceph03 osd01 osd02 ceph-deploy purgedata ceph01 ceph02 ceph03 osd01 osd02 ceph-deploy forgetkeys
管理ceph-mon:
monitor start | stop | restart OSD start | stop | restart ceph osd tree
初始化磁盘(所有OSD节点)
在安装好ceph-mon后,即可初始化磁盘,本文案例以每个OSD节点4块数据盘、1块日志盘、1块系统盘为例。
3x01 对OSD数据盘分区
parted /dev/sdc mklable gpt mkpart primary xfs 0%100% quit mkfs.xfs /dev/sdc1
3x02 对OSD日志盘分区
每个数据盘对应一个日志分区,即有多少个数据盘,日志盘就得分多少个区。
parted -s /dev/sdb mklabel gpt parted -s /dev/sdb mkpart primary 0%25% parted -s /dev/sdb mkpart primary 26%50% parted -s /dev/sdb mkpart primary 51%75% parted -s /dev/sdb mkpart primary 76%100% quit
建议搞一个自动分区脚本,以下是4个OSD磁盘的例子,请根据实际情况修改:
#!/bin/bash set-e if[!-x "/sbin/parted"];then echo "Parted is needed!">&2 exit 1 fi #OSD分区 DISKS="c d e f" for i in ${DISKS};do parted -a optimal --script /dev/sd${i}-- mktable gpt parted -a optimal --script /dev/sd${i}-- mkpart primary xfs 0%100% sleep 1 mkfs.xfs -f /dev/sd${i}1& done #日志分区 parted -s /dev/sdb mklabel gpt parted -s /dev/sdb mkpart primary 0%25% parted -s /dev/sdb mkpart primary 26%50% parted -s /dev/sdb mkpart primary 51%75% parted -s /dev/sdb mkpart primary 76%100%
创建并激活OSD(所有OSD节点)
为防止磁盘格式不匹配,建议先通过disk zap命令重置磁盘后再创建OSD数据盘:
ceph-deploy disk zap osd01:sdc osd01:sdd osd01:sde osd01:sdf ceph-deploy osd create osd01:sdc osd01:sdd osd01:sde osd01:sdf ceph-deploy disk zap osd02:sdc osd02:sdd osd02:sde osd02:sdf ceph-deploy osd create osd02:sdc osd02:sdd osd02:sde osd02:sdf
重复操作可以写成脚本:
#!/bin/bash for((i=1;i<=2;i++)) do # for j in `ls /dev/sd[a-z]` for j in c d e f do #ceph-deploy osd create osd$i:$j ceph-deploy osd create osd$i:sd$j done done
以上操作也可以通过如下命令完成(先做osd01再做osd02):
ceph-deploy disk zap \ osd01:/dev/sdc \ osd01:/dev/sdd \ osd01:/dev/sde \ osd01:/dev/sdf ceph-deploy osd prepare \ osd01:/dev/sdc:/dev/sdb1 \ osd01:/dev/sdd:/dev/sdb2 \ osd01:/dev/sde:/dev/sdb3 \ osd01:/dev/sdf:/dev/sdb4 ceph-deploy osd activate \ osd01:/dev/sdc:/dev/sdb1 \ osd01:/dev/sdd:/dev/sdb2 \ osd01:/dev/sde:/dev/sdb3 \ osd01:/dev/sdf:/dev/sdb4
查看OSD运行情况
OSD状态:
ceph osd stat #OSD状态 ceph osd dump #查看OSD的状态 ceph osd dump <ID> #查看指定的OSD的状态 ceph osd tree #OSD目录树 ceph df #查看使用情况
OSD节点:
lsblk systemctl status ceph-osd@0
OSD端口:
netstat -tunlp | grep osd
原创文章禁止转载:技术学堂 » 分布式云存储Ceph部署方法