在上一篇文章 Vagrant 单机快速模拟集群 中,介绍了如何在本机中,快速利用 Vagrant 虚拟机管理工具快速起四台虚拟机来模拟集群,这篇文章将利用这些虚拟机来搭建一个 Ansible 跟 Ceph 的集群环境。

虚拟机配置

hostname ip 搭建组件
deploy 10.1.0.104 Ansible + ceph deploy
node1 10.1.0.101 mon + osd.0
node2 10.1.0.102 mon + osd.1
node3 10.1.0.103 mon + osd.2
以上是各虚拟机节点的配置情况。四各节点内存都是 512 M,CPU 一核,系统 Dabian 9。

安装过程

1. 改 hostname 跟 hosts 文件

改 hostname 跟 hosts 有利于识别节点还有可以让节点之间靠 hostname 来通信。

创建虚拟机的时候已经设好了 hostname,把下面一段加入每个节点的 /etc/hosts 即可:

10.1.0.101    node1
10.1.0.102    node2
10.1.0.103    node3
10.1.0.104    deploy

2. 添加用户

下一件要做的就是,让添加部署的时候要用的用户了。在每个节点都执行:

sudo useradd -d /home/test -m test
sudo echo "test ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/test
sudo chmod 0440 /etc/sudoers.d/test
sudo passwd test

还顺便添加了无密码 sudo 的权限

3.无密码 ssh 登录

添加部署节点 deploynode 的无密码 ssh 登录,以搭建 Ansible 然后可以批量对 node 执行操作。在 deploy 执行:

su test
ssh-keygen
cat /home/test/.ssh/id_rsa.pub

三下回车生成密钥对,然后拷贝 /home/test/.ssh/id_rsa.pub 文件的内容到各个 node 节点:

su test
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/authorized_keys

编辑 ~/.ssh/config 文件:

Host node1
User test
Port 22

Host node2
User test
Port 22

Host node3
User test
Port 22

安装 Ansible

以下操作无特殊说明都在 deploy 节点进行操作。

1. 从包管理工具安装

sudo apt update && sudo apt install ansible

2. 修改 Ansible 配置文件

/etc/ansible/hosts 文件加入:

[ceph-deploy]
localhost  ansible_connection=local


[ceph-node]
node1
node2
node3

3. 验证&&测试:

ansible all -m ping

Ceph deploy 节点安装

1. 从包管理工具安装

添加 release key,软件源。这里安装的是 jewel 版本的 ceph:

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

更新,安装:

sudo apt-get update && sudo apt-get install ceph-deploy

Ceph 节点安装准备

1. 安装 ntp

修改时区:

ansible all -a "cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime" --sudo

建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),并跟同一个 ntp 服务器进行时间同步,以免因时钟漂移导致故障:

ansible all -a   "apt update" --sudo
ansible all -a   "apt install ntp -y" --sudo

编辑 ntp 配置文件:

vi ntp.conf

restrict cn.pool.ntp.org
server cn.pool.ntp.org

分发,重启服务:

ansible all -m copy -a "src=/home/test/ntp.conf dest=/etc/ntp.conf" --sudo
ansible all -a "systemctl restart ntp" --sudo 

2. 安装依赖

安装 python-minimal:

ansible all -a "apt -y install python-minimal -y" --sudo

3. 开放端口

ansible all -a "iptables -A INPUT -i eth0 -p tcp -s 10.1.0.0/24 --dport 6789 -j ACCEPT" --sudo
ansible all -a "iptables -A INPUT -i eth0 -p tcp -s 10.1.0.0/24 --dport 6800:7300 -j ACCEPT" --sudo
ansible all -a "iptables-save" --sudo

ceph-mon 安装

1. 添加 mon 节点

mkdir ceph-cluster && cd ceph-cluster
ceph-deploy new node1 node2 node3

2. 修改配置文件

修改 ceph.conf 文件,添加:

# osd 节点个数
osd_pool_default_size = 3
# osd 节点最小个数
osd_pool_default_min_size = 1
# ceph 公共网络
public network = 10.1.0.0/24

2. 安装 ceph 节点

使用华中科大镜像源安装:

ansible all -a "wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -" sudo
ceph-deploy install --repo-url http://mirrors.ustc.edu.cn/ceph/debian-jewel/ node1 node2 node3

3. 初始化 mon 节点

ceph-deploy mon create-initial
ceph-deploy admin  node1 node2 node3

ceph osd 节点安装

1. 查看集群 uuid

集群的 uuid 就是这个 ceph 集群的唯一标识,后面要用:

cat ceph.conf

[global]
fsid = 88fc281e-b9d0-4de3-b662-eaf3bef46943
mon_initial_members = node1, node2, node3
mon_host = 10.1.0.101,10.1.0.102,10.1.0.103
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd_pool_default_size = 3
osd_pool_default_min_size = 1
public network = 10.1.0.0/24

其中 88fc281e-b9d0-4de3-b662-eaf3bef46943 就是 uuid

2. 安装 osd

ssh 到各个节点,执行以下命令:

mkdir /home/test/osd0
sudo chown ceph: /home/test/osd0/
sudo ceph-disk prepare --cluster ceph   --cluster-uuid 88fc281e-b9d0-4de3-b662-eaf3bef46943 --fs-type  ext4 /home/test/osd0/
sudo ceph-disk activate /home/test/osd0/

以上命令是在 node1 上执行的,请将 uuid 替换成自己的,--fs-typeext4,请换成自己的类型。然后将 osd0 替换掉对应节点的 osd 编号。

3. 查看集群健康状况

当所有节点都安装完成,可以在任一节点执行以下命令查看集群健康状况:

ceps -s