天天看点

在 centos上安装ceph与openstack集成

操作系统:centos7.3或者centos7.2 网络拓扑

ceph:

192.168.5.7     node0(管理节点、osd)

192.168.5.12    node1(monitor、osd)

192.168.5.6     node2(monitor、osd)

192.168.5.11    node3(monitor、osd) openstack:

192.168.5.240   computer1

192.168.5.241   controller 主机名:

192.168.5.7     node0

192.168.5.12    node1

192.168.5.6     node2

192.168.5.11    node3

192.168.5.240   computer1

192.168.5.241   controller

一、前期准备 1. 权限准备(node0-3) adduser -d /home/ceph -m ceph

passwd ceph

echo "ceph ALL=(root)     NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph

chmod 0440 /etc/sudoers.d/ceph 2 修改/etc/hosts(node0-3) 内容如下:

192.168.5.7     node0

192.168.5.12    node1

192.168.5.6     node2

192.168.5.11    node3

192.168.5.240   computer1

192.168.5.241   controller 3.   requiretty准备(node0-3) visudo修改suoders文件

Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。

增加行 Defaults visiblepw 4.管理节点无密码远程访问权限 用ceph登录后,执行如下的命令

第一步:在管理节点主机上执行命令:

ssh-keygen

说明:(为了简单点命令执行时直接确定即可)

第二步:将第一步的key复制至其他节点

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ssh-copy-id [email protected]

同时修改~/.ssh/config文件增加如下内容:

Host node0

Hostname node0

User ceph

Host node1

Hostname node1

User ceph

Host node2

Hostname node2

User ceph

Host node3

Hostname node3

User ceph

使用如下命令

#sudo chmod 644  /home/ceph/.ssh/config

#ls -l /home/ceph/.ssh/config

-rw-r--r-- 1 ceph ceph 144 Jul 28 22:04 /home/ceph/.ssh/config 5 关闭防火墙 systemctl stop firewalld.service

systemctl disable firewalld.service 6 禁用selinux 当前禁用

setenforce 0

永久禁用

cat /etc/selinux/config

SELINUX=disabled 二、 源准备和管理节点安装ceph-deploy工具 每个节点进行如下操作: 1. 增加 yum配置文件ceph.repo

sudo vim /etc/yum.repos.d/ceph.repo

添加以下内容:

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/

gpgcheck=0

priority=1 [ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/

gpgcheck=0

priority=1 [ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS

gpgcheck=0

priority=1

2.下载阿里云的base源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3. 下载阿里云的epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

4. 更新软件源并安装ceph-deploy,时间同步软件

sudo yum update

sudo yum install ntp ntpupdate ntp-doc

5 关闭其他节点的防火墙和禁用selinux

6 在管理节点上安装ceph-deploy

sudo yum install ceph-deploy 三、创建Ceph集群 [email protected]~]$ mkdir cluster

[[email protected]]$cd cluster

[[email protected] cluster]$ pwd

/home/ceph/cluster

1.如何清空ceph数据

先清空之前所有的ceph数据,如果是新装不用执行此步骤,如果是重新部署的话也执行下面的命令:

ceph-deploy purgedata {ceph-node} [{ceph-node}]

ceph-deploy forgetkeys

使用命令语法如下:

ceph-deploy purgedata admin_node node1 node2 node3

ceph-deploy forgetkeys

2. 创建集群设置Monitor节点

在admin节点上用ceph-deploy创建集群,new后面跟的是monitor节点的hostname,如果有多个monitor,则它们的hostname以为间隔,多个mon节点可以实现互备。

ceph-deploy new node1 node2 node3 [[email protected] cluster]$ls

ceph.conf ceph.log ceph.mon.keyring

查看ceph的配置文件,Node1-3节点都变为了监控节点

[[email protected] cluster]$ cat ceph.conf

[global]

fsid = 74462f02-bee8-4584-b499-e928c6cb7db2

mon_initial_members = node1, node2, node3

mon_host = 192.168.5.12,192.168.5.6,192.168.5.11

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

osd_pool_default_size = 2

mon clock drift allowed = 2

mon clock drift warn backoff = 31

public network = 192.168.5.0/2 3.  修改副本数目

修改默认的副本数为2,即ceph.conf,使osd_pool_default_size的值为2。如果没有该行,则添加。

4.  网络不唯一的处理

如果IP不唯一,即除ceph集群使用的网络外,还有其他的网络IP。

比如:

eno16777736: 192.168.175.100

eno50332184: 192.168.92.110

virbr0: 192.168.122.1

那么就需要在ceph.conf配置文档[global]部分增加参数public network参数:

public_network = {ip-address}/{netmask}

如:

public_network = 192.168.92.0/6789

5 时间不同步的处理

测试环境中,时间要求不是很严格,修改ceph.conf,加入

mon clock drift allowed = 2

mon clock drift warn backoff = 31

如果是正式环境,时间需要严格同步 四、 安装CEPH 管理节点节点用ceph-deploy工具向各个节点安装ceph:

ceph-deploy install {ceph-node}[{ceph-node} ...]

或者本地

ceph-deploy install {ceph-node}[{ceph-node} ...] --local-mirror=/opt/ceph-repo --no-adjust-repos --release=jewel

如:

ceph-deploy install node0 node1 node2 node3

如果安装不成功原因是网络比较慢,达到5分钟超时

解决方案:

1.可以在每个节点上先行安装sudo yum -y install ceph

2.数量比较多的话多执行几次此命令

3.最佳方案是搭建本地源 五、初始化monitor节点 [[email protected] cluster]$ceph-deploy mon create-initial

查看文件,生成了5个key

[[email protected] cluster]$ ls -l

total 324

-rw------- 1 ceph ceph    113 Aug  1 03:05 ceph.bootstrap-mds.keyring

-rw------- 1 ceph ceph    113 Aug  1 03:05 ceph.bootstrap-osd.keyring

-rw------- 1 ceph ceph    113 Aug  1 03:05 ceph.bootstrap-rgw.keyring

-rw------- 1 ceph ceph    129 Aug  1 03:05 ceph.client.admin.keyring

-rw-rw-r-- 1 ceph ceph    260 Jul 29 03:14 ceph.conf

-rw-rw-r-- 1 ceph ceph 304511 Aug  1 14:32 ceph-deploy-ceph.log

-rw------- 1 ceph ceph     73 Jul 28 23:57 ceph.mon.keyring 六、 OSD管理 每个ceph node节点挂载了第二个型硬盘

sudo parted -s /dev/vdb mklabel gpt mkpart primary xfs 0% 100%

sudo mkfs.xfs /dev/vdb -f

sudo blkid -o value -s TYPE /dev/vdb

1 初始化OSD

ceph-deploy osd prepare {ceph-node}:/path/to/directory

例如:

ceph-deploy osd prepare node1:/dev/vdb

ceph-deploy osd prepare node2:/dev/vdb

ceph-deploy osd prepare node3:/dev/vdb

ceph-deploy osd prepare node0:/dev/vdb

2 激活OSD

ceph-deploy osd activate {ceph-node}:/path/to/directory

示例:

ceph-deploy osd activate node1:/dev/vdb1

ceph-deploy osd activate node2:/dev/vdb1

ceph-deploy osd activate node3:/dev/vdb1

ceph-deploy osd activate node0:/dev/vdb1

3  查看OSD tree

ceph osd tree

4 检查ceph状态和相关命令

sudo ceph health

sudo ceph -s

rbd -p vms ls

ceph df

ceph auth list 七  在controller节点或者computer节点上安装ceph client 1. 准备工作(见node节点)

2  安装(在ceph管理节点上执行)

ceph-deploy install --cli --no-adjust-repos controller

ceph-deploy config push controller 八、 创建pool(如果没有特殊说明在ceph管理节点上执行) 1. 给虚拟机的ephemeral disks创建一个ceph pool。

 $ ceph osd pool create vms 64

2. 设置Ceph客户端认证

 ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'

 或

 ceph auth caps client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'

3. 为client.cinder添加密钥文件来访问节点并改变属主 #ceph auth get-or-create client.cinder | ssh controller sudo tee /etc/ceph/ceph.client.cinder.keyring

#ceph auth get-key client.cinder | ssh controller  tee /etc/ceph/client.cinder.key 

#ssh controller sudo chown nova:nova /etc/ceph/ceph.client.cinder.keyring  

 九 创建临时密钥副本

 运行nova-compute的节点nova-compute进程需要密钥文件。它们也存储client.cinder用户的密钥在libvirt。libvirt进程在Cinder中绑定块设备时需要用到它来访问集群。

在nova-compute节点创建一个临时的密钥副本:

#uuidgen

7e2aa02b-7ebf-42c0-912d-96600d322a3b (随机产生的)

# vi /etc/ceph/cluster/ceph.xml

内容如下:

<secret ephemeral="no" private="no">   

<uuid>7e2aa02b-7ebf-42c0-912d-96600d322a3b</uuid>   

<usage type="ceph">   

<name>client.cinder secret</name>   

</usage>   

</secret> sudo virsh secret-define --file ceph.xml

sudo virsh secret-set-value --secret 7e2aa02b-7ebf-42c0-912d-96600d322a3b --base64 $(cat client.cinder.key) 十 和 openstack 集成 1. 和nova集成 #vi /etc/nova/nova.conf

在[libvirt]下面加入

[libvirt]

images_rbd_pool=vms

images_type=rbd

rbd_secret_uuid=7e2aa02b-7ebf-42c0-912d-96600d322a3b

rbd_user=cinder

images_rbd_ceph_conf = /etc/ceph/ceph.conf

#下面这个配置没有做实验,可以去掉

libvirt_live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"

禁用文件注入。当启动一个实例的时候,nova通常会尝试打开rootfs。这时,nova注入一些数据,如密码、ssh 密钥,配置文件等到文件系统中。然而,这最好依靠元数据服务和cloud-init来完成。

在每个计算节点,编辑 /etc/nova/nova.conf 在 [libvirt] 标签添加:

libvirt_inject_password = false

libvirt_inject_key = false

libvirt_inject_partition = -2 命令

#systemctl restart openstack-nova-compute 2. 和glance集成 (已测试) 编辑 /etc/glance/glance-api.conf并添加如下内容:

[glance_store]

default_store = rbd 

stores = rbd

rbd_store_pool = vms

rbd_store_user = cinder

rbd_store_ceph_conf = /etc/ceph/ceph.conf

rbd_store_chunk_size = 8

如果要启动镜像的写时复制功能,添加下面的 [DEFAULT] 部分:

show_image_direct_url = True 重启服务

systemctl restart openstack-glance-api 3. 和cinder集成 (没有测试) 在openstack节点和storage节点编辑 /etc/cinder/cinder.conf配置文件并添加如下内容:

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

rbd_store_chunk_size = 4

rados_connect_timeout = -1

glance_api_version = 2

如果使用cephx验证,需要配置user和uuid:

rbd_user = cinder

rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

继续阅读