文章目录
Ceph部署
前期环境准备
主机名 | public网络 | cluster网络 | 角色 |
---|---|---|---|
admin | 192.168.242.69 | admin(管理节点) | |
node01 | 192.168.242.66 | 192.168.242.100.11 | mon、mgr、osd |
node02 | 192.168.242.67 | 192.168.242.100.12 | mon、mgr、osd |
node03 | 192.168.242.68 | 192.168.242.100.13 | mon、osd |
client | 192.168.242.70 | client |
####主机准备
为 node01 node02 node03 三台主机另外添加一张网卡和三个硬盘
###磁盘刷新
lsblk
如果在启动时添加磁盘,使用下面的命令刷新磁盘
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
####网卡设置
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-ens33
###修改网卡配置文件,修改IP地址
vim ifcfg-ens33
systemctl restart network
###环境准备
###可选步骤:创建 Ceph 的管理用户
useradd cephadm
passwd cephadm
visudo
cephadm ALL=(root) NOPASSWD:ALL
####防火墙设置
####关闭 selinux 与防火墙
systemctl disable --now firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
####根据规划设置主机名
####在每一台主机上分别设置
hostnamectl set-hostname admin
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname client
su
####在所有的主机上设置
####配置 hosts 解析
vim /etc/hosts
192.168.242.69 admin
192.168.242.66 node01
192.168.242.67 node02
192.168.242.68 node03
192.168.242.70 client
实验部署
软件安装
---所有主机---
###安装常用软件和依赖包
yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass
----admin----
###在admin管理节点配置 ssh 免密登陆其他所有节点
vim /etc/ssh/ssh_config
注释掉: StrictHostKeyChecking ask
将 ask 改为 no
ssh-keygen -t rsa
sshpass -p '123' ssh-copy-id root@admin
sshpass -p '123' ssh-copy-id root@node01
sshpass -p '123' ssh-copy-id root@node02
sshpass -p '123' ssh-copy-id root@node03
----所有主机---
###配置时间同步(一定要做)
systemctl enable --now chronyd
timedatectl set-ntp true #开启 NTP
timedatectl set-timezone Asia/Shanghai #设置时区
chronyc -a makestep #强制同步下系统时钟
timedatectl status #查看时间同步状态
chronyc sources -v #查看 ntp 源服务器信息
timedatectl set-local-rtc 0 #将当前的UTC时间写入硬件时钟
###重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
####关闭无关服务,邮箱服务
systemctl disable --now postfix
---所有主机---
###配置Ceph yum 源
wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
rpm -ivh ceph-release-1-1.el7.noarch.rpm --force
---所有主机---
###执行完上面所有的操作之后重启所有主机(可选)
sync ####同步操作
reboot ####重启
部署Ceph集群
---所有主机---
####为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行
mkdir -p /etc/ceph
---admin主机---
###安装 ceph-deploy 部署工具
cd /etc/ceph
yum install -y ceph-deploy
###查看版本
ceph-deploy --version
---admin---
####在管理节点为其它节点安装 Ceph 软件包
#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本
####方法一
###下面的命令执行比较的慢,可以采用另外一种方式
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin
###ceph-deploy install 本质就是在执行下面的命令:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw
###方法二
####也可采用手动安装 Ceph 包方式,在其它节点上执行下面的命令将 Ceph 的安装包都部署上:
sed -i 's#download.ceph.com#mirrors.tuna.tsinghua.edu.cn/ceph#' /etc/yum.repos.d/ceph.repo
yum install -y ceph-mon ceph-radosgw ceph-mds ceph-mgr ceph-osd ceph-common ceph
部署mon节点
---admin---
###在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点
###生成初始配置
cd /etc/ceph
ceph-deploy new --public-network 192.168.242.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03
###命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.conf #ceph的配置文件
ceph-deploy-ceph.log #monitor的日志
ceph.mon.keyring #monitor的密钥环文件
---admin---
###在管理节点初始化 mon 节点
cd /etc/ceph
ceph-deploy mon create node01 node02 node03
#创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台
ceph-deploy --overwrite-conf mon create-initial
###如果mon节点配置文件与管理节点不一样,可以执行这个命令
###配置初始化 mon 节点,并向所有节点同步配置
### --overwrite-conf 参数用于表示强制覆盖配置文件
ceph-deploy gatherkeys node01
###可选操作,向 node01 节点收集所有密钥
###命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.bootstrap-mds.keyring #引导启动 mds 的密钥文件
ceph.bootstrap-mgr.keyring #引导启动 mgr 的密钥文件
ceph.bootstrap-osd.keyring #引导启动 osd 的密钥文件
ceph.bootstrap-rgw.keyring #引导启动 rgw 的密钥文件
ceph.client.admin.keyring #ceph客户端和管理端通信的认证密钥,拥有ceph集群的所有权限
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring
---node01节点---
###在 mon 节点上查看自动开启的 mon 进程
ps aux | grep ceph
---admin---
###在管理节点查看 Ceph 集群状态
cd /etc/ceph
ceph -s
###查看 mon 集群选举的情况
ceph quorum_status --format json-pretty | grep leader
####扩容 mon 节点
####横向扩展
ceph-deploy mon add <节点名称>
---admin---
###部署能够管理 Ceph 集群的节点(可选)
###可实现在各个节点执行 ceph 命令管理集群
cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03
#向所有 mon 节点同步配置,确保所有 mon 节点上的 ceph.conf 内容必须一致
ceph-deploy admin node01 node02 node03
#本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点
---mom节点---
###在 mon 节点上查看
ls /etc/ceph
ceph.client.admin.keyring ceph.conf rbdmap tmpr8tzyc
cd /etc/ceph
ceph -s
部署OSD存储节点
###node主机添加完硬盘后不要分区,直接使用
lsblk
---admin---
####如果是利旧的硬盘,则需要先擦净(删除分区表)磁盘(可选,无数据的新硬盘可不做)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb
---admin---
###添加 osd 节点
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb
####查看 ceph 集群状态
ceph -s
####查看OSD状态
ceph osd stat
ceph osd tree
rados df
---admin---
ceph osd status
###查看 osd 状态,需部署 mgr 后才能执行
ceph osd df
###查看 osd 容量,需部署 mgr 后才能执行
---admin---
#扩容 osd 节点
cd /etc/ceph
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd
###添加 OSD 中会涉及到 PG 的迁移,由于此时集群并没有数据,因此 health 的状态很快就变成 OK,如果在生产环境中添加节点则会涉及到大量的数据的迁移。
部署mgr节点
---admin---
####ceph-mgr守护进程以Active/Standby模式运行,可确保在Active节点或其ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。
###根据官方的架构原则,mgr至少要有两个节点来进行工作。
cd /etc/ceph
ceph-deploy mgr create node01 node02
ceph -s
####解决 HEALTH_WARN 问题:mons are allowing insecure global_id reclaim问题:
禁用不安全模式:
ceph config set mon auth_allow_insecure_global_id_reclaim false
####扩容 mgr 节点
ceph-deploy mgr create <节点名称>
---admin---
ceph osd status
###查看 osd 状态,需部署 mgr 后才能执行
ceph osd df
###查看 osd 容量,需部署 mgr 后才能执行
开启监控模块
---node01---
####在 ceph-mgr Active节点执行命令开启
ceph -s | grep mgr
yum install -y ceph-mgr-dashboard
cd /etc/ceph
ceph mgr module ls | grep dashboard
---node01---
####开启 dashboard 模块
ceph mgr module enable dashboard --force
####禁用 dashboard 的 ssl 功能
ceph config set mgr mgr/dashboard/ssl false
####配置 dashboard 监听的地址和端口
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8000
---node01---
####重启 dashboard
ceph mgr module disable dashboard
ceph mgr module enable dashboard --force
####确认访问 dashboard 的 url
ceph mgr services
####设置 dashboard 账户以及密码
echo "123" > dashboard_passwd.txt
###方法一(以被替换)
ceph dashboard set-login-credentials admin -i dashboard_passwd.txt
###方法二
ceph dashboard ac-user-create admin administrator -i dashboard_passwd.txt
###浏览器访问:http://192.168.242.66:8000
###账号密码为 admin/123
管理pool
-
上面我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?
-
首先我们需要在 Ceph 中定义一个 Pool 资源池。
-
Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRUSH 算法映射到不同的 OSD 上;同时 Pool 可以设置副本 size 大小,默认副本数量为 3。
-
Ceph 客户端向 monitor 请求集群的状态,并向 Pool 中写入数据,数据根据 PGs 的数量,通过 CRUSH 算法将其映射到不同的 OSD 节点上,实现数据的存储。
-
这里我们可以把 Pool 理解为存储 Object 数据的逻辑单元;当然,当前集群没有资源池,因此需要进行定义。
###创建一个 Pool 资源池,其名字为 mypool,P
###Gs 数量设置为 64,设置 PGs 的同时还需要设置 PGP(通常PGs和PGP的值是相同的):
###PG (Placement Group),pg 是一个虚拟的概念,用于存放 object
###PGP(Placement Group for Placement purpose),相当于是 pg 存放的一种 osd 排列组合cd /etc/ceph
ceph osd pool create mypool 64 64 -
PG数官方推荐:一个pool资源池内应该包含多少PG数
-
OSD总数 < 5 ,PG数推荐为128
-
5 < OSD总数 < 10 ,PG数推荐为512
-
10 < OSD总数 < 50 ,PG数推荐为4096
-
OSD总数 > 50 ,PG数推荐为( Target PGs per OSD ) x ( OSD # ) x ( %Data ) / ( Size )(取最接近2的次方值)
####查看集群 Pool 信息
ceph osd pool ls 或 rados lspools
ceph osd lspools ###能查看到资源池的ID号
-
####查看资源池副本的数量
ceph osd pool get mypool size
###查看 PG 和 PGP 数量
ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num
###修改 pg_num 和 pgp_num 的数量为 128
ceph osd pool set mypool pg_num 128
ceph osd pool set mypool pgp_num 128
ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num
####修改 Pool 副本数量为 2
ceph osd pool set mypool size 2
ceph osd pool get mypool size
####修改默认副本数为 2
vim ceph.conf
......
osd_pool_default_size = 2
ceph-deploy --overwrite-conf config push node01 node02 node03
###重启服务
systemctl restart ceph-mon.target
####删除 Pool 资源池
###删除存储池命令存在数据丢失的风险,Ceph 默认禁止此类操作,需要管理员先在 ceph.conf 配置文件中开启支持删除存储池的操作
vim ceph.conf
......
[mon]
mon allow pool delete = true
###推送 ceph.conf 配置文件给所有 mon 节点
ceph-deploy --overwrite-conf config push node01 node02 node03
###所有 mon 节点重启 ceph-mon 服务
systemctl restart ceph-mon.target
###执行删除 Pool 命令
ceph osd pool rm pool01 pool01 --yes-i-really-really-mean-it