前言
此文章基于已部署过单节点环境,有一定的基础概念。
单节点部署参考:https://www.jianshu.com/p/73598a5cd00b
全程使用root权限操作。
已测试queens版本。3节点,其中2个节点只部署存储和网络。存储后端使用ceph。
环境准备
整体介绍
基于vmware虚拟机搭建平台。
3台虚拟机。分别为node01(选为部署节点),node02,node03。
由于性能问题,node02和node03只作为存储和网络节点。
镜像均使用CentOS-7-x86_64-Minimal-1708.iso。
- node01:
- 1张nat网卡(ens33):本机网卡
- 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
- 1张host-only网卡(ens35):openstack管理网网卡
- 额外添加一块50G硬盘作为ceph存储
- 6G内存,2核
- node02:
- 1张nat网卡(ens33):本机网卡
- 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
- 1张host-only网卡(ens35):openstack管理网网卡
- 额外添加一块50G硬盘作为ceph存储
- 2G内存,1核
- node03:
- 1张nat网卡(ens33):本机网卡
- 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
- 1张host-only网卡(ens35):openstack管理网网卡
- 额外添加一块50G硬盘作为ceph存储
- 2G内存,1核
基础环境配置
1. 网卡配置
参考《前言》中的单节点部署文档
- node01:
- ens33: 10.10.10.80
- ens34: 不配置ip
- ens35: 192.168.10.80
- node02:
- ens33: 10.10.10.90
- ens34: 不配置ip
- ens35: 192.168.10.90
- node03:
- ens33: 10.10.10.95
- ens34: 不配置ip
- ens35: 192.168.10.95
2. 加速源以及防火墙配置
参考《前言》中的单节点部署文档
所有节点关闭firewalld
systemctl disable firewalld
systemctl stop firewalld
3个节点均配置加速源以及iptables,此文章不配置私有仓库。
3. 主机解析配置
vim /etc/hosts
192.168.10.80 node01
192.168.10.90 node02
192.168.10.95 node03
并且在每个节点上分别修改hostname,ceph将使用此命令得结果。
node01 节点上执行:hostname node01
node02 节点上执行:hostname node02
node03 节点上执行:hostname node03
4. 基础软件安装(3节点均需执行)
单节点环境当中并没有手动安装docker,自动安装的版本很老。此时手动安装较新版本的docker(18.09)。
安装docker:
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce-18.09.3 -y
systemctl enable docker
配置docker:
vi /usr/lib/systemd/system/docker.service
在[Service]中添加:
MountFlags=shared
重启docker:
systemctl daemon-reload
systemctl restart docker
安装其它基础软件
yum install -y epel-release
yum install -y python-pip
pip install -U pip
yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python
yum install -y ansible
pip install -U ansible
编辑 ansible配置
vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100
安装kolla-ansible
pip install --ignore-installed PyYAML
pip install kolla-ansible==7.0.0
cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
cp /usr/share/kolla-ansible/ansible/inventory/* /opt/
5. 配置免密登陆
在node01上执行如下命令:
- 生成公私钥
ssh-keygen
- 复制部署节点的公钥到其它节点上
如下命令需输入密码,注意用户使用的是root
ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02
ssh-copy-id -i /root/.ssh/id_rsa.pub root@node03
- 测试ssh
ssh node02
ssh node03
6. 在node01上执行,配置globals.yml
vim /etc/kolla/globals.yml
kolla_base_distro: "centos" # 基础容器镜像版本
kolla_install_type: "source" # 源码安装方式安装组件
openstack_release: "queens" # openstack版本,选择你需要的
network_interface: "ens35" # 管理网使用得网卡
neutron_external_interface: "ens34" # public网使用得网卡
kolla_internal_vip_address: "192.168.10.81" # ha或者keepalived代理的服务内部地址。
kolla_external_vip_address: "10.10.10.81" # ha或者keepalived代理的服务外部地址。
enable_cinder: "yes"
enable_horizon: "yes"
# 以下为ceph配置
enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_ceph_rgw_keystone: "yes"
#ceph_target_max_bytes: "" # 表示每个cache pool最大大小。注意,如果配置了cache盘,此项不配置会导致cache不会自动清空。cache_osd_size*cache_osd_num/replicated/cache_pool_num
#ceph_target_max_objects: "" # 表示cache pool最大的object数量
ceph_pool_pg_num: 32 # Total PGs = ((Total_number_of_OSD * 100) / pool_count / replicated . 当前环境计算结果为32
ceph_pool_pgp_num: 32
glance_backend_ceph: "yes"
glance_backend_file: "no"
cinder_backend_ceph: "yes"
cinder_backup_driver: "ceph"
nova_backend_ceph: "yes"
7. 在node01上执行,配置mutinode
这里直接从all-in-one复制比较方便:
cp /opt/all-in-one /opt/node
替换掉localhost:
sed -i "/^localhost/c node01" /opt/node
修改配置文件
vim /opt/node
将 node02 node03 添加到[network]和[storage]下。意思为 node02 node03 作为network节点和storage节点
8. ceph硬盘配置
3个节点上均有一块50G得硬盘,在当前环境中为/dev/sdb
在node01上执行:
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
在node02上执行:
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
在node03上执行:
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
9. 在node01上执行,ceph配置文件
目前安装kolla-ansible默认使用bluestore得ceph。这里演示使用filestore。需修改文件
vim /usr/share/kolla-ansible/ansible/group_vars/all.yml
修改如下属性:
ceph_osd_store_type: "filestore"
开始部署
kolla-ansible -i /opt/node bootstrap-servers
kolla-ansible -i /opt/node prechecks
kolla-ansible -i /opt/node deploy
结束部署
查看ceph状态
docker exec ceph_mon ceph -s
基本使用(可参考单节点)
pip install --ignore-installed ipaddress
pip install -U decorator
pip install python-openstackclient python-glanceclient python-neutronclient
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
openstack service list --long
至此部署结束。
openstack网络介绍
https://www.jianshu.com/writer#/notebooks/31342015/notes/43532637/preview
ceph介绍
ceph基于Reliable Autonomic Distributed Object Store (RADOS)。RADOS在存储群集中分配对象并复制对象以实现容错。
RADOS包含以下主要组件:
- ceph-osd: Object Storage Device (OSD) Daemon,对象存储设备服务。ceph-osd是Ceph分布式文件系统的对象存储守护进程。 它负责将对象存储在本地文件系统上,并通过网络提供对它们的访问。必须在群集中的每个服务器上运行此守护程序。 每个OSD都可以关联硬盘驱动器。
- ceph-mds: Meta-Data Server (MDS),元数据服务。 MDS在Ceph客户端的对象之上构建POSIX文件系统。不使用Ceph文件系统,则不需要元数据服务器。
- ceph-mon: Monitor (MON),监控服务。轻量级守护程序,用于处理与外部应用程序和客户端的所有通信。 它还为Ceph / RADOS集群中的分布式决策提供了共识。 例如,当您在客户端上安装Ceph共享时,您指向MON服务器的地址。 它检查数据的状态和一致性。 在理想的设置中,您必须在不同的服务器上运行至少三个ceph-mon守护进程。
其它组件
- ceph-mgr: Ceph Manager Daemon(ceph-mgr),管理服务。与监视器守护程序一起运行,为外部监视和管理系统提供额外的监视和接口。
- ceph-nfs: 可以使用NFS-Ganesha NFS Server通过NFS协议导出CephFS命名空间。NFS-Ganesha提供了一个文件系统抽象层(FSAL)来插入不同的存储后端。Ceph对象网关可以配置为在嵌入NFS-Ganesha NFS Server时提供基于文件的访问。
- ceph-rgw: Ceph Object Gateway,对象网关服务。Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是一个用于与Ceph存储集群交互的HTTP服务器。 由于它提供与OpenStack Swift和Amazon S3兼容的接口,因此Ceph对象网关具有自己的用户管理。 Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据的相同Ceph存储集群中。 S3和Swift API共享一个公共命名空间,因此您可以使用一个API编写数据并使用另一个API检索它。
常见问题及解决
参考:
http://docs.ceph.com/docs/master/rados/troubleshooting/troubleshooting-pg/
1.
Fetching Ceph Keyrings … No JSON Object Could be Decoded
此类问题为删除环境时未删除干净,所有节点上使用docker volume ls
查看是否有未清除干净得卷。手动删除。
参考:
https://docs.oracle.com/cd/E78305_01/E78304/html/troubleshoot-deploy-ceph.html
2.
pg_num 128 size 3 would mean 768 total pgs
类似问题为pg 数量设置不正确,根据实际情况调整大小。但不一定每次报这个问题都是数量不正确导致得。
3.
若一直无法定位问题,可去容器中查看日志。
比如,日志一直报无法连接之类得,检查防火墙(iptables,firewalld)
4.
在反复重装得情况下,可能触发ceph无法mount磁盘得问题。在vmware中删掉此磁盘,重新创建即可。
经测试,正确得重装姿势为:
kolla-ansible -i /opt/node destroy --yes-i-really-really-mean-it
等待成功后,再重新命名磁盘(前面得parted命令)
常用命令及解释
ceph -s # 查看整体状态
ceph osd tree # 查看osd结构,通常看是否与host对应。
ceph osd lspools # 查看池信息
ceph health detail # 查看健康详情
ceph osd dump # 查看osd详情
ceph pg dump # 查看pg详情
ceph osd crush xxxx # 此类命令为ceph策略相关。建议了解
扩展知识
- osd(filestore后端)相关
在同一个主机有多个osd磁盘时,磁盘标签需添加后缀区分。比如2个osd:
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_001 1 -1
parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_002 1 -1
每个osd盘都会有对应一个osd得容器。
其次,osd还可以有日志盘,缓存盘,这两个均建议为固态盘。