一、简介
记录ceph nautilus(ceph 14.2.5)在centOS7.6下的集群部署。
1.采用简单快速的ceph-deploy安装方式。参考第四章节,参考以下链接:
https://blog.51cto.com/u_15127574/2762371
2.采用手动部署方法进行安装,参考第五章节,参考以下链接:
https://ceph.readthedocs.io/en/latest/install/install-storage-cluster/
https://ceph.readthedocs.io/en/latest/install/manual-deployment/
二、基础环境简介
1.环境要求
os | hostname | ip | ssd | roles |
---|---|---|---|---|
centos7.6 | node10 | 管理网ip: 192.168.57.10, 业务网: 10.0.10.10,存储前后端网: 10.0.100.10 | 3个500G | ceph-deploy, mon,mgr,osd,mds,rgw |
centos7.6 | node11 | 管理网ip: 192.168.57.11, 业务网: 10.0.10.11,存储前后端网: 10.0.100.11 | 3个500G | mon,mgr,osd,mds,rgw |
centos7.6 | node12 | 管理网ip: 192.168.57.12, 业务网: 10.0.10.12,存储前后端网: 10.0.100.12 | 3个500G | mon,mgr,osd,mds,rgw |
2.硬件要求
每个节点至少2U4G, 至少配置3张网卡
三、基础环境准备
1.设置主机名
node10执行:
$ hostnamectl set-hostname node10 && exec /bin/bash
node11执行:
$ hostnamectl set-hostname node11 && exec /bin/bash
node12执行:
$ hostnamectl set-hostname node12 && exec /bin/bash
2.配置ip并解析, 在三个节点都执行:
$ vim /etc/hosts
192.168.57.10 node10
192.168.57.11 node11
192.168.57.12 node12
3.免密登录,在node10上配置免密登录到node11,node12, 在node10执行
$ ssh-keygen -t rsa -P ''
$ for i in node1{0..2};do ssh-copy-id $i;done
4.打开ceph端口或者直接关闭端口服务,两者选其一,在三个节点都执行:
-
打开常用端口
$ firewall-cmd --zone=public --add-port=6789/tcp --permanent $ firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent $ firewall-cmd --reload $ firewall-cmd --zone=public --list-all
-
关闭端口服务
$ systemctl stop firewalld $ systemctl disable firewalld
5.禁用selinux策略,在三个节点都执行:
# 临时关闭,不用重启机器
$ setenforce 0
# 永久修改,修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
6.关闭NetworkManager,在三个节点都执行
$ systemctl disable NetworkManager && systemctl stop NetworkManager
7.设置镜像源,在三个节点都执行
#备份默认的源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
# 下载阿里云的base源和epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 添加ceph源
vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
8.安装配置ntp服务(单节点可以不安装),在三个节点都执行
Ceph要求服务器时间统一,否则无法正常启动
$ yum -y install ntp ntpdate
$ ntpdate 0.us.pool.ntp.org
$ hwclock --systohc
$ systemctl enable ntpd
$ systemctl start ntpd
9.内核参数优化,在三个节点都执行
1.设置文件描述符
$ echo "ulimit -SHn 102400" >> /etc/rc.local
$ cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
2.内核参数优化
$ cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0
EOF
$ sysctl -p
3.设置IO策略,I/O Scheduler,SSD要用noop,SATA/SAS使用deadline
$ echo "deadline" >/sys/block/sd[x]/queue/scheduler
$ echo "noop" >/sys/block/sd[x]/queue/scheduler
4.read_ahead,通过数据预读并且记载到随机访问内存方式提高磁盘读操作
$ echo "8192" > /sys/block/sda/queue/read_ahead_kb
四、ceph-deploy部署
1.部署ceph-mon
1.安装ceph-deploy(在node10节点上安装即可)
$ yum install ceph-deploy -y
2.集群初始化
# 创建文件夹/etc/ceph,后续安装命令均在此文件夹下执行(后续新增节点时也要创建该目录);如创建的目录不是/etc/ceph,软件安装会自动生成该文件夹,且集群运行使用的会是etc下的配置.
$ mkdir /etc/ceph
$ cd /etc/ceph
# 创建配置
$ ceph-deploy new {initial-monitor-node(s)}
$ ceph-deploy new node10 node11 node12
3.修改ceph.conf文件
vim /etc/ceph.conf
[global]
fsid = b6ed72db-04cd-4128-acb8-67a4a5e922d5
mon_initial_members = node10, node11, node12
mon_host = 192.168.57.10,192.168.57.11,192.168.57.12
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
# 非必须,多网卡需配置
public_network = 192.168.57.0/24
cluster_network = 10.0.100.0/24
# 存储集群副本个数
osd_pool_default_size = 3
# 允许在degraded状态下只写两次对象
osd_pool_default_min_size = 1
# 池的pg数量,具体计算公式请参见附录
osd_pool_default_pg_num = 32
# pgp数量需要与pg数量相同
osd_pool_default_pgp_num = 32
# CRUSH规则用到chooseleaf时的bucket的类型,默认值1
osd_crush_chooseleaf_type = 0
# 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
objecter_inflight_ops = 10240
# 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限 默认值 100M
objecter_inflight_op_bytes = 1048576000
[mon]
# 时间偏移
mon_clock_drift_allowed = 0.5
[osd]
# 处理peering等请求的线程数
osd op threads = 8
# 处理snap trim,replica trim及scrub等的线程数
osd disk threads = 4
# 一次写入最大的MB数(默认90)
osd_max_write_size = 1024
# 如果这个参数被设置,那么Ceph集群启动时,就会在操作系统层面设置最大打开文件描述符。这就避免OSD进程出现与文件描述符不足的情况。参数的缺省值为0
max_open_files = 655350
# 每个osd 多对应的最大 pg 数量,超过该值会报警:too many PGs per OSD
mon_pg_warn_max_per_osd = 1000
# pg 迁移时当某个osd 空间使用率超过在这个值,就会拒绝pg 的迁移请求 ,这个值可以适当调大 0.85
mon_osd_backfillfull_ratio = 0.85
# 被认为集群已满的最大使用百分比(默认.95)
mon_osd_full_ratio = 0.95
# osd full 设置,当osd 空间使用率超过该值时就会报警 可以适当调大 0.85
mon_osd_nearfull_ratio = 0.85
# 默认值 300 seconds ceph标记一个osd为down and out的最大时间间隔
mon_osd_down_out_interval = 300
# mon标记一个osd为down的最小reporters个数(其他osd报告该osd为down的个数称为一个reporter) 默认值 2
mon_osd_min_down_reporters = 2
# mon标记一个osd为down的最长等待时间 默认值 900
mon_osd_report_timeout = 900
# 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
objecter_inflight_ops = 10240
# 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限 默认值 10
objecter_inflight_op_bytes = 1048576000
4.拷贝到远程
# ceph-deploy将ceph.conf拷贝到node10, node11, node12
$ ceph-deploy --overwrite-conf config push node10 node11 node12
5.安装ceph
$ ceph-deploy install ceph10 ceph11 ceph12 --stable --release nautilus --repo-url=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/ --gpg-url=https://mirrors.aliyun.com/ceph/keys/release.asc
6.在monitor节点上执行初始化monitor
$ cd /etc/ceph
$ ceph-deploy mon create-initial
$ ceph-deploy --overwrite-conf mon create-initial # 如果遇到报错,则关闭防火墙
2.部署ceph-osd
1.使用ceph-deploy创建osd
$ ceph-deploy osd create --data /dev/sdb node10
$ ceph-deploy osd create --data /dev/sdb node11
$ ceph-deploy osd create --data /dev/sdb node12
2.如果需要卸载某个osd
$ ceph osd tree # 获取osd的id, 以下以osd.2为例进行删除
$ systemctl stop ceph-osd@2
$ ceph-volume lvm zap --destroy --osd-id 2
$ ceph osd crush remove osd.2
$ ceph auth rm osd.2
$ ceph osd rm 2
3.部署ceph-mgr
1.拷贝admin秘钥,部署mgr
# 拷贝admin的秘钥
$ ceph-deploy admin node10 node11 node12
# 部署mgr
$ ceph-deploy mgr create node10 node11 node12
2.检查集群状态
$ ceph -s
3.启动dashboard.在active mgr上执行:
$ ceph mgr module enable dashboard
$ ceph dashboard create-self-signed-cert
$ echo "abc@123" > passwd
$ ceph dashboard set-login-credentials admin -i passwd
五、手动部署ceph
1.安装软件
在各个节点上执行
$ sudo yum install snappy leveldb gdisk python-argparse gperftools-libs ceph -y
2.部署ceph-mon
1.生成cephfs id, 在node10上执行:
$ uuidgen
150147a4-72f8-456d-8b8c-5204fb866be4
2.创建文件和配置
在node10上执行
mkdir /etc/ceph
vim /etc/ceph/ceph.conf
[global]
fsid = 150147a4-72f8-456d-8b8c-5204fb866be4
mon_initial_members = node10, node11, node12
mon_host = 192.168.57.10,192.168.57.11,192.168.57.12
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
# 非必须,多网卡需配置
public_network = 192.168.57.0/24
cluster_network = 10.0.100.0/24
# 存储集群副本个数
osd_pool_default_size = 3
# 允许在degraded状态下只写两次对象
osd_pool_default_min_size = 1
# 池的pg数量,具体计算公式请参见附录
osd_pool_default_pg_num = 32
# pgp数量需要与pg数量相同
osd_pool_default_pgp_num = 32
# CRUSH规则用到chooseleaf时的bucket的类型,默认值1
osd_crush_chooseleaf_type = 0
# 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
objecter_inflight_ops = 10240
# 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限 默认值 100M
objecter_inflight_op_bytes = 1048576000
[mon]
# 时间偏移
mon_clock_drift_allowed = 0.5
[osd]
# 处理peering等请求的线程数
osd op threads = 8
# 处理snap trim,replica trim及scrub等的线程数
osd disk threads = 4
# 一次写入最大的MB数(默认90)
osd_max_write_size = 1024
# 如果这个参数被设置,那么Ceph集群启动时,就会在操作系统层面设置最大打开文件描述符。这就避免OSD进程出现与文件描述符不足的情况。参数的缺省值为0
max_open_files = 655350
# 每个osd 多对应的最大 pg 数量,超过该值会报警:too many PGs per OSD
mon_pg_warn_max_per_osd = 1000
# pg 迁移时当某个osd 空间使用率超过在这个值,就会拒绝pg 的迁移请求 ,这个值可以适当调大 0.85
mon_osd_backfillfull_ratio = 0.85
# 被认为集群已满的最大使用百分比(默认.95)
mon_osd_full_ratio = 0.95
# osd full 设置,当osd 空间使用率超过该值时就会报警 可以适当调大 0.85
mon_osd_nearfull_ratio = 0.85
# 默认值 300 seconds ceph标记一个osd为down and out的最大时间间隔
mon_osd_down_out_interval = 300
# mon标记一个osd为down的最小reporters个数(其他osd报告该osd为down的个数称为一个reporter) 默认值 2
mon_osd_min_down_reporters = 2
# mon标记一个osd为down的最长等待时间 默认值 900
mon_osd_report_timeout = 900
# 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
objecter_inflight_ops = 10240
# 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限 默认值 10
objecter_inflight_op_bytes = 1048576000
3.创建monitor
$ ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
$ 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 *'
$ 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'
$ ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
$ ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
$ chown ceph:ceph /tmp/ceph.mon.keyring
$ monmaptool --create --add node10 192.168.57.10 --add node11 192.168.57.11 --add node12 192.168.57.12 --fsid 150147a4-72f8-456d-8b8c-5204fb866be4 /tmp/monmap
$ monmaptool --print /tmp/monmap
4.拷贝文件到其他节点node11, node12
$ scp /etc/ceph/ceph.conf root@node11:/etc/ceph/
$ scp /tmp/ceph.mon.keyring root@node11:/tmp/
$ scp /etc/ceph/ceph.client.admin.keyring root@node11:/etc/ceph/
$ scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node11:/var/lib/ceph/bootstrap-osd/
$ scp /tmp/monmap root@node11:/tmp/
$ scp /etc/ceph/ceph.conf root@node12:/etc/ceph/
$ scp /tmp/ceph.mon.keyring root@node12:/tmp/
$ scp /etc/ceph/ceph.client.admin.keyring root@node12:/etc/ceph/
$ scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node12:/var/lib/ceph/bootstrap-osd/
$ scp /tmp/monmap root@node12:/tmp/
4.初始化mon目录, 在每个节点都执行
$ sudo -u ceph ceph-mon --mkfs -i ceph-1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
$ chown -R ceph:ceph /etc/ceph
$ chown -R ceph:ceph /var/lib/ceph/mon/ceph-node10/ # 注意这里的node10为节点名称
5.启动mon服务
node10节点执行:
$ systemctl start ceph-mon@node10
$ systemctl enable ceph-mon@node10
node11节点执行:
$ systemctl start ceph-mon@node11
$ systemctl enable ceph-mon@node11
node12节点执行:
$ systemctl start ceph-mon@node12
$ systemctl enable ceph-mon@node12
3.部署ceph-osd
在需要部署的节点上,执行下面命令
$ lsblk
$ sudo ceph-volume lvm create --data /dev/sdb
$ sudo ceph-volume lvm create --data /dev/sdc
$ sudo ceph-volume lvm create --data /dev/sdd
4.部署ceph-mgr
1.创建目录
$ sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node10
2.创建秘钥
$ ceph auth get-or-create mgr.node10 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-node10/keyring
3.安装ceph-mgr
$ ceph-mgr - node10
4.启动ceph-mgr服务
$ systemctl enable ceph-mgr@node10
$ systemctl start ceph-mgr@node10
5.安装dashboard
$ yum install ceph-mgr-dashboard
$ ceph mgr module enable dashboard
$ ceph dashboard create-self-signed-cert
$ echo "abc@123" > passwd
$ ceph dashboard set-login-credentials admin -i passwd
六、资源创建
1.创建机架和设备组
1.设备组的创建
2.机架的创建
查看osd的拓扑图
$ ceph osd tree --format json
创建机架:
$ ceph osd crush add-bucket bucket-name bucket-type
$ ceph osd crush add-bucket rack-test rack
绑定到设备组:
$ ceph osd crush link bucket-name devicegroup=devicegroup_name
$ ceph osd crush link rack-test devicegroup=dg
将host绑定到机架上(相当于替换工作):
$ ceph osd crush move bucket-name rack=bucket-name
$ ceph osd crush move ankorstor-dg rack=rack-test
删除被替换的机架:
$ ceph osd crush remove bucket-name
$ ceph osd crush remove rack-test
2.创建存储池
1.创建副本存储池
$ ceph osd crush rule create-replicated $rule_name $device_name $type(host/rack/osd)
$ ceph osd pool create $pool_name $pg_num $pgp_num $pool_type(replicated/erasure) $erasure_profile $rule_name
注意pg, pgp_num的计算参考:https://old.ceph.com/pgcalc/
2.创建纠删码存储池
$ ceph osd erasure-code-profile ls
$ ceph osd erasure-code-profile set $erasure_code_profile k=3 m=2 crush-failure-domain=rack/host/osd crush-root=$devicegroup_name
$ ceph osd crush rule create-erasure $rule_name $erasure_code_profile
$ ceph osd pool create $pool_name $pg_num $pgp_num $pool_type(replicated/erasure) $erasure_profile $rule_name
3.设备副本数量
$ ceph osd pool set $pool_name size 3
4.设置最小副本数
$ ceph osd pool set $pool_name min_size 1
5.设置纠删码可以被rbd,cephfs使用
$ ceph osd pool set $pool_name allow_ec_overwrites true
6.设置存储池限额
$ ceph osd pool set-quota $pool_name max_bytes 1000000
7.创建应用
$ ceph osd pool application enable rbd
$ ceph osd pool application enable cephfs
$ ceph osd pool application enable rgw