MODOP – Installation d’un Cluster CEPH – Centos 8 (Ceph-Ansible)

Le cluster CEPH est composé de la façon Suivante

  • node01-ceph-admin
  • node02-ceph-mon1
  • node03-ceph-mon2
  • node04-ceph-mon3
  • node05-ceph-osd1
  • node06-ceph-osd2
  • node07-ceph-osd3
  • node08-ceph-osd4
  • node09-ceph-osd5
  • node10-ceph-osd6
  • node11-ceph-osd7
  • node12-ceph-osd8

Le Pool du Cluster sur Proxmox

I. Les spécifications des machines

1°) Administration (CEPH-ADMIN)

node01-Ceph-admin
IP : 172.16.186.40
Disque 1 – Système 10Go
RAM 2G

2°) Moniteurs (MON,MGR,MDS)

node02-Ceph-mon1
IP : 172.16.186.41
Disque – 1 Système 10Go
RAM 2G
2vCPU

node03-Ceph-mon2
IP : 172.16.186.42
Disque – 1 Système 10Go
RAM 2G
2vCPU

node04-Ceph-mon3
IP : 172.16.186.43
Disque – 1 Système 10Go
RAM 2G
2vCPU

3°) OSD (Disque CEPH)

node05-Ceph-osd1
IP : 172.16.186.44
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node06-Ceph-osd2
IP : 172.16.186.45
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node07-Ceph-osd3
IP : 172.16.186.46
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node08-Ceph-osd4
IP : 172.16.186.47
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node09-Ceph-osd5
IP : 172.16.186.48
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node10-Ceph-osd6
IP : 172.16.186.49
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node11-Ceph-osd7
IP : 172.16.186.50
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

node12-Ceph-osd8
IP : 172.16.186.51
Disque 1 – Système 10Go
Disque 2 – Ceph 20G0
RAM 2G
2vCPU

II. Prérequis à toutes les machines

1°) Inscription des machines Ceph au DNS

MODOP – Configurer un DNS Primaire et Secondaire – Centos7

[root@dns-pri ~]# vi /var/named/forward.house.cpb
; Cluster CEPH
;PARTIE ADMIN
node01-ceph-admin IN A 172.16.186.40
;PARTIE MON,MGR,MDS
node02-ceph-mon1 IN A 172.16.186.41
node03-ceph-mon2 IN A 172.16.186.42
node04-ceph-mon3 IN A 172.16.186.43
;PARTIE OSD
node05-ceph-osd1 IN A 172.16.186.44
node06-ceph-osd2 IN A 172.16.186.45
node07-ceph-osd3 IN A 172.16.186.46
node08-ceph-osd4 IN A 172.16.186.47
node09-ceph-osd5 IN A 172.16.186.48
node10-ceph-osd6 IN A 172.16.186.49
node11-ceph-osd7 IN A 172.16.186.50
node12-ceph-osd8 IN A 172.16.186.51

Le reverse

[root@dns-pri ~]# vi /var/named/reversevmbr3.house.cpb
; CEPH CLuster
;PARTIE ADMIN
40 IN PTR node01-ceph-admin.house.cpb.
;PARTIE MON,MGR,MDS
41 IN PTR node02-ceph-mon1.house.cpb.
42 IN PTR node03-ceph-mon2.house.cpb.
43 IN PTR node04-ceph-mon3.house.cpb.
;PARTIE OSD
44 IN PTR node05-ceph-osd1.house.cpb.
45 IN PTR node06-ceph-osd2.house.cpb.
46 IN PTR node07-ceph-osd3.house.cpb.
47 IN PTR node08-ceph-osd4.house.cpb.
48 IN PTR node09-ceph-osd5.house.cpb.
49 IN PTR node10-ceph-osd6.house.cpb.
50 IN PTR node11-ceph-osd7.house.cpb.
51 IN PTR node12-ceph-osd8.house.cpb.
[root@dns-pri ~]# systemctl reload named

2°) Installation des middlewares (12 noeuds)

[root@node01-ceph-admin ~]# dnf update
[root@node01-ceph-admin ~]# dnf -y install vim bash-completion nmap net-tools wget

3°) Installation ntpd (12 nœuds)

[root@node01-ceph-admin ~]# timedatectl set-timezone Europe/Paris
[root@node01-ceph-admin ~]# timedatectl

4°) Désactivation Selinux (12 nœuds)

[root@node01-ceph-admin ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node01-ceph-admin ~]# reboot

5°) Désactivation IPv6 (12 nœuds)

[root@node01-ceph-admin ~]# vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.default.autoconf = 0
[root@node01-ceph-admin ~]# sysctl -p

6°) Création Utilisateur et ajout droit sudoers (12 nœuds)

[root@node01-ceph-admin ~]# useradd -d /home/cephuser -m cephuser
[root@node01-ceph-admin ~]# passwd cephuser
[root@node01-ceph-admin ~]# echo "cephuser ALL = (root) NOPASSWD:ALL" >> /etc/sudoers.d/cephuser
[root@node01-ceph-admin ~]# chmod 0440 /etc/sudoers.d/cephuser
[root@node01-ceph-admin ~]# sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers

