目录
互信和解析
编辑/etc/hosts文件把集群各节点的ip和主机名解析写入
创建一套ssh key复制到每个节点
时钟
使用chrony进行时钟同步
配置源
由于国外源比较慢,本文采用了清华的源仓库
- 导入key
$ sudo wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
或者添加key:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E84AC2C0460F3994
- 添加源
$ sudo apt-add-repository "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus/ $(lsb_release -sc) main"
或者
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/ceph.list
- 更新缓存
$ sudo apt update
安装包
- 每个节点安装ceph的包
sudo apt-get update && sudo apt-get install ceph ceph-mds
部署mon
- 生成一个集群使用的uuid
uuidgen
- 新建并编辑ceph.conf
sudo vim /etc/ceph/ceph.conf
添加如下内容
[global]
fsid = {UUID} // uuidgen生成的id
mon initial members = {hostname}[,{hostname}]
mon host = {ip-address}[,{ip-address}]
- 创建mon的秘钥并写入keyring文件/tmp/ceph.mon.keyring
sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
- 创建一个管理秘钥(admin用户)并写入/etc/ceph/ceph.client.admin.keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
- 创建一个启动osd的用户并写入/var/lib/ceph/bootstrap-osd/ceph.keyring
sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
- 将admin和bootstrap-osd的key导入到mon的key文件中
sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
mon就拥有了admin和bootstrap-osd的权限
- 修改ceph.mon.keyring的所属权限
sudo chown ceph:ceph /tmp/ceph.mon.keyring
- 生成monmap文件
monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
- 创建mon目录
sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
cluster-name没有指定的话一般为ceph
- 修改mon目录的权限
sudo chown -R ceph.ceph /var/lib/ceph/mon/ceph-cargo-cluster-21
- 初始化mon目录,把monmap和mon的keyring写入mon目录
sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
- 修改ceph.conf
[global]
fsid = {cluster-id}
mon initial members = {hostname}[, {hostname}]
mon host = {ip-address}[, {ip-address}]
public network = {network}[, {network}]
cluster network = {network}[, {network}]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = {n} # 默认: 1024
osd pool default size = {n} # pool默认副本数
osd pool default min size = {n} # 最小对外提供服务的副本数
osd pool default pg num = {n} # pool缺省pg数
osd pool default pgp num = {n} # pool缺省pgp数
osd crush chooseleaf type = {n} # 默认为:1
- 启动mon服务并设置开机启动
sudo systemctl start ceph-mon@{id}
sudo systemctl enable ceph-mon@{id}
如果ceph.conf里写了多个mon地址,启动服务时其他mon没有启动则此时可能mon服务也起不来,可以把ceph.conf里只保留当前mon的地址
部署osd
本次部署采用bluestore lvm方式部署
- 复制/var/lib/ceph/bootstrap-osd/ceph.keyring 到osd节点的/var/lib/ceph/bootstrap-osd/ceph.keyring
- 在osd节点执行ceph-volume命令创建osd的Lvm分区
sudo ceph-volume lvm create --data {data-path}
{data-path}: 数据盘/dev/sdx
也可以分成两步
sudo ceph-volume lvm prepare --data {data-path} {metadata-path}
sudo ceph-volume lvm list
// 查看要添加的lvm的id
sudo ceph-volume lvm activate {id} {集群ID}
- 修改osd目录的属主属组
chown -R ceph:ceph /var/lib/ceph/osd/ceph-{id}
- 启动服务
systemctl enable ceph-osd@{id}
systemctl start ceph-osd@{id}
部署mgr
- 创建mgr用户
sudo ceph auth get-or-create mgr.{id} mon 'allow profile mgr' osd 'allow *' mds 'allow *'
example:
$ sudo ceph auth get-or-create mgr.cargo-cluster-32 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
[mgr.cargo-cluster-32]
key = AQARIsFjruFaLBAAgTus3ziBPPhE2OwFN4UOig==
- 创建mgr的目录
sudo mkdir /var/lib/ceph/mgr/${cluster-name}-{id}
example:
sudo mkdir /var/lib/ceph/mgr/ceph-cargo-cluster-32
可以合并成一步
sudo ceph auth get-or-create mgr.cargo-cluster-32 mon 'allow profile mgr' osd 'allow *' mds 'allow *' | sudo tee /var/lib/ceph/mgr/ceph-cargo-cluster-32/keyring
- 修改mgr目录的属组属组和keyring文件的权限
sudo chown ceph:ceph /var/lib/ceph/mgr/{cluster-name}-{id}/keyring
sudo chmod 600 /var/lib/ceph/mgr/{cluster-name}-{id}/keyring
- 启动服务
sudo systemctl enable ceph-mgr@cargo-cluster-32
sudo systemctl start ceph-mgr@cargo-cluster-32
- 查看mgr的模块
sudo ceph mgr module ls
- 安装dashboard模块
sudo apt install ceph-mgr-dashboard
通过
sudo ceph mgr module ls
就会看到这个模块通过
ceph mgr module enable <module>
和ceph mgr module disable <module>
可以激活和关闭模块:
- 激活dashboard模块
sudo ceph mgr module enable dashboard
- 创建https证书
ceph dashboard create-self-signed-cert
- 配置服务ip地址和端口
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8080
ceph config set mgr mgr/dashboard/ssl_server_port 8443
- 查看服务
ceph mgr services
- 创建用户
$ vim passfile
cargo1e9
$ ceph dashboard ac-user-create admin -i passfile administrator
部署mds
{id}: 主机名
{cluster-name}: 未指定的情况默认是"ceph"
- 创建mds的数据目录
sudo mkdir -p /var/lib/ceph/mds/{cluster-name}-{id}
- 创建一个mds的keyring文件
sudo ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
- 导入keyring文件并设置用户cephx权限
sudo ceph auth add mds.{id} osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring
- 添加mds配置到ceph.conf
[mds.{id}]
host = {id}
- 修改keyring文件的属主属组为ceph
sudo chown ceph.ceph /var/lib/ceph/mds/{cluster-name}-{id}/keyring
- 启动mds服务并设置为开机启动
sudo systemctl start ceph-mds@{id}
sudo systemctl enable ceph-mds@{id}
手工启动mds服务的命令:
ceph-mds --cluster {cluster-name} -i {id} -m {mon-hostname}:{mon-port} [-f]
文件系统使用
创建fs的库和meta库
ceph osd pool create DATA_POOL
ceph osd pool create METADATA_POOL
ceph osd pool create fs_data ceph osd pool create fs_metadata
创建库后关闭pg_autoscale_mode
调整到合适的pg和pgp数ceph osd pool set <pool-name> pg_autoscale_mode off ceph osd pool set fs_data pg_num 512 ceph osd pool set fs_data pgp_num 512
创建文件系统
ceph fs new FILESYSTEM_NAME METADATA_POOL DATA_POOL
ceph fs new myfs fs_metadata fs_data
其他相关命令
- 列出fs
ceph fs ls
- 检查fs状态
ceph fs status
挂载文件系统(内核驱动方法)
- 在ceph集群为fs创建一个有挂载权限的用户
ceph fs authorize FS_NAME client.CLIENT_NAME /SPECIFIED_DIRECTORY rw
每个user的权限对象指定的目录
ceph fs authorize myfs client.fsuser / rw
- 复制/etc/ceph/ceph.conf和用户的keyring文件到客户端.
scp ceph.conf到client的/etc/ceph/下
ceph auth get client.UserName -o ceph.client.UserName.keyring
ceph auth get client.fs -o ceph.client.fsuser.keyring
将ceph.client.fsuser.keyring复制到客户端/etc/ceph目录下,设置权限为'0644' - 挂载时需要ceph客户端即ceph-common包,创建一个挂载目录,
sudo mount -t ceph 192.168.100.21:6789,192.168.100.22:6789,192.168.23:6789:/ /mnt/mycephfs -o noatime,nodiratime,name=fsuser,fs=myfs
mount -t mon1:6789,mon2:6789,mon3:6789:/ /mnt/挂载目录 -o name=用户名,fs=fs名
其他
报错信息及处理
1 monitors have not enabled msgr2
ceph mon enable-msgr2
mons are allowing insecure global_id reclaim
ceph config set mon auth_allow_insecure_global_id_reclaim false
常用命令
清理osd: ceph osd purge osd.n
查看osd的label信息: ceph-bluestore-tool show-label --path /var/lib/ceph/osd/ceph-0