Ceph (3) - 安装Ceph集群方法3:使用 ceph-ansible 离线安装 Red Hat Ceph Storage 4.1 集群
《OpenShift 4.x HOL教程汇总》
文章目录
- 安装前说明
- 准备主机环境
- 创建虚拟主机并配置网络
- 配置主机名和域名
- 设置环境变量
- 设置主机hosts
- 配置免密登录
- 设置节点主机名
- 关闭防火墙并禁用SELinux
- 配置离线Yum源
- 下载安装用到的Repo到本地
- 配置Yum
- 配置Support节点的Yum
- 配置RHCS集群节点的Yum
- 准备离线Container Image Registry
- 创建SSL证书和用户认证文件
- 安装Docker Registry
- 配置离线Docker Registry
- 配置Chrony时间服务
- 安装配置ceph-ansible
- 安装ceph-ansible程序
- 定制Ansible使用的文件
- 创建Ansible Inventory文件
- 创建Ansible Playbook文件
- 配置Ansible Playbool使用的参数文件
- 配置RHCS集群osd服务的参数文件
- 执行安装RHCS集群的Ansible脚本
- 访问RHCS集群
- 安装Ceph客户端并访问RHCS集群
- 通过Web控制台访问RHCS集群
- 参考
安装前说明
- 本文安装的是基于 Red Hat Ceph Storage(RHCS)4.1 的集群环境。RHCS 4.1支持的操作系统为RHEL 7.8 和 RHEL 8.2,本文使用的是RHEL 7.8。
- 本文将使用离线方式安装RHCS集群。如果没有RHCS的离线安装包,则需要有该产品的试用或正式订阅,同时需要有一个节点能访问外网下载离线安装介质。
- 在安装过程中会使用到以下2类角色的节点:
1)support节点:作为安装RHCS集群的控制节点,在上面可以使用ceph-ansible或Cockpit完成RHCS集群安装过程(本文使用是ceph-ansible)。另外,还利用这个节点下载离线安装介质和运行离线Image Registry。
2)ceph-node节点:所有运行RHCS集群相关服务的节点,这些节点会运行mon、osd、mgr、rdsgw等服务。 - 根据本文说明准备4个节点部署RHCS集群,其中1个作为support节点用来提供离线YUM Repo和离线Image Registry服务、同时还用来执行Ansible Playbook;另外3个节点作为RHCS集群节点运行mon、osd、mgr等RHCS集群所需服务。
- 在使用ceph-ansible安装过程中,可以选择将mon、osd等RHCS核心服务运行在裸机上或是将它们运行在容器中,两者的配置差别主要体现在Ansible Playbook使用到的参数文件“ceph-ansible/group_vars/all.yml”。不过,无论是哪种运行RHCS核心服务的方式,运行RHCS监控用到的Prometheus/Grafana组件都是运行在容器中,因此本文将全部采用容器的方式运行RHCS的所有组件。
- 注意:本文中如未明确说明,都是用root用户在support节点操作。
- 本文参照了RHCS 4.1的官方安装文档,在部分地方对原有内容进行了简化处理,例如直接使用的是root用户执行Ansible安装脚本。
准备主机环境
创建虚拟主机并配置网络
本文使用基于VirtualBox VM虚机模拟物理服务。请准备4个虚机分别作为1个support节点和3个RHCS集群节点,其中需要为运行RHCS集群节点的虚机额外创建2个存储磁盘(如下图的sdb和sdc盘),可以为每个磁盘分配50GB存储空间。
为每个VM分配2个网卡,其中一个配置成Bridge类型、一个配置成Host-Only类型,分别配置负责RHCS集群外部通讯的public地址段(本文使用的是“192.168.1.0”)和集群内部通讯用的private地址段(本文使用的是“192.168.99.0”)。
在创建完VM后,请为以上4个节点最小化安装RHEL 7.8。在安装RHEL过程中按照以下列表为每个节点分配主机名和固定IP地址。
- support:192.168.1.203/24、192.168.99.203/24
- ceph-node1:192.168.1.201/24、192.168.99.201/24
- ceph-node2:192.168.1.202/24、192.168.99.202/24
- ceph-node3:192.168.1.203/24、192.168.99.203/24
由于在VirtualBox的VM中安装RHEL的2个网卡缺省名为“enp0s3”和“enp0s8”(如果用的是其他类型虚拟化软件,请用对应的网卡名替换以下的命令),因此也可以在安装完RHEL后使用以下命令设置每个VM的2个IP地址。
$ nmcli con modify enp0s3 ipv4.addresses 192.168.1.XXX/24
$ nmcli con modify enp0s8 ipv4.addresses 192.168.99.XXX/24
$ systemctl restart network
配置主机名和域名
设置环境变量
$ cat >> ~/.bashrc << EOF
SUPPORT_NODE=support
CEPH_NODE1=ceph-node1
CEPH_NODE2=ceph-node2
CEPH_NODE3=ceph-node3
CEPH_NODE_LIST="ceph-node1 ceph-node2 ceph-node3"
YUM_PATH=/data/yum
REGISTRY_PATH=/data/registry
EOF$ source ~/.bashrc
设置主机hosts
为了简化,本文使用hosts解析主机域名(建议在生产环境中使用DNS服务解析主机域名)。最后将设好的hosts文件同步到所有节点。
$ cat > /etc/hosts << EOF
192.168.99.200 $SUPPORT_NODE
192.168.99.201 $CEPH_NODE1
192.168.99.202 $CEPH_NODE2
192.168.99.203 $CEPH_NODE3
EOF$ for i in $CEPH_NODE_LIST; do scp /etc/hosts root@${i}:/etc/hosts; done
配置免密登录
执行命令生成密钥对,并将公钥复制到RHCS集群所有节点。
$ ssh-keygen -t rsa -b 2048 -P '' -f ~/.ssh/id_rsa
$ for i in $CEPH_NODE_LIST; do ssh-copy-id root@${i} -f; done
设置节点主机名
如果还没有设置主机域名,可执行以下命令设置4个节点的主机名。在执行完后需要退出所有节点,然后重新登录。
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} hostnamectl set-hostname ${i}; ssh root@${i} hostname; done
关闭防火墙并禁用SELinux
为了省去网络访问限制麻烦(例如访问Apache HTTP服务提供Yum源),执行以下命令关闭所有节点的防火墙并禁用SELinux。
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} systemctl stop firewalld; ssh root@${i} systemctl disable firewalld; done
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config; ssh root@${i} setenforce 0; done
配置离线Yum源
下载安装用到的Repo到本地
- 用RedHat正式或试用订阅用户登录订阅网站。
$ subscription-manager register --username=<USERNAME> --password=<PASSWORD>
Registering to: subscription.rhsm.redhat.com:443/subscription
The system has been registered with ID: 28625db9-ac30-4119-b5aa-355c37778dc5
The registered system name is: support
- 列出所有和RHCS的OSD服务相关的订阅。确认这个订阅中包含“Red Hat Ceph Storage”、“Red Hat Ceph Storage OSD”、“Red Hat Ceph Storage MON”核心服务组件。
$ subscription-manager list --available --all --matches="*OSD*"
- 指定使用一个包含 Red Hat Ceph Storage 的订阅POOL。
$ subscription-manager attach --pool=<POOL_ID>
- 开启以下YUM Repo。
$ subscription-manager repos --disable=*
$ subscription-manager repos \--enable=rhel-7-server-rpms \--enable=rhel-7-server-extras-rpms \--enable=rhel-7-server-ansible-2.8-rpms \--enable=rhel-7-server-rhceph-4-tools-rpms \--enable=rhel-7-server-rhceph-4-mon-rpms \--enable=rhel-7-server-rhceph-4-osd-rpms
- 然后确认有以下配置好的6个YUM Repo。
$ yum repolist
repo id repo name status
rhel-7-server-ansible-2.8-rpms/x86_64 Red Hat Ansible Engine 2.8 RPMs for Red Hat Enterprise Linux 7 Server 19
rhel-7-server-extras-rpms/x86_64 Red Hat Enterprise Linux 7 Server - Extras (RPMs) 1,329
rhel-7-server-rhceph-4-mon-rpms/x86_64 Red Hat Ceph Storage MON 4 for Red Hat Enterprise Linux 7 Server (RPMs) 183
rhel-7-server-rhceph-4-osd-rpms/x86_64 Red Hat Ceph Storage OSD 4 for Red Hat Enterprise Linux 7 Server (RPMs) 129
rhel-7-server-rhceph-4-tools-rpms/x86_64 Red Hat Ceph Storage Tools 4 for Red Hat Enterprise Linux 7 Server (RPMs) 196
rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server (RPMs) 30,637
repolist: 32,493
- 执行命令,下载repo到本地
$ mkdir -p ${YUM_PATH}
$ yum -y install yum-utils createrepo
$ for repo in $(subscription-manager repos --list-enabled |grep "Repo ID" |awk '{print $3}'); do \reposync --gpgcheck -lmn --repoid=${repo} --download_path=${YUM_PATH}; createrepo -v ${YUM_PATH}/${repo} -o ${YUM_PATH}/${repo}; done
- 将当前节点退出订阅。
$ subscription-manager unregister
配置Yum
配置Support节点的Yum
由于上一步下载的Repo就在Support节点本地,因此我们把Support节点的Yum配到自己的本地目录。
- 执行命令,生成rhcs.repo文件。
$ cat > /etc/yum.repos.d/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=file://${YUM_PATH}/rhel-7-server-rpms/
gpgcheck=0[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=file://${YUM_PATH}/rhel-7-server-extras-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0 [rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0 [rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=file://${YUM_PATH}/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
- 执行命令,确认包括以下repo。
$ yum repolist
repo id repo name status
rhel-7-server rhel-7-server 5,476
rhel-7-server-ansible-2.8 rhel-7-server-ansible-2.8 4
rhel-7-server-extras rhel-7-server-extras 157
rhel-7-server-rhceph-4-mon rhel-7-server-rhceph-4-mon 53
rhel-7-server-rhceph-4-osd rhel-7-server-rhceph-4-osd 29
rhel-7-server-rhceph-4-tools rhel-7-server-rhceph-4-tools 55
repolist: 5,774
配置RHCS集群节点的Yum
以下为RHCS集群节点配置指向Support节点的远程Yum。
- 首先在Support节点安装httpd服务。
$ yum -y install httpd
- 创建httpd服务的配置文件。
$ cat << EOF > /etc/httpd/conf.d/yum.conf
Alias /rhcs "${YUM_PATH}"
<Directory "${YUM_PATH}">Options +Indexes +FollowSymLinksRequire all granted
</Directory>
<Location /repo>SetHandler None
</Location>
EOF
- 先设置目录权限,然后重启httpd服务,最后确认可以从所有RHCS节点上访问到http的Repo。
$ chmod -R 705 ${YUM_PATH}/..
$ systemctl restart httpd
$ for i in $CEPH_NODE_LIST; do ssh root@${i} curl http://${SUPPORT_NODE}/rhcs/ | grep rhel-7-server; done
- 执行命令,生成RHCS节点节点使用的repo文件。
$ cat > ~/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rpms/
gpgcheck=0[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-extras-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0 [rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0 [rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
- 将rhcs.repo文件传到所有RHCS节点,然后检查可以从这些节点中访问到远程Yum源。
$ for i in $CEPH_NODE_LIST; do scp ~/rhcs.repo root@${i}:/etc/yum.repos.d/; done
$ for i in $CEPH_NODE_LIST; do ssh root@${i} yum repolist; done
准备离线Container Image Registry
在离线环境中,由于RHCS集群节点无法直接访问互联网,因此可以在support节点上搭建Container Image Registry并导入相关容器镜像,这样RHCS安装过程就可通过support节点获取到相关容器镜像了。
创建SSL证书和用户认证文件
- 设置环境变量(REGISTRY_PATH定义了Docker Registry软件使用的存储目录),然后创建对应的子目录(auth是用来存放校验用户名/密码的文件目录、certs是用来存放TLS所需证书/秘钥的目录、data是用来存放容器镜像的目录)。
$ REGISTRY_PATH=/data/registry
$ mkdir -p ${REGISTRY_PATH}/{auth,certs,data}
- 执行命令创建证书(包括公钥和私钥文件),以支持Registry运行在https上。远程的Docker客户端需要使用该公钥访问Registry。
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ${REGISTRY_PATH}/certs/registry.key -x509 -days 365 \-out ${REGISTRY_PATH}/certs/registry.crt \-subj "/C=CN/ST=BEIJING/L=BJ/O=REDHAT/OU=IT/CN=${SUPPORT_NODE}/emailAddress=admin@${SUPPORT_NODE}"
- 查看生成的证书。
$ openssl x509 -in ${REGISTRY_PATH}/certs/registry.crt -text | head -n 14
Certificate:Data:Version: 3 (0x2)Serial Number:bd:8e:d7:1b:08:aa:10:49Signature Algorithm: sha256WithRSAEncryptionIssuer: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@supportValidityNot Before: Oct 30 03:40:25 2020 GMTNot After : Oct 30 03:40:25 2021 GMTSubject: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@supportSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (4096 bit)
- 将上述公钥复制到RHCS集群节点上。
$ for i in $CEPH_NODE_LIST; do \scp ${REGISTRY_PATH}/certs/registry.crt root@${i}:/etc/pki/ca-trust/source/anchors/; \ssh root@${i} update-ca-trust; \done
- 创建基于httppasswd的用户认证文件,其中的user1/password1是登录用户和密码。Docker Registry将使用该文件对登录用户进行认证。
$ yum -y install httpd-tools
$ htpasswd -bBc ${REGISTRY_PATH}/auth/htpasswd user1 password1
$ cat ${REGISTRY_PATH}/auth/htpasswd
user1:$2y$05$fgURP9RJ1KFAKnC0obM5GugmAyOGGilE7nkFPZzh7nn5Yub.JZ36W
安装Docker Registry
- 先安装Docker。
$ yum -y install docker
- 修改“/etc/containers/registries.conf”文件的“[registries.search]”部分,确认“[registries.search]”部分必须有以下内容:
[registries.search]
registries = ['registry.redhat.io']
- 修改“/etc/containers/registries.conf”文件的“[registries.insecure]”部分,确认“[registries.insecure]”部分必须有在SUPPORT_NODE节点上运行的Docker Registry地址,例如下面试用了本文环境中的“support”节点名。
[registries.insecure]
registries = ['support:5000']
- 重启Docker,让配置生效。
$ systemctl restart docker
- 安装运行Docker Registry,然后查看其中的镜像。
$ docker run --name registry -p 5000:5000 \-v ${REGISTRY_PATH}/data:/var/lib/registry:z \-v ${REGISTRY_PATH}/auth:/auth:z \-v ${REGISTRY_PATH}/certs:/certs:z \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \-d docker.io/library/registry:2$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64b6c0a1c5f6 docker.io/library/registry:2 "/entrypoint.sh /e..." 8 seconds ago Up 7 seconds 0.0.0.0:5000->5000/tcp registry$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog
{"repositories":[]}
配置离线Docker Registry
- 执行命令,使用试用或正式的RedHat订阅账号登录registry.redhat.io。
$ docker login registry.redhat.io --username=<USERNAME> --password=<PASSWORD>
Login Succeeded
- 下载RHCS所需容器镜像到本地缓存。
$ docker pull registry.redhat.io/rhceph/rhceph-4-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1
$ docker pull registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus:4.1
$ docker pull registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1
- 修改上述容器的地址和标签。(注意:此处RHCS 4.1官方安装文档有个错误,就是需要为rhceph-4-rhel8镜像打上名为latest-nautilus的标签,而不能用缺省标签)。
$ docker tag registry.redhat.io/rhceph/rhceph-4-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
$ docker tag registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
$ docker tag registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
$ docker tag registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
$ docker tag registry.redhat.io/openshift4/ose-prometheus:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
- 先登录本地Docker Registry,再将上述本地容器镜像推送到support节点的Docker Registry中。
$ docker login ${SUPPORT_NODE}:5000 -u user1 -p password1
Login Succeeded$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
The push refers to a repository [support:5000/rhceph/rhceph-4-rhel8:latest-nautilus]
d7280273a3d0: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:375da5e6abc8871c26cdd0d35862a6b45cd56e1169a75f8acded4580952d8aaa size: 950$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-node-exporter]
9f69b4a665ad: Layer already exists
5cb0fa1ad156: Layer already exists
eddcd8d2986d: Layer already exists
35b7a5c4e1b4: Layer already exists
v4.1: digest: sha256:572476640cb0ef898278fded4bb47a789bc1ba98c5931b76d1c11a6a6da0a057 size: 1159$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
The push refers to a repository [support:5000/rhceph/rhceph-4-dashboard-rhel8]
cfedec6e53bf: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:fdc543b91c567c38a87b2a796b8394b285317c8112ed05d028b46734de8e9260 size: 949$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-alertmanager]
4eac54049ec8: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:0467c38142fc5df2836f3c0d9ff7be07c1c47f415d57cc6a092af8437e8c604a size: 1160$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus]
2391a9d71a96: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:70158e447587bc13f4e9eee45f1056c6a6f79b4f097d9bcae02d5155845d2c4b size: 1160
- 查看Docker Registry中的镜像
$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog
配置Chrony时间服务
RHCS集群节点之间必须做时间同步,这样mon服务才能进行正常的仲裁。为此,我们可以将本文的4个节点的时间服务统一设置到support节点上。
- 在support节点上安装chrony服务,然后修改配置文件,最后重启chrony服务。
$ yum -y install chrony
$ cat > /etc/chrony.conf << EOF
server ${SUPPORT_NODE} iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow all
local stratum 10
logdir /var/log/chrony
EOF
$ systemctl restart chronyd
$ chronyc tracking
- 在所有RHCS集群节点安装chrony服务,并和support节点进行时间同步。
$ for i in $CEPH_NODE_LIST; do \scp /etc/chrony.conf root@${i}:/etc/chrony.conf; \ssh root@${i} systemctl restart chronyd; \ssh root@${i} chronyc trackingdone
安装配置ceph-ansible
安装ceph-ansible程序
- 在support节点上执行命令,安装ceph-ansible程序。
$ yum install ceph-ansible -y
- 查看ansible版本,确认是2.8.x。说明:RHCS 4.1对应的是nautilus版的社区Ceph,因此需用anbile 2.8版本进行安装。
$ ansible --version
ansible 2.8.16config file = /usr/share/ceph-ansible/ansible.cfgconfigured module search path = ['/usr/share/ceph-ansible/library']ansible python module location = /usr/local/lib/python3.6/site-packages/ansibleexecutable location = /usr/local/bin/ansiblepython version = 3.6.8 (default, Apr 2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
定制Ansible使用的文件
创建Ansible Inventory文件
- 在support节点上创建hosts文件作为Ansible的Inventory。在hosts文件中定义了RHCS服务和4个节点的对应部署关系。
$ cat >> /usr/share/ceph-ansible/hosts << EOF
[grafana-server]
${CEPH_NODE1}[mons]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}[osds]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}[mgrs]
${CEPH_NODE2}
${CEPH_NODE3}
EOF
- 执行命令,测试节点连通性。
$ ansible all -m ping -i /usr/share/ceph-ansible/hosts
ceph-node2 | SUCCESS => {"changed": false,"ping": "pong"
}
ceph-node3 | SUCCESS => {"changed": false,"ping": "pong"
}
ceph-node1 | SUCCESS => {"changed": false,"ping": "pong"
}
创建Ansible Playbook文件
Ansible将使用Playbook来执行所有RHCS集群节点的安装部署操作。
- 由于本文选择了将RHCS集群所有组件运行在容器中,可以从site-container.yml.sample模板复制一份基于容器部署RHCS集群的Ansible Playbook文件。
$ cp /usr/share/ceph-ansible/site-container.yml.sample /usr/share/ceph-ansible/site-container.yml
配置Ansible Playbool使用的参数文件
该文件定义在RHCS集群上部署的各种服务的参数,Ansile会在运行Playbook的时候使用这些参数。
- 设置环境变量,包括mon服务使用的网卡名、public网段地址、登录support节点的docker registry的用户和密码、RHCS的Dashboard和Grafana管理员账号。
$ cat >> ~/.bashrc << EOF
MONITOR_INTERFACE=enp0s3
PUBLIC_NETWORK=192.168.1.0/24
REGISTRY_USERNAME=user1
REGISTRY_PASSWORD=password1
DASHBORAD_ADMIN_USERNAME=admin
DASHBORAD_ADMIN_PASSWORD=password
GRAFANA_ADMIN_USERNAME=admin
GRAFANA_ADMIN_PASSWORD=password
EOF[root@admin ~]$ source ~/.bashrc
- 根据以上变量创建名为all.yml的Playbook参数文件。说明:参照的官方安装文档应该在此步配置ceph_repository_type参数,该参数只有cdn和iso选项,分别适合在线安装(如果是在线安装,Ansible会连到红帽网站验证是否有足够的产品订阅)和离线安装。但是本安装过程使用的并非是基于ISO文件的离线安装方式,而采用了基于本地Yum Repo的离线安装方式。因此无论该参数设为哪种选项都和本文的安装场景有差异,会导致安装失败。不过在实际过程中发现如果不设置ceph_repository_type参数可以正常完成安装。
[ansible@admin ~]$ cat << EOF > /usr/share/ceph-ansible/group_vars/all.yml
fetch_directory: ~/ceph-ansible-keys
ceph_origin: repository
ceph_repository: rhcs
ceph_rhcs_version: 4
bootstrap_dirs_owner: "167"
bootstrap_dirs_group: "167"
monitor_interface: ${MONITOR_INTERFACE}
public_network: ${PUBLIC_NETWORK}
containerized_deployment: true
ceph_docker_image: rhceph/rhceph-4-rhel8
ceph_docker_registry: ${SUPPORT_NODE}:5000
ceph_docker_registry_auth: true
ceph_docker_registry_username: ${REGISTRY_USERNAME}
ceph_docker_registry_password: ${REGISTRY_PASSWORD}
dashboard_admin_user: ${DASHBORAD_ADMIN_USERNAME}
dashboard_admin_password: ${DASHBORAD_ADMIN_PASSWORD}
node_exporter_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
grafana_admin_user: ${GRAFANA_ADMIN_USERNAME}
grafana_admin_password: ${GRAFANA_ADMIN_PASSWORD}
grafana_container_image: ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
prometheus_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
alertmanager_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
EOF
配置RHCS集群osd服务的参数文件
该文件指定了运行osd服务的节点使用的磁盘存储。
- 本文将RHCS集群的osd服运行在“CEPH_NODE_LIST”指定的3个节点上。执行以下命令查看分别查看3个节点的存储,确认它们都配置了sdb和sdc两个磁盘(由于返回结果都一样,所以以下只显示了其中一个节点的结果)。
$ for i in $CEPH_NODE_LIST; do ssh root@${i} lsblk; doneNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part├─rhel-root 253:0 0 97G 0 lvm /└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 50G 0 disk
sdc 8:32 0 50G 0 disk
sr0 11:0 1 1024M 0 rom
- 配置osds.yml文件,在其中指定RHCS的osd服务使用的sdb和sdc两个磁盘。
$ cat > /usr/share/ceph-ansible/group_vars/osds.yml << EOF
devices:- /dev/sdb- /dev/sdc
EOF
执行安装RHCS集群的Ansible脚本
- 进入ceph-ansible目录中,执行ansible的playbook部署RHCS集群。注意:一定要在ceph-ansible目录中运行playbook,否则执行中途会出错。
$ cd /usr/share/ceph-ansible
$ ansible-playbook site-container.yml -i hosts
- 如果RHCS集群安装成功,则会显示如下提示:
。。。
TASK [show ceph status for cluster ceph] *************************************************************************************************************************************
Friday 30 October 2020 00:55:17 -0400 (0:00:01.158) 0:06:21.492 ********
ok: [ceph-node1 -> ceph-node1] =>msg:- ' cluster:'- ' id: 80eed3c7-8a0a-4c77-b378-ebd9e456fca0'- ' health: HEALTH_OK'- ' '- ' services:'- ' mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 55m)'- ' mgr: ceph-node3(active, since 14s), standbys: ceph-node2'- ' osd: 6 osds: 6 up (since 52m), 6 in (since 52m)'- ' '- ' data:'- ' pools: 0 pools, 0 pgs'- ' objects: 0 objects, 0 B'- ' usage: 6.0 GiB used, 294 GiB / 300 GiB avail'- ' pgs: '- ' 'PLAY RECAP *******************************************************************************************************************************************************************
ceph-node1 : ok=347 changed=18 unreachable=0 failed=0 skipped=390 rescued=0 ignored=0
ceph-node2 : ok=379 changed=14 unreachable=0 failed=0 skipped=436 rescued=0 ignored=0
ceph-node3 : ok=352 changed=11 unreachable=0 failed=0 skipped=401 rescued=0 ignored=0INSTALLER STATUS *************************************************************************************************************************************************************
Install Ceph Monitor : Complete (0:00:50)
Install Ceph Manager : Complete (0:00:40)
Install Ceph OSD : Complete (0:00:59)
Install Ceph Dashboard : Complete (0:01:03)
Install Ceph Grafana : Complete (0:00:35)
Install Ceph Node Exporter : Complete (0:00:40)
。。。
访问RHCS集群
安装Ceph客户端并访问RHCS集群
- 安装Ceph客户端,并将RHCS集群的配置和访问秘钥复制到客户端本地。说明:由于任一mon节点都有RHCS集群的配置和访问秘钥,以下使用的是ceph-node1节点的文件。
$ yum -y install ceph-common
$ scp root@ceph-node1:/etc/ceph/ceph.conf /etc/ceph/
$ scp root@ceph-node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
- 查看RHCS集群状态和各节点运行的服务情况。其中可以看到mon服务运行在3个节点上;mgr服务运行在2个节点上,并且ceph-node3为主节点;整个RHCS集群移动运行了6个osd个服务。
$ ceph -scluster:id: 80eed3c7-8a0a-4c77-b378-ebd9e456fca0health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 84m)mgr: ceph-node3(active, since 29m), standbys: ceph-node2osd: 6 osds: 6 up (since 82m), 6 in (since 82m)data:pools: 0 pools, 0 pgsobjects: 0 objects, 0 Busage: 6.0 GiB used, 294 GiB / 300 GiB availpgs:
通过Web控制台访问RHCS集群
- 根据上一步查看RHCS集群的返回,可以看出当前运行mgr服务的主节点是ceph-node3上。用浏览器访问http://ceph-node3:8443,在以下界面中用安装中指定的admin/password登录RHCS管理控制台。
- 然后就可以在RHCS的管理控制台进行操作了。
参考
https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html-single/installation_guide/index#configuring-a-firewall-for-red-hat-ceph-storage-install
https://docs.ceph.com/projects/ceph-ansible/en/latest/
Ceph (3) - 安装Ceph集群方法3:使用 ceph-ansible 离线安装 Red Hat Ceph Storage 4.1 集群相关推荐
- 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 +【怎么安装Chrome插件】安装Chrome第三方插件
转载:将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 转载: [怎么安装Chrome插件]安装Chrome第三方插件 环境: OS - win7 64bit 旗舰版 Chr ...
- ansible离线安装
生产环境中经常限制外网的权限,所以安装软件经常会遇到问题.如果有自己的yum服务器还好,如果没有就很麻烦. 目前ansible安装的时候用yum的比较多,但是不能连接外网是没办法安装的.这里介绍一种离 ...
- 离线linux下python安装pip包_Linux pip命令和在线、离线安装
1. pip 介绍 pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 1.1 pip 常用命令 安装包 pip install SomePackag ...
- python使用pip安装本地包-python搭建本地pip源,离线安装python模块
有些时候内网还是无法访问外网的PIP源,这样就需要搭建自己的PIP源 1.离线安装pip 需先安装setuptools 1.下载安装包 https://files.pythonhosted.org/p ...
- centos7 安装英伟达驱动;cuda;docker离线安装;docker gpu离线安装;制作自己的cuda镜像;安装 容器中ssh协议
原创不易,谢谢! centos7 安装英伟达驱动,cuda,docker安装,docker gpu安装,制作自己的cuda镜像,docker ssh协议 无论是笔记本还是台式电脑,这一步关键 参考资料 ...
- 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装
环境: OS - win7 64bit 旗舰版 Chrome - 37.0.2062.120 m 以 Smooth Gestures (一款鼠标手势插件)为例,在扩展程序面板 chrome://ext ...
- linux离线安装Nginx依耐环境,Linux Centos 7 - Nginx离线安装
Linux Centos 7 - Nginx离线安装 dy.huang • 2020 年 03 月 31 日 一.参考文章 二.环境准备 可以以下网址下载rpm包,上传到# rpm包 gcc-4.8. ...
- 使用ansible离线安装rpm包
首先利用copy模块将包分发至目标机器 命令方式 ansible cloud -m copy -a "src=telnet-0.17-66.el7.x86_64.rpm dest=/tmp/ ...
- 24届双非日常实习测开面经-腾讯、字节、英伟达、OPPO、深信服、Red Hat面经大合集
目录 字节跳动 [凉] 腾讯运维开发 [凉] 腾讯测开KPI面经? 腾讯云智[等OC流程] 深信服 OPPO[OC] Anker 安克创新 [OC]有转正 深圳城安院(国企)研发岗[OC] 大疆[被鸽 ...
最新文章
- Nature:人工甜味剂改变小鼠肠道菌群组成及功能
- css改变背景透明度
- 动态规划备忘录方法Java_动态规划和备忘录法的区别
- Python3 函数笔记
- java 短链接实现方案_java利用百度短网址api实现URL长短互换工具类分享
- 像素/厘米与像素/英寸区别_像素/体素艺术入门指南
- Linux操作Oracle(2)——Oracle导出exp导出用户报错:EXP-00006: 出现内部不一致的错误 EXP-00000: 导出终止失败
- Python实现回溯指针
- 存储过程循环遍历一个月的每一天的函数_3.3 循环
- 演示:思科设备子接口类型帧中继的配置
- Android:如何打开工程模式
- canal同步mysql从库_canal.adapter 实现mysql数据库同步
- windows php进程数,win10的进程数应该多少?
- JAVA程序员笔试面试题汇总及答案 .
- 理财入门:思维转变和资产理解以及财务自由说明。
- linux dnf命令安装
- AprilTag: A robust and flflexible visual fifiducial system理解
- oss :Request has expired.
- (转)卷积网络中的通道(Channel)和特征图
- 技术总监灵魂一问:精通那么多技术,为何还是做不好一个项目?
热门文章
- 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt
- C语言课程设计学生籍贯信息,C语言课程设计 学生籍贯信息记录簿设计.doc
- android json.out,Android 之 json数据的解析(jsonReader)
- python测量镜头到目标距离_摄像头单目测距原理及实现
- 知识图谱java实现_知识图谱:neo4j(四)Java API
- diff算法_Virtual Dom和Diff算法
- mysql是bsd协议吗_freebsd下实现mysql的自动备份
- 设计灵感|C4D在海报中可以这样应用
- 圣诞节PNG免扣素材|轻松向现有项目中添加节日元素!
- UI实用素材|促销弹出设计