III. Connexion SSH (node01-Ceph-admin)

1°) générer une clef SSH pour cephuser (ssh-keygen)

root@floki03:~# ssh -l root node01-ceph-admin
[cephuser@node01-ceph-admin ~]$ su - cephuser
[cephuser@node01-ceph-admin ~]$ ssh-keygen

2°) Création config SSH pour les nodes

[cephuser@node01-ceph-admin ~]$ vi ~/.ssh/config

Host node01-ceph-admin
          Hostname node01-ceph-admin
          User cephuser

Host node02-ceph-mon1
           Hostname node02-ceph-mon1
           User cephuser

Host node03-ceph-mon2
           Hostname node03-ceph-mon2
           User cephuser

Host node04-ceph-mon3
           Hostname node04-ceph-mon3
           User cephuser

Host node05-ceph-osd1
           Hostname node05-ceph-osd1
           User cephuser

Host node06-ceph-osd2
           Hostname node06-ceph-osd2
           User cephuser

Host node07-ceph-osd3
           Hostname node07-ceph-osd3
           User cephuser

Host node08-ceph-osd4
           Hostname node08-ceph-osd4
           User cephuser

Host node09-ceph-osd5
           Hostname node09-ceph-osd5
           User cephuser

Host node10-ceph-osd6
           Hostname node10-ceph-osd6
           User cephuser

Host node11-ceph-osd7
           Hostname node11-ceph-osd7
           User cephuser

Host node12-ceph-osd8
           Hostname node12-ceph-osd8
           User cephuser
[cephuser@node01-ceph-admin ~]$ chmod 644 ~/.ssh/config
[cephuser@node01-ceph-admin ~]$ ssh-keyscan node01-ceph-admin node02-ceph-mon1 node03-ceph-mon2 node04-ceph-mon3 node05-ceph-osd1 node06-ceph-osd2 node07-ceph-osd3 node08-ceph-osd4 node09-ceph-osd5 node10-ceph-osd6 node11-ceph-osd7 node12-ceph-osd8 >> ~/.ssh/known_hosts
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node02-ceph-mon1
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node03-ceph-mon2
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node04-ceph-mon3
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node05-ceph-osd1
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node06-ceph-osd2
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node07-ceph-osd3
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node08-ceph-osd4
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node09-ceph-osd5
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node10-ceph-osd6
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node11-ceph-osd7
[cephuser@node01-ceph-admin ~]$ ssh-copy-id node12-ceph-osd8

3°) Installation des Middleware ceph

[cephuser@node01-ceph-admin ~]$ sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
[cephuser@node01-ceph-admin ~]$ sudo yum install dnf-plugins-core
[cephuser@node01-ceph-admin ~]$ sudo dnf config-manager --set-enabled powertools

4°) Installation de ceph-ansible

[cephuser@node01-ceph-admin ~]$ sudo dnf install ansible
[cephuser@node01-ceph-admin ~]$ sudo yum install git vim bash-completion
[cephuser@node01-ceph-admin ~]$ git clone https://github.com/ceph/ceph-ansible.git
[cephuser@node01-ceph-admin ~]$ cd ceph-ansible
[cephuser@node01-ceph-admin ceph-ansible]$ git checkout stable-5.0

[cephuser@node01-ceph-admin ceph-ansible]$ sudo yum install python3-pip
[cephuser@node01-ceph-admin ceph-ansible]$ sudo python3 -m pip install -U pip
[cephuser@node01-ceph-admin ceph-ansible]$ pip3 install -r requirements.txt

[cephuser@node01-ceph-admin ceph-ansible]$ echo "PATH=$PATH:/usr/local/bin" >>~/.bashrc
[cephuser@node01-ceph-admin ceph-ansible]$ source ~/.bashrc

[cephuser@node01-ceph-admin ceph-ansible]$ mkdir -p /home/cephuser/ansible/
[cephuser@node01-ceph-admin ceph-ansible]$ ansible --version

IV. Configurer ceph-ansible

1°) Configurer le Cluster via ceph-ansible (all.yml)

[cephuser@node01-ceph-admin ceph-ansible]$ cp group_vars/all.yml.sample group_vars/all.yml
[cephuser@node01-ceph-admin ceph-ansible]$ vim group_vars/all.yml

#Version CEPH à déployer 
######################################
# Releases name to number dictionary #
######################################
ceph_release_num: 15
cluster: ceph

#Inventaires des objets à installer
mon_group_name: mons
osd_group_name: osds
rgw_group_name: rgws
mds_group_name: mdss
nfs_group_name: nfss
rbdmirror_group_name: rbdmirrors
lient_group_name: clients
iscsi_gw_group_name: iscsigws
mgr_group_name: mgrs
rgwloadbalancer_group_name: rgwloadbalancers
grafana_server_group_name: grafana-server
#monitoring_group_name: monitoring

