PS:本文的所有操作均在mon节点的主机进行,如有变动另有注释
作者:网络技术部 徐志权
日期:2014年2月10日
VERSION 1.0
更新历史:
2014.2.10:首次完成ceph部署文档,块设备及对象存储的配置随后添加。
一、部署前网络规划
1.1 环境部署
主机名 | 公网IP(eth0) | 私网IP(eth1) | 操作系统 | 运行服务 |
node1 | 192.168.100.101 | 172.16.100.101 | CentOS6.5 | mon、mds |
node2 | 192.168.100.102 | 172.16.100.102 | CentOS6.5 | osd |
node3 | 192.168.100.103 | 172.16.100.103 | CentOS6.5 | osd |
◆由于CentOS6.5系统的内核为2.6.32,因此要关闭硬盘的写入缓存,若高于此版本不需要关闭。
#hdparm -W 0 /dev/sdb 0
◆本次部署一共有一个监控节点、一个元数据节点、两个数据节点,每个数据节点拥有两个硬盘作为数据盘。
1.2 网络拓扑
1.3 配置服务器、安装ceph
●添加ceph的rpm库key
#rpm --import 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc'
#rpm --import 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc' |
#vi /etc/yum.repos.d/ceph-extras
[ceph-extras]
name=Ceph Extras Packages
baseurl=http://ceph.com/packages/ceph-extras/rpm/centos6/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
[ceph-extras-noarch]
name=Ceph Extras noarch
baseurl=http://ceph.com/packages/ceph-extras/rpm/centos6/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
[ceph-extras-source]
name=Ceph Extras Sources
baseurl=http://ceph.com/packages/ceph-extras/rpm/centos6/SRPMS
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc |
#rpm -Uvh http://ceph.com/rpms/el6/noarch/ceph-release-1-0.el6.noarch.rpm
●添加epel库
#rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_/epel-release-6-8.noarch.rpm
●安装ceph
#yum update -y && yum install ceph -y |
二、部署ceph
2.1创建一个集群
创建一个集群,集群名为ceph,在mon节点,这里是主机node1,执行以下操作
2.1.1获取一个uuid
#uuidgen
2.1.2编辑配置文件
#vi /etc/ceph/ceph.conf
[global]
auth_service_required = cephx
#filestore_xattr_use_omap = true #该选项只针对ext4文件系统格式
auth_client_required = cephx
auth_cluster_required = cephx
auth supported = none
fsid = a500528d-fc02-4e-b944-bddacbb5c3d1 #填入刚才获取到的uuid
public network = 192.168.100.0/24
cluster network = 172.16.100.0/24
osd pool default size = 2
osd pool default min size = 1
max open files = 65535
mon osd full ratio = .95
mon osd nearfull ratio = .85
[mon]
mon data = /data/$cluster-$id
[osd]
osd journal size = 1024
osd journal = /data/$name/journal
osd data = /data/$name |
2.2创建一个mon
2.2.1编辑配置文件,添加mon参数
#vi /etc/ceph/ceph.conf
[mon.node1]
host = node1
mon addr = 192.168.100.101:67 |
#ceph-authtool /etc/ceph/ceph.mon.keyring --create-keyring --gen-key -n mon.
2.2.3创建mon数据目录
#mkdir -p /data/ceph-node1
#ceph-mon -i node1 --mkfs --keyring /etc/ceph/ceph.mon.keyring
2.2.4启动并查看集群状态
#/etc/init.d/ceph start mon.node1
#ceph –s
出现以下提示,启动成功:
[root@node1 ~]# ceph -s
cluster a500528d-fc02-4e-b944-bddacbb5c3d1
health HEALTH_ERR 192 pgs stuck inactive; 192 pgs stuck unclean; no osds
monmap e1: 1 mons at {node1=192.168.100.101:67/0}, election epoch 2, quorum 0 node1
osdmap e1: 0 osds: 0 up, 0 in
pgmap v2: 192 pgs, 3 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
192 creating |
首先为节点添加一块硬盘(这里是主机node2)
PS:硬件支持热插拔的情况下可以使用以下命令,在线检测新增硬盘
# echo "- - -" > /sys/class/scsi_host/host2/scan
2.3.1获取osd的ID
##ceph osd create //记录得到的编号,该编号是下面创建的osd的ID
2.3.2编辑配置文件
#vi /etc/ceph/ceph.conf
添加
[osd.0]
public addr = 192.168.100.102
cluster addr = 172.16.100.102 |
#scp -r root@192.168.100.101:/etc/ceph/ root@192.168.100.102:/etc/
2.3.4部署osd节点
#ssh root@192.168.100.102
#parted /dev/sdb mktable gpt
#parted /dev/sdb mkpart osd.0 1 20g //新加的硬盘为20g,并将所有空间划分为一个分区
#mkfs -t xfs /dev/sdb1
#mkdir /data/osd.0
#mount /dev/sdb1 /data/osd.0
#ceph-osd -i 0 --mkfs --mkkey
#ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /data/osd.0/keyring
#ceph osd crush add osd.0 0.2 root=default host=node2
2.3.5启动osd进程
#ceph-osd -i 0
2.3.6查看进程
#ps -ef|grep ceph-osd
以下提示启动成功
[root@node2 ~]# ps -ef|grep ceph-osd
root 13 1 0 08:42 ? 00:00:07 ceph-osd -i 0 |
#exit
#ceph osd stat
osd添加成功
[root@node1 ~]# ceph osd stat
osdmap e41: 1 osds: 1 up, 1 in |
#vi /etc/fstab
添加
/dev/sdb1 /data/osd.0 xfs defaults 0 0 |
# echo "ceph-osd -i 0" >> /etc/rc.local |
创建mds
# ceph-mds -i node1 -n mds.node1 -c /etc/ceph/ceph.conf -m 192.168.100.101:67
检查mds状态,成功启动如下
[root@node1 ~]# ceph mds stat
e19: 1/1/1 up {0=node1=up:active} |
三、配置ceph客户端
3.1确定操作系统内核
3.1.1查看内核版本
#uname -r
若内核版本低于2.6.32时,建议升级到2.6.34或以上
3.1.2更新内核,编译ceph模块
这里以升级到3.10.29为例
#wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.29.tar.xz
#tar -Jxvf linux-3.10.29.tar.xz
#cd linux-3.10.29
#cp /boot/config-2.6.32-431.3.1.el6.x86_ ./.config //将当前系统内核的配置文件复制到kernel源文件的目录内
#make menuconfig
依次选择下面选项,ceph必须编译为模块M
File systems-->Network File Systems--> Ceph distributed file system
保存并退出
#make
#make modules_install
#make install
确定boot木有下存在以下文件
[root@node1 linux-3.10.29]# ll /boot/|grep 3.10
initramfs-3.10.29.img
System.map -> /boot/System.map-3.10.29
System.map-3.10.29
vmlinuz -> /boot/vmlinuz-3.10.29
vmlinuz-3.10.29 |
#vi /etc/grub.conf
添加
title CentOS (3.10.29)
root (hd0,0)
kernel /vmlinuz-3.10.29 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-3.10.29.img |
PS:确定已经运行一个ceph集群,并且集群包含至少一个或以上mds节点
挂载ceph分布式存储文件目录共享
以下在客户端上操作
#yum install ceph-fuse -y
#ceph-fuse -m 192.168.100.101:67 /mnt
测试写入1G文件
#dd if=/dev/zero of=/mnt/test.1g bs=8192 count=125000 |
四、ceph扩容
4.1增加osd节点(以下操作在node1执行,即mon节点)
根据第一章在新的节点node3服务器安装ceph,并配置好环境
4.1.1获取osd的ID
##ceph osd create //记录得到的编号,该编号是下面创建的osd的ID
4.1.2编辑配置文件
#vi /etc/ceph/ceph.conf
添加
[osd.1]
public addr = 192.168.100.103
cluster addr = 172.16.100.103 |
#scp -r root@192.168.100.101:/etc/ceph/ root@192.168.100.103:/etc/
4.1.4部署osd节点
#ssh root@192.168.100.103
#parted /dev/sdb mktable gpt
#parted /dev/sdb mkpart osd.1 1 20g //新加的硬盘为20g,并将所有空间划分为一个分区
#mkfs -t xfs /dev/sdb1
#mkdir -p /data/osd.1
#mount /dev/sdb1 /data/osd.1
#ceph-osd -i 1 --mkfs --mkkey
#ceph auth add osd.1 osd 'allow *' mon 'allow rwx' -i /data/osd.1/keyring
#ceph osd crush add osd.1 0.2 root=default host=node2
4.1.5启动osd进程
#ceph-osd -i 1
4.1.6查看进程
#ps -ef|grep ceph-osd
以下提示启动成功
[root@node3 ~]# ps -ef|grep ceph-osd
root 13 1 0 08:42 ? 00:00:07 ceph-osd -i 0 |
#exit
#ceph osd stat
osd添加成功
[root@node1 ~]# ceph osd stat
osdmap e41: 2 osds: 2 up, 2 in |
PS:每台主机只能为ceph集群启动一个mon进程
PS2:集群中只有两个mon节点时,其中一个断开会导致集群不能访问,建议mon总数3个或以上。
本次mon将部署在主机node2
4.2.3创建新的monitor数据目录
#mkdir /data/ceph-node2
4.2.4部署新的mon
#ceph auth get mon. -o /data/ceph-node2/ceph.mon.keyring
#ceph mon getmap -o /data/ceph-node2/ceph.mon.map
#ceph-mon -i node2 --mkfs --monmap /data/ceph-node2/ceph.mon.map --keyring\
/data/ceph-node2/ceph.mon.keyring
#ceph mon add node2 192.168.100.102:67
4.2.1启动新的mon
#ceph-mon -i node2 --public-addr 192.168.100.102:67 |
五、检查ceph集群状态
#ceph health //ceph健康状态
#ceph status //ceph当前全部状态
#ceph -w //实时监控ceph状态及变化
#ceph osd dump //所有osd详细状态
#ceph osd tree //osd所在位置,及状态
#ceph quorum_status //mon优先级状态
#ceph mon dump //mon节点状态
#ceph mds dump //mds详细状态 |
六、Openstack与Ceph整合
6.1整合openstack与ceph
6.1.1创建池
#ceph osd pool create volumes 128
#ceph osd pool create images 128
#ceph osd pool create backups 128
6.1.2获取ceph配置文件PS:应用于openstack所有节点
#scp -r 192.168.4.43:/etc/ceph /etc
6.1.3所有openstack节点安装ceph库文件
#yum install -y python-ceph ceph
6.1.4创建ceph用户
#ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rx pool=images'
#ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
#ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
6.1.5获取ceph用户的key加入到ceph配置文件中PS:应用于openstack所有节点
#ceph auth get-or-create client.glance |tee /etc/ceph/ceph.client.glance.keyring
#chown glance:glance /etc/ceph/ceph.client.glance.keyring
#ceph auth get-or-create client.cinder |tee /etc/ceph/ceph.client.cinder.keyring
#chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
#ceph auth get-or-create client.cinder-backup |tee /etc/ceph/ceph.client.cinder-backup.keyring
#chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
6.1.6配置计算节点的nova-compute使用ceph PS:应用于所有计算节点
#ceph auth get-key client.cinder | tee client.cinder.key
#uuidgen
3a37c634-3b97-698c-c0b0-cb6f01fa4533
#cat > secret.xml < EOF #virsh secret-define --file secret.xml Secret 3a37c634-3b97-698c-c0b0-cb6f01fa4533 created 将上述所得uuid值保存至/etc/nova/nova.conf 6.1.7glance、cinder、nova的ceph配置 Glance: default_store=rbd rbd_store_user=glance rbd_store_pool=images volume_driver=cinder.volume.drivers.rbd.RBDDriver rbd_pool=volumes rbd_ceph_conf=/etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot=false rbd_max_clone_depth=5 glance_api_version=2 rbd_user=cinder rbd_secret_uuid=457eb676-33da-42ec-9a8c-9293d545c337 backup_driver=cinder.backup.drivers.ceph backup_ceph_conf=/etc/ceph/ceph.conf backup_ceph_user=cinder-backup backup_ceph_chunk_size=134217728 backup_ceph_pool=backups backup_ceph_stripe_unit=0 backup_ceph_stripe_count=0 restore_discard_excess_bytes=true libvirt_images_type=rbd libvirt_images_rbd_pool=volumes libvirt_images_rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=cinder rbd_secret_uuid=457eb676-33da-42ec-9a8c-9293d545c337 libvirt_inject_password=false libvirt_inject_key=false libvirt_inject_partition=-2 #service openstack-glance-api restart #service openstack-nova-compute restart #service openstack-cinder-volume restart
#virsh secret-set-value --secret 3a37c634-3b97-698c-c0b0-cb6f01fa4533 --base $(cat client.cinder.key)rbd_secret_uuid=3a37c634-3b97-698c-c0b0-cb6f01fa4533
6.1.8重启openstack服务show_image_direct_url=True Cinder: Cinder-backup Nova: #service openstack-cinder-backup restart #