ceph ansible部署ceph集群
参考:https://docs.ceph.com/ceph-ansible/master/
项目地址:https://github.com/ceph/ceph-ansible
节点规划:
主机名 | public-ip | 磁盘 | 角色 |
---|---|---|---|
node1 | 192.168.93.20 | 系统盘: sda osd盘: sdb | ceph-ansible,monitor,mgr,mds,osd |
node2 | 192.168.93.21 | 系统盘: sda osd盘: sdb | monitor,mgr,mds,osd |
node3 | 192.168.93.22 | 系统盘: sda osd盘: sdb | monitor,mgr,mds,osd |
基本配置
所有节点配置主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
配置hosts解析
cat >> /etc/hosts <<EOF
192.168.93.20 node1
192.168.93.21 node2
192.168.93.22 node3
EOF
配置防火墙和时间同步
#关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#配置时间同步
yum install -y chrony
systemctl enable --now chronyd
添加节点SSH互信
ssh-keygen -t rsa
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
由于ceph ansible安装docker版本较低,这里提前手动安装docker
#安装docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker-ce
yum install -y docker-ce
#修改docker配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
#启动docker服务
systemctl enable --now docker
安装ceph集群
克隆存储库:
yum install -y git
git clone https://github.com/ceph/ceph-ansible.git
#网络较慢时其他克隆方式
git clone https://github.com.cnpmjs.org/ceph/ceph-ansible.git
接下来,必须确定ceph-ansible要使用哪个分支。有稳定的分支可供选择,或者可以使用master分支,这里安装nautilus版本。
cd ceph-ansible
git tag
git checkout v4.0.9
配置阿里云pip源
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF
使用pip和提供的requirements.txt安装Ansible和其他所需的Python库:
yum install -y python-pip
pip install -U pip
pip install -r requirements.txt
release版本
根据需求选择以下分支,其中stable-*分支已经过QE测试,master分支应视为实验性分支,请谨慎使用。
- stable-3.0支持Ceph版本jewel和luminous。该分支需要Ansible版本2.4。
- stable-3.1支持Ceph版本luminous和mimic。该分支需要Ansible版本2.4。
- stable-3.2支持Ceph版本luminous和mimic。该分支需要Ansible版本2.6。
- stable-4.0支持Ceph版本nautilus。该分支需要Ansible版本2.8。
- stable-5.0支持Ceph版本octopus。该分支需要Ansible版本2.9。
- master支持Ceph的master分支。该分支需要Ansible版本2.9。
配置和使用
为Ceph集群创建inventory文件,playbook和配置文件。
配置inventory
Ansible inventory文件定义了集群中的主机以及每个主机在Ceph群集中扮演的角色。inventory文件的默认位置是/etc/ansible/hosts但是可以将该文件放置在任何位置并与ansible-playbook -i 参数一起使用。
inventory文件示例如下所示:
mkdir -p /etc/ansible
cat > /etc/ansible/hosts << EOF
[mons]
node1
node2
node3
[osds]
node1
node2
node3
[mdss]
node1
node2
node3
[mgrs]
node1
node2
node3
EOF
配置playbook
该ceph-ansible项目的根目录有一个示例playbook,名为site.yml.sample。该playbook在大多数情况下都可以正常工作,但默认情况下,它包括了可能不适用于集群设置的每个daemon group 。执行以下步骤来准备剧本。
重命名示例playbook,根据集群的需要对playbook进行修改:
cp site.yml.sample site.yml
配置变量
Ceph集群的配置将通过使用ceph-ansible提供的ansible变量进行设置。所有这些选项及其默认值都在ceph-ansible项目group_vars/目录中定义。在group_vars/目录下,有许多示例Ansible配置文件,它们通过文件名与每个Ceph守护程序组相关。例如,osds.yml.sample包含OSD守护程序的所有默认配置。该all.yml.sample文件是一个特殊group_vars文件,适用于群集中的所有主机。
在最基本的级别上,必须告诉ceph-ansible要安装的Ceph版本,安装方法,集群网络设置以及如何配置OSD。要开始配置,请重命名group_vars/您要使用的每个文件,以使其在文件名的末尾不包含.sample,请取消要更改选项的注释并提供你自己的值。
使用lvm batch方法部署Ceph上游版本octopus的示例配置如下所示group_vars/all.yml:
[root@node1 ceph-ansible]# cd group_vars/
cp all.yml.sample all.yml
cat >> all.yml <<EOF
configure_firewall: False
ceph_origin: repository
ceph_repository: community
ceph_stable_release: nautilus
ceph_mirror: http://mirrors.aliyun.com/ceph
ceph_stable_key: http://mirrors.aliyun.com/ceph/keys/release.asc
ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"
public_network: "192.168.93.0/24"
cluster_network: "192.168.93.0/24"
monitor_interface: ens33
cephx: true
devices:
- '/dev/sdb'
ceph_conf_overrides:
mon:
mon_allow_pool_delete: true
EOF
执行部署
ansible-playbook -i /etc/ansible/hosts site.yml
维护集群
ceph-ansible在infrastructure-playbooks
目录中提供了一组playbook,以便执行一些基本的操作。
添加osd
$ cat hosts
[mons]
mon-node-1
mon-node-2
mon-node-3
[mgrs]
mon-node-1
mon-node-2
mon-node-3
[osds]
osd-node-1
osd-node-2
osd-node-3
osd-node-99
$ ansible-playbook -vv -i hosts site-container.yml --limit osd-node-99
缩小osd
$ ansible-playbook -vv -i hosts infrastructure-playbooks/shrink-osds.yml -e osd_to_kill=1,2,3
清理集群
ansible-playbook -vv infrastructure-playbooks/purge-container-cluster.yml