使用背景
ceph最近这两年挺火,打算尝试下它的块存储是怎么玩的,简单记录下
硬盘配置
1、集群需要用到OSD存储,OSD只支持物理卷
2、可使用cfdisk进行分区,先分好逻辑分区,再创建物理卷
3、集群中用作OSD的物理卷的机器,物理卷分区命名必须保持一致
部分配置命令
#卸载挂载点
umount /dev/sda5
#创建物理卷
pvcreate /dev/sda5
#检查物理卷
pvscan
配置主机名
1、配置永久静态主机名,主机配置为ceph1ceph3,客户机配置为client1client3
a、配置主机节点
ceph1节点:
hostnamectl --static set-hostname ceph1
ceph2节点:
hostnamectl --static set-hostname ceph2
ceph3节点:
hostnamectl --static set-hostname ceph3
b、同理配置客户机节点
client1节点:
hostnamectl --static set-hostname client1
其余节点以此类推…
2、修改域名解析文件
vi /etc/hosts
在各个集群和客户端节点的/etc/hosts中添加如下内容:
192.168.3.166 ceph1
192.168.3.167 ceph2
192.168.3.168 ceph3
192.168.3.175 client1
192.168.3.176 client2
192.168.3.177 client3
配置免密登录
需配置ceph1节点对所有主/客户机节点的免密(包括ceph1本身),此外需要配置client1节点对所有主/客户机节点的免密(包括client1本身)。
1、在ceph1节点生成公钥,并发放到各个主机/客户机节点
ssh-keygen -t rsa
#回车采取默认配置
for i in {1..3}; do ssh-copy-id ceph$i; done
#根据提示输入yes及节点密码
for i in {1..3}; do ssh-copy-id client$i; done
#根据提示输入yes及节点密码
2、在client1节点生成公钥,并发放到各个主机/客户机节点(同1)。
ssh-keygen -t rsa #回车采取默认配置
for i in {1..3}; do ssh-copy-id ceph$i; done
for i in {1..3}; do ssh-copy-id client$i; done
关闭防火墙
关闭本节点防火墙,需在所有Ceph节点和client端依次执行如下命令。
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
关闭SELinux
关闭本节点SELinux,需在所有主客户机节点执行。
- 永久关闭,重启后生效。
vi /etc/selinux/config,修改SELINUX=disabled
配置repo源
本文档提供在线和离线两种repo源的安装方式,推荐使用在线安装方式。
方法一:在线方式安装
1、在所有集群和客户端节点建立ceph.repo。
vi /etc/yum.repos.d/ceph.repo
并加入如下内容:
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
2、更新yum源。
yum clean all && yum makecache
3、安装epel源
yum -y install epel-release
4、集群如果是外网环境,这条不用看!但如果是内网环境,则除堡垒机外其他修改所有节点代理配置。
添加如下内容使其支持相关依赖包的安装:
vim /etc/environment
export http_proxy=http://{Proxy-User-Name}:{Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port>
export https_proxy= http://{Proxy-User-Name}:{Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port>
export ftp_proxy= http://{Proxy-User-Name}:{Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port>
export no_proxy=127.0.0.1,localhost
配置NTP服务
1、安装NTP服务
a、所有集群和客户端节点安装ntp
yum -y install ntp ntpdate
b、在所有集群和客户端节点备份旧配置
cd /etc && mv ntp.conf ntp.conf.bak
c、在ceph1新建文件
vim /etc/ntp.conf
#尾部新增
restrict 127.0.0.1
restrict ::1
restrict 192.168.3.0 mask 255.255.255.0
server 127.127.1.0
fudge 127.127.1.0 stratum 8
d、在其余所有节点新建文件
vim /etc/ntp.conf
#尾部新增
server 192.168.3.166
2、启动NTP服务
a、在ceph1节点启动NTP服务,并检查状态。
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd
b、在除ceph1的所有节点同步ceph1的时间
ntpdate ceph1
c、在除ceph1的所有节点写入硬件时钟,避免重启后失效
hwclock -w
d、同步后过一段时间可能会出现时间有误差的情况,尽管误差不大,但是Ceph对时间精度要求较高,建议配置定时任务每隔一段时间自动同步时间。
添加定时任务
crontab -e
*/10 * * * * /usr/sbin/ntpdate 192.168.3.166
说明:
192.168.3.166是ceph1的public IP地址,此条命令表示每10分钟与ceph1进行一次时间同步。
安装Ceph-ansible
在线安装,仅需在ceph1上进行操作。
1、安装ansible
yum -y install ansible
2、安装git
yum -y install git
3、配置“http.sslVerify”参数为“false”,跳过系统证书
git config --global http.sslVerify false
4、下载安装Ceph-ansible
git clone -b stable-4.0 https://github.com/ceph/ceph-ansible.git --recursive
安装Ceph-ansible依赖
在线安装,仅需在ceph1上进行操作。
1、安装python-pip
yum install -y python-pip
2、将pip更新到19.3.1版本
pip install --upgrade pip
3、进入ceph-ansible目录
cd /home/ceph-ansible/
4、检查并安装需要的软件版本
pip install -r requirements.txt
解决环境依赖
1、所有节点安装依赖:
yum install -y yum-plugin-priorities
- rpm_key解决:
进入redhat_community_repository.yml。
vim /home/ceph-ansible/roles/ceph-common/tasks/installs/redhat_community_repository.yml
- grafana依赖问题
进入configure_grafana.yml。
vim /home/ceph-ansible/roles/ceph-grafana/tasks/configure_grafana.yml
需要注释部分如下:
服务节点配置
在ceph-ansible目录内新建hosts文件
vi /home/ceph-ansible/hosts
[mons]
ceph1
[mgrs]
ceph1
[osds]
ceph1
ceph2
ceph3
[clients]
client1
[clients]
client1
[grafana-server]
ceph1
该操作用于定义集群中的主机,以及每个主机在Ceph集群中扮演的角色。可根据整个集群的需要在集群节点上部署相应的应用。
参数 | 说明 |
---|---|
[mons] | Monitor节点 |
[mgrs] | MGR节点 |
[osds] | OSD节点,具体osd配置在osds.yml文件中配置 |
[mdss] | MDS节点,文件存储中需要指定 |
[rgws] | RGW节点,对象存储中需要指定 |
[clients] | 客户端节点 |
[grafana-server] | 一般需要保留该参数,不然会报缺少的错误 |
修改ceph-ansible配置文件
在ansible部署时,必须传递相应的playbook给ansible-playbook命令
1、修改相应的playbook名称,然后修改对应的内容,使之满足集群部署的要求。
2、使用Ceph-ansible提供的ansible变量用来设置ceph集群的配置。
所有选项及默认配置放在group_vars目录下,每种ceph进程对应相关的配置文件。
[root@ceph1 ceph-ansible]# cd /home/ceph-ansible/group_vars/
[root@ceph1 group_vars]# cp mons.yml.sample mons.yml
[root@ceph1 group_vars]# cp mgrs.yml.sample mgrs.yml
[root@ceph1 group_vars]# cp mdss.yml.sample mdss.yml
[root@ceph1 group_vars]# cp rgws.yml.sample rgws.yml
[root@ceph1 group_vars]# cp osds.yml.sample osds.yml
[root@ceph1 group_vars]# cp clients.yml.sample clients.yml
[root@ceph1 group_vars]# cp all.yml.sample all.yml
说明: all.yml.sample是应用于集群所有主机的特殊配置文件。
添加ceph.conf配置参数
“all.yml”文件中,“ceph_conf_overrides”变量可用于覆盖ceph.conf中已配置的选项,或是增加新选项。
进入“all.yml”文件,修改“ceph_conf_overrides”这个参数,添加如下内容。
[root@ceph1 group_vars]# vim all.yml
ceph_conf_overrides:
global:
osd_pool_default_pg_num: 64
osd_pool_default_pgp_num: 64
osd_pool_default_size: 2
mon:
mon_allow_pool_create: true
说明: 对于配置文件中public和cluster不建议在“ceph_conf_overrides”中添加,建议在“OSD options”中增加。
定义OSD(推荐方法三)
osds.yml支持两种方式设置OSD(object storage device)盘、wal(write ahead log)盘和db(data base)盘。
-
方法一:
使用ceph-volume lvm batch方式创建OSD,此种模式只需指定OSD,db,wal,程序会根据每个Disk对应的OSD数量,以及db磁盘设备和wal磁盘设备对应的数据盘数量,对磁盘大小进行均分。 -
方法二:
使用ceph-volume,从逻辑卷中创建OSD。
方法一:ceph-volume lvm batch方式
修改groups_vars路径下的osds.yml文件,根据需要指定devices,dedicated_devices和bluestore_wal_devices中的设备:
- devices表示系统中的数据盘,可以与osds_per_device选项结合,设置每个磁盘上创建的OSD数量。
- dedicated_devices即block.db。
- bluestore_wal_devices即block.wal。
- dedicated_devices和bluestore_wal_devices的磁盘不能为相同磁盘。
- dedicated_devices和bluestore_wal_devices可以包含一个或多个磁盘。
- 系统会根据devices中的磁盘数量,以及osds_per_device,将dedicated_devices和bluestore_wal_devices下的磁盘进行均分。
提示: 单个OSD的block.db大于等于50G,否则可能会以为block.db过小而安装报错。
方法二:ceph-volume,从逻辑卷中创建osd
修改groups_vars路径下的osds.yml文件,根据需要指定lvm_volumes属性下的所有OSD设备,包含几种不同的组合场景:
1、只指定数据盘。
2、指定数据盘+wal。
3、指定数据盘+wal+db。
4、指定数据盘+db。
使用此模式时需要事先在所有集群节点上创建对应的逻辑卷:
创建对应的vg。
/usr/sbin/vgcreate --yes -s 1G ceph-data /dev/sdd #创建名称为ceph-data的vg,-s指定创建逻辑卷的基本单位
基于vg创建lv。
/usr/sbin/lvcreate -l 300 -n osd-data2 ceph-data # 在ceph-data上创建名称为osd-data2的大小为300G的lv
确认lv创建情况。
lvs
[root@ceph1 ceph-ansible-stable-4.0.bak]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 839.05g
root centos -wi-ao---- 50.00g
swap centos -wi-a----- 4.00g
osd-data1 ceph-data -wi-ao---- 300.00g
osd-data2 ceph-data -wi-ao---- 300.00g
osd-db1 ceph-db -wi-ao---- 100.00g
osd-db2 ceph-db -wi-ao---- 100.00g
osd-wal1 ceph-wal -wi-ao---- 50.00g
osd-wal2 ceph-wal -wi-ao---- 50.00g
以下为创建两个OSD,每个OSD都包含db和wal盘的场景:
方法三:简单粗暴配置文件
vim ceph-ansible/group-vars/all.yml
############下载包相关的源配置###############
ceph_origin: repository
ceph_repository: community
ceph_mirror: https://mirrors.aliyun.com/ceph/
ceph_stable_key: "{{ ceph_mirror }}/keys/release.asc"
ceph_stable_release: nautilus
ceph_stable_repo: "{{ ceph_mirror }}/debian-{{ ceph_stable_release }}"
ceph_stable_distro_source: bionic
cephx: "true"
############非常重要参数###################
public_network: 172.17.162.0/24
cluster_network: 172.17.162.0/24
mon_host: 172.17.162.157
mon_initial_members: ceph-1,ceph-2,ceph-3
monitor_interface: ens192
#########################################
rbd_cache: "true"
rbd_cache_writethrough_until_flush: "true"
rbd_concurrent_management_ops: 21
rbd_client_directories: true
############创建osd必要的参数###############
devices:
- /dev/sda5
- /dev/sda6
- /dev/sda7
osd_scenario: collocated
osd_objectstore: bluestore
#########################################
mds_max_mds: 1
radosgw_frontend_type: beast
radosgw_thread_pool_size: 512
radosgw_interface: "{{ monitor_interface }}"
email_address: zhailihu@ruijie.com.cn
dashboard_enabled: True
dashboard_protocol: http
dashboard_port: 8443
dashboard_admin_user: root
dashboard_admin_password: 1qa@WS3ed
grafana_admin_user: root
grafana_admin_password: 1qa@WS3ed
grafana_uid: 472
grafana_datasource: Dashboard
grafana_dashboard_version: nautilus
grafana_port: 3000
grafana_allow_embedding: True
######################################
ceph_conf_overrides:
global:
osd_pool_default_pg_num: 64
osd_pool_default_pgp_num: 64
osd_pool_default_size: 2
mon:
mon_allow_pool_create: true
正式安装
1、执行命令:
[root@ceph1 ceph-ansible]# ansible-playbook -i hosts site.yml
执行结束,在执行页面会有相关的提示,如图所示,所有节点显示failed=0,则处于部署过程中。
2、查看集群健康状态,显示HEALTH_OK则集群状态健康。
ceph health
3、查看dashboard和grafana是否正常拉起
#Dashboard
http://172.17.162.157:8443
#Grafana
http://172.17.162.157:3000
4、Well Done 小伙子:)
参考资料
https://support.huaweicloud.com/dpmg-kunpengsdss/kunpengcephansible_04_0001.html
https://docs.ceph.com/projects/ceph-ansible/en/latest/