#Firewall sur les Nœuds 
configure_firewall: True
# Open ports on corresponding nodes if firewall is installed on it
ceph_mon_firewall_zone: public
ceph_mgr_firewall_zone: public
ceph_osd_firewall_zone: public
ceph_rgw_firewall_zone: public
ceph_mds_firewall_zone: public
ceph_nfs_firewall_zone: public
ceph_rbdmirror_firewall_zone: public
ceph_iscsi_firewall_zone: public
ceph_dashboard_firewall_zone: public
ceph_rgwloadbalancer_firewall_zone: public

#NTP sur les Noeuds
ntp_service_enabled: true
ntp_daemon_type: chronyd

#Option version distribution
ceph_repository_type: cdn
ceph_origin: repository
ceph_repository: community
ceph_stable_release: octopusy

#Choix Réseau à utiliser (ici LABO vmbr3)
monitor_interface: ens18
radosgw_interface: ens18
public_network: 172.16.186.0/24

#DashBoard Ceph
dashboard_enabled: True
dashboard_protocol: http
dashboard_admin_user: admin
dashboard_admin_password: Choux2Fleur
grafana_admin_user: admin
grafana_admin_password: Choux2Fleur

2°) Configurer les OSD disque via ceph-ansible (osds.yml)

[cephuser@node01-ceph-admin ceph-ansible]$ cp group_vars/osds.yml.sample group_vars/osds.yml
[cephuser@node01-ceph-admin ceph-ansible]$ vim group_vars/osds.yml
copy_admin_key: true
devices:
 - /dev/sdb

3°) Configurer nos hosts via-ansible (hosts)

[cephuser@node01-ceph-admin ceph-ansible]$ vim hosts

# Connexion SSH via cephuser
[all:vars]
ansible_ssh_user=cephuser
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root

# Noeuds Moniteur
[mons]
node02-ceph-mon1
node03-ceph-mon2
node04-ceph-mon3

# Noeuds MDS
[mdss]
node02-ceph-mon1
node03-ceph-mon2
node04-ceph-mon3

# Noeuds RGW
[rgws]
node02-ceph-mon1
node03-ceph-mon2
node04-ceph-mon3

# Noeuds Manager MGRS
[mgrs]
node02-ceph-mon1
node03-ceph-mon2
node04-ceph-mon3

# Noeuds OSD (Object Storage Daemon)
[osds]
node05-ceph-osd1
node06-ceph-osd2
node07-ceph-osd3
node08-ceph-osd4
node09-ceph-osd5
node10-ceph-osd6
node11-ceph-osd7
node12-ceph-osd8

# Grafana server (HA)
[grafana-server]
node02-ceph-mon1
node03-ceph-mon2
node04-ceph-mon3

V.Déployer le Cluster et Grafana (site.yml)

[cephuser@node01-ceph-admin ceph-ansible]$ cp site.yml.sample site.yml
[cephuser@node01-ceph-admin ceph-ansible]$ ansible-playbook -i hosts site.yml

Cette étape va déployer le Cluster Ceph via Ansible…. Cela risque de durer

A la fin du déploiement

1 °) Check le Cluster Ceph déployé

[cephuser@node01-ceph-admin ceph-ansible]$ ssh node02-ceph-mon1
[cephuser@node02-ceph-mon1 ~]$ sudo ceph -s

[cephuser@node02-ceph-mon1 ~]$ sudo ceph config set mon auth_allow_insecure_global_id_reclaim false

Le pool OSD

[cephuser@node02-ceph-mon1 ~]$ sudo ceph osd tree


2°) Check Grafana

Mon réseau de LAB est sur le Subnet 172.16.185.0/24 et mon réseau de test est sur le Subnet 192.168.1.0/24.De ce fait pour tester la partie Grafana je vais monter provisoirement une seconde carte réseau virtuelle.

[root@node02-ceph-mon1 ~]# firewall-cmd --add-interface ens19
[root@node02-ceph-mon1 ~]# firewall-cmd --add-source=192.168.1.0/24 --zone=public --permanent && firewall-cmd --reload
[root@node02-ceph-mon1 ~]# vi /etc/grafana/grafana.ini
#http_addr = 172.16.186.41
http_addr = 192.168.1.29

2°) Update Pie Chart

[root@node02-ceph-mon1 chris]# wget -nv https://grafana.com/api/plugins/grafana-piechart-panel/versions/latest/download -O /tmp/grafana-piechart-panel.zip
[root@node02-ceph-mon1 chris]# dnf install unzip

[root@node02-ceph-mon1 chris]# unzip -q /tmp/grafana-piechart-panel.zip -d /tmp
[root@node02-ceph-mon1 chris]# mv /tmp/grafana-piechart-panel /var/lib/grafana/plugins/grafana-piechart-panel

[root@node02-ceph-mon1 tmp]# sudo service grafana-server restart

Choisir nos sources d’affichages pour Grafana



Les 3 nœuds grafana (moniteurs) peuvent être par la suite pilotés par un loadbalancing HAProxy pour rendre la supervision toujours disponible quel que soit l’état d’un des nœuds moniteurs.

Exemple : Configurer un HA Proxy

Views: 41

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *