通过 devstack 方式安装的 all-in-one,如果在服务器重启之后,很多 OpenStack 服务是起不来的,这个时候需要执行一些命令。
1 | sudo su - stack |
通过 devstack 方式安装的 all-in-one,如果在服务器重启之后,很多 OpenStack 服务是起不来的,这个时候需要执行一些命令。
1 | sudo su - stack |
之前不知道什么原因,导致我的 hexo 博客不能用了,然后就重新部署了一下,参照我之前的配置:
但是依然遇到了很多坑,特此写在这里。
1、使用 npm 安装 hexo 的时候屡次不成功。解决办法:
使用淘宝 NPM 镜像:
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
参考:http://www.runoob.com/nodejs/nodejs-npm.html
2、github 生成 ssh 失败
1 | $ ssh-keygen -t rsa -C C "iyuanzz@qq.com" |
解决办法:
删除一个 C
解决
2、使用命令hexo d
无法部署
解决办法
重新设置:
1 | npm install hexo-deployer-git --save |
最终部署成功!
我这里选择 glance 使用控制节点的存储,VM 保存在计算节点上,备份没有配置,所以 Ceph 只作为卷使用。
在 Ceph 节点上面,创建存储池:
1 | [root@node1 ~]# ceph osd pool create volumes 128 |
根据官方文档,这里初始化存储池失败。
1
2 [root@node1 ~]# rbd pool init volumes
error: unknown option 'pool init volumes'
运行 glance-api
, cinder-volume
, nova-compute
, cinder-backup
进程的节点都需要 Ceph 客户端。每一个都要有 ceph.conf
文件。
在计算节点和控制节点上创建 Ceph 目录:
1 | [root@controller ~]# cd /etc |
将配置文件传到控制节点和计算节点:
1 | [root@node1 ~]# ssh root@compute01 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf |
我部署的 OpenStack 为一个控制节点和一个计算节点。 glance-api
运行在控制节点上,cinder-volume
, nova-compute
运行在计算节点上,因此,控制节点和计算节点都需要配置为 Ceph 客户端。
在 glance-api
节点(控制节点)上,需要安装 librbd 的 Python 绑定:
1 | [root@controller ~]# sudo yum install python-rbd |
在 cinder-volume
, nova-compute
节点(计算节点)上,安装 Python 绑定以及 Ceph 命令行工具:
1 | [root@compute01 ~]# sudo yum install ceph-common |
从 Ceph monitor 节点,为 Cinder 创建一个新用户。
1 | [root@node1 ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes' |
为 client.cinder 添加密钥环并改变所属者。
1 | [root@node1 ~]# ceph auth get-or-create client.cinder | ssh root@compute01 sudo tee /etc/ceph/ceph.client.cinder.keyring |
运行 nova-compute 的节点还需要将 client.cinder 用户的密钥存储在 libvirt 中。在从 Cinder 中添加块设备时,libvirt 进程需要它访问群集。
在运行 nova-compute 的节点上创建密钥的临时副本:
1 | [root@node1 ~]# ceph auth get-key client.cinder | ssh root@compute01 tee client.cinder.key |
在计算节点上,为密钥生成 UUID, 并保存 UUID,以便待会配置 nova-compute。
1 | [root@compute01 ~]# uuidgen > uuid-secret.txt |
然后在计算节点上,向 libvirt 中添加密钥,并删除临时副本:
1 | [root@compute01 ~]# cat > secret.xml <<EOF |
cinder-volume
节点需要 Ceph 块设备,volume 存储池,用户以及密钥的 UUID,才能和 Ceph 块设备连接。要配置 Cinder,请执行以下步骤:
打开 Cinder 配置文件。
1 | [root@compute01 ~]# vim /etc/cinder/cinder.conf |
在 [DEFAULT]
选项中,开启 Ceph 作为 Cinder 后端存储。
1 | enabled_backends = ceph |
确认 Glance API 版本是 2。如果你在enabled_backends
中配置了多后端, glance_api_version = 2
必须在 [DEFAULT]
选项中设置而不是在 [ceph]
选项中。
1 | glance_api_version = 2 |
在cinder.conf
中创建一个 [ceph]
选项,添加以下部分到 [ceph]
选项中。
设置 volume_driver
使用 Ceph 后端存储。
1 | volume_driver = cinder.volume.drivers.rbd.RBDDriver |
设置集群名称以及 Ceph 配置文件的位置。
1 | rbd_cluster_name = e8b7ae85-8d03-4160-becc-10df8f385c59 |
默认情况下,OSP 在 rbd
池中存储 Ceph 卷。
1 | rbd_pool = volumes |
指定 rbd_user
,把它设置为 cinder
用户。然后指定 rbd_secret_uuid
,UUID 存储在 uuid-secret.txt
文件中。
1 | rbd_user = cinder |
指定以下设置。
1 | rbd_flatten_volume_from_snapshot = false |
最终的设置应该像下面一样:
1 | [DEFAULT] |
1 | [root@compute01 ~]# systemctl restart openstack-cinder-volume |
官方文档基本没用。
ceph 集群采用如下的架构:
添加向管理节点上添加 Ceph 仓库,然后安装 ceph-deploy 工具。
添加并启用 EPEL 仓库:
1 | [root@admin-node ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm |
向 yum 配置文件中添加 Ceph 仓库,yum 配置文件在 /etc/yum.repos.d/ceph.repo
。
1 | [root@admin-node ~]# vim /etc/yum.repos.d/ceph.repo |
更新仓库并安装 ceph-deploy 工具:
1 | [root@admin-node ~]# yum update |
1 | [root@ceph_node ~]# yum install ntp ntpdate ntp-doc |
1 | [root@ceph_node ~]# sudo yum install openssh-server |
在每个 Ceph 节点上创建一个新用户(storage):
1 | [root@ceph_node ~]# useradd -d /home/storage -m storage |
确保用户具有 sudo 特权:
1 | [root@ceph_node ~]# echo "storage ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/storage |
生成 SSH 密钥,但是不要用 sudo 或者 root 用户。口令保留为空。
1 | [storage@admin-node ~]$ ssh-keygen |
复制密钥到各个 Ceph 节点。
1 | [storage@admin-node ~]$ ssh-copy-id storage@controller |
这里官方文档建议可以修改
~/.ssh/config
文件,把用户名写进去,这样在 ceph-deploy 时就不用指定用户名,事实证明,这个方法无效,会提示拒绝访问。还是指定用户名比较好。
1 | [root@ceph_node ~]# systemctl stop firewalld |
1 | [root@ceph_node ~]# yum install yum-plugin-priorities |
先在管理节点上创建一个目录,这样,所有生成的文件都会保存在该目录下。
1 | [storage@admin-node ~]$ mkdir my-cluster |
不要用 sudo
或者 root 用户执行 ceph-deploy 命令,因为它不会在远程主机上调用所需的 sudo
命令。
如果在某些地方遇到麻烦,可以执行下面的命令从头开始。
1 | [storage@admin-node ~]$ ceph-deploy --username storage purge {ceph-node} [{ceph-node}] |
创建集群。先初始化监控节点。
1 | [storage@admin-node my-cluster]$ ceph-deploy --username storage new controller |
查看输出 ls
你可以看到一个 Ceph 配置文件 ceph.conf
一个监控密钥环 ceph.mon.keyring
还有一个日志文件。
1 | [storage@admin-node my-cluster]$ ls |
安装 Ceph 软件包。
1 | [storage@admin-node my-cluster]$ ceph-deploy --username storage install controller compute01 compute02 |
配置初始 monitor 并收集密钥环。
1 | [storage@admin-node my-cluster]$ ceph-deploy mon create-initial |
官方文档说会有以下输出:
但是我的输出是下面的:
1 | [storage@admin-node my-cluster]$ ls |
复制配置文件和管理密钥到管理节点和 Ceph 节点,这样你就可以使用 ceph CLI ,而不用每次都需要指定 monitor 的地址和 ceph.client.admin.keyring 。
1 | [storage@admin-node my-cluster]$ ceph-deploy --username storage admin controller compute01 compute02 |
添加三个 OSD。经过试验新版本的 Ceph OSD 进程只能装在空硬盘上,安装在目录上和分区上会失败。(据说之前的版本不需要,我装的 J 版本,10.2.10,但我试验了 H 版本,最终失败了,所以就选择在虚拟机里部署。)安装在空分区上经过如下步骤:
1 | [storage@admin-node my-cluster]$ ceph-deploy --username storage osd prepare controller:/dev/sda3 compute01:/dev/sda3 compute02:/dev/sda3 |
报错:
1 | [controller][WARNIN] ceph_disk.main.Error: Error: ['ceph-osd', '--cluster', 'ceph', '--mkfs', '--mkkey', '-i', u'2', '--monmap', '/var/lib/ceph/tmp/mnt.uidkdf/activate.monmap', '--osd-data', '/var/lib/ceph/tmp/mnt.uidkdf', '--osd-journal', '/var/lib/ceph/tmp/mnt.uidkdf/journal', '--osd-uuid', u'ade546d3-e1fa-4dd4-b5a5-f9fb8f145841', '--keyring', '/var/lib/ceph/tmp/mnt.uidkdf/keyring', '--setuser', 'ceph', '--setgroup', 'ceph'] failed : 2017-10-23 11:02:08.694483 7f69e5898800 -1 filestore(/var/lib/ceph/tmp/mnt.uidkdf) mkjournal error creating journal on /var/lib/ceph/tmp/mnt.uidkdf/journal: (13) Permission denied |
由于我的物理机只有一块硬盘,最终不得不选择在虚拟机中部署集群。在虚拟机中添加了一块硬盘,部署 OSD:
注意,以下是我在虚拟机中重新按照之前的步骤部署的。主机名分别设置为 node1,node2,node3
1 | ceph-deploy osd create node1:vdb node2:vdb node3:vdb |
节点分区情况如下所示:
1 | [root@node1 ~]# lsblk |
检查集群的健康状态。
1 | [root@node1 ~]# ceph health |
1、parted 查看磁盘的未分区空间
2、fdisk 对空白磁盘进行分区(也可使用 parted 命令分区)
3、fdisk 将 systemID 修改为LVM标记(8e)
4、partprobe 更新系统分区表
5、pvcreat 将 Linux 分区处理成物理卷 PV
6、vgcreate 将 PV 处理成 VG,或者 vgextend,将某个物理卷添加进 VG
7、lvcreate 将卷组分成若干个逻辑卷 LV
8、mkfs.xfs 将 LV 格式化,挂载格式化后的 LV 到文件系统
1 | pvcreate 创建物理卷 # pvcreate /dev/sda6 |
1 | vgcreate 创建卷组 |
1 | lvcreate 创建逻辑卷 |
创建快照需要注意:
为根分区创建快照:
1 | [root@controller ~]# lvcreate -L 10G -s -n root_orign_backup /dev/centos_controller/root |
要恢复快照,我们首先需要卸载文件系统。注意,要卸载被恢复的文件系统。
只想检查挂载点是否卸载成功,可以使用下面的命令。
1 | df -h |
卸载之后恢复快照:
1 | # lvconvert --merge /dev/centos_controller/root_orign_backup |
在合并完成后,快照卷将被自动移除。
要自动扩展快照,我们可以通过修改配置文件来进行。对于手动扩展,我们可以使用lvextend。
1 | # vim /etc/lvm/lvm.conf |
搜索单词 autoextend。
修改此处的100为75,这样自动扩展的起始点就是75,而自动扩展百分比为20,它将自动扩容百分之20。
lsblk:查看分区情况
1 | [root@controller ~]# lsblk |
df -h:查看可用空间
1 | [root@controller ~]# df -h |
fdisk:分区命令
1 | [root@controller ~]# fdisk -l |
parted:与fdisk类似
1 | [root@controller ~]# parted |