MODOP – Partie 1 – Installation Cluster GlusterFS/Zpool HA

1, Inventaire des Machines

clustergfs01.house.cpb

  • RAM : 2Go
  • vCPU : 2
  • Réseau Privé Bond0 : 172.17.186.20
    • Ens18
    • Ens19
  • Réseau Public Bond1 : 192.168.1.14
    • Ens20
    • Ens21
  • 24 disques x 32 Go

clustergfs02.house.cpb

  • RAM : 2Go
  • vCPU : 2
  • Réseau Privé Bond0 : 172.17.186.21
    • Ens18
    • Ens19
  • Réseau Public Bond1 : 192.168.1.15
    • Ens20
    • Ens21
  • 24 disques x 32 Go

Clustergfs03.house.cpb

  • RAM : 2Go
  • vCPU : 2
  • Réseau Privé Bond0 : 172.17.186.22
    • Ens18
    • Ens19
  • Réseau Public Bond1 : 192.168.1.16
    • Ens20
    • Ens21
  • 24 disques x 32Go

Fault tolérance

Possibilité de perte pour le cluster

  • 1 lien réseaux sur le réseau privé (bond0) pour chacun des nodes
  • 1 lien réseaux sur le réseau public (bond1) pour chacun des nodes
  • 2 disques par RAIDZ soit 6 Disque pour chacun des nodes
  • 2 nodes sur le cluster

2. Installation des prérequis (3 nodes)

2.1 Configurer bond0 et bond1

Update des machines (3 nodes)

[root@clustergfs0x ~]# yum -y update

Chargement Module (3 nodes)

[root@clustergfs0x ~]# modprobe --first-time bonding
[root@clustergfs0x ~]# modinfo bonding

Configure Bond0 Interface LAN Privé (balance-tlb) (3 nodes)

Interface bond0

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=172.17.186.2x 
PREFIX=24
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="downdelay=0 miimon=100 mode=balance-alb updelay=0"
PROXY_METHOD=none
BROWSER_ONLY=no
GATEWAY=172.17.186.201
DNS1=192.168.1.1
DOMAIN=home
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
UUID=ad33d8b0-1f7b-cab9-9447-ba07f855b143

Configure Network interfaces (3 nodes)

Carte ens18

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens18

TYPE=Ethernet
NAME=ens18
DEVICE=ens18
ONBOOT=yes
MASTER=bond0
SLAVE=yes 
UUID=59db8b5c-940b-4e16-8150-39f33433f086

Carte ens19

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens19

TYPE=Ethernet
NAME=ens19
DEVICE=ens19
ONBOOT=yes
MASTER=bond0
SLAVE=yes 
UUID=ab5297b8-a78e-4a22-a99e-0967b499fe9b

Démarrer les cartes et bond0

[root@clustergfs0x ~]# nmcli connection reload

Test Network Bonding

[root@clustergfs01 ~]# ip a show bond0 |grep -w inet

[root@clustergfs02 ~]# ip a show bond0 |grep -w inet

[root@clustergfs03 ~]# ip a show bond0 |grep -w inet

Configure Bond1 Interface LAN Public (balance-tlb) (3 nodes)

Interface bond1

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond1

BONDING_OPTS="mode=balance-alb downdelay=0 miimon=100 updelay=0"
TYPE=Bond
BONDING_MASTER=yes
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.1.1x
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DISABLED=yes
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=bond1
UUID=4a8793fb-5665-42c1-9f78-67536646b5e5
DEVICE=bond1
ONBOOT=yes

Configure Network interfaces (3 nodes)

Carte ens20

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens20

TYPE=Ethernet
NAME=ens20
DEVICE=ens20
ONBOOT=yes
MASTER=bond1
SLAVE=yes
UUID=59db8b5c-940b-4e16-8150-39f33433f086

Carte ens21

[root@clustergfs0x ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens21

TYPE=Ethernet
NAME=ens21
DEVICE=ens21
ONBOOT=yes
MASTER=bond1
SLAVE=yes
UUID=ab5297b8-a78e-4a22-a99e-0967b499fe9b

Démarrer les cartes et bond1

[root@clustergfs0x ~]# nmcli connection reload

Test Network Bonding

[root@clustergfs01 ~]# ip a show bond1 |grep -w inet

[root@clustergfs02 ~]# ip a show bond1 |grep -w inet

[root@clustergfs03 ~]# ip a show bond1 |grep -w inet

2.2 Installation des packages nécessaires

Prérequis

[root@clustergfs0x ~]# yum install kernel-devel -y
[root@clustergfs0x ~]# yum install epel-release -y
[root@clustergfs0x ~]# yum install pciutils -y

Desactiver selinux

[root@clustergfs0x ~]# sed -ie 's/enforcing/disabled/g' /etc/selinux/config
[root@clustergfs0x ~]# setenforce 0

2.3 suppression Ipv6

[root@clustergfs0x ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@clustergfs0x ~]# echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.conf
[root@clustergfs0x ~]# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@clustergfs0x ~]# echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.conf
[root@clustergfs0x ~]# sysctl -p

2.4 Timedatectl

[root@clustergfs0x ~]# timedatectl set-timezone Europe/Paris

2.5 Echange de Key SSH

[root@clustergfs0x ~]# echo "172.17.186.20 clustergfs01" >> /etc/hosts
[root@clustergfs0x ~]# echo "172.17.186.21 clustergfs02" >> /etc/hosts
[root@clustergfs0x ~]# echo "172.17.186.22 clustergfs03" >> /etc/hosts
[root@clustergfs0x ~]# ssh-keygen

[root@clustergfs01 ~]# ssh-copy-id root@clustergfs02
[root@clustergfs01 ~]# ssh-copy-id root@clustergfs03
[root@clustergfs02 ~]# ssh-copy-id root@clustergfs01
[root@clustergfs02 ~]# ssh-copy-id root@clustergfs03
[root@clustergfs03 ~]# ssh-copy-id root@clustergfs01
[root@clustergfs03 ~]# ssh-copy-id root@clustergfs02

3 Installation ZFS (3 nodes)

Installation DKMS

[root@clustergfs0x ~]# yum config-manager --enable epel
[root@clustergfs0x ~]# yum install -y dkms wget

Installation ZFS

[root@clustergfs0x ~]# yum -y install libuuid-devel libblkid-devel libtirpc-devel openssl-devel
[root@clustergfs0x ~]# cd /home && wget https://github.com/openzfs/zfs/releases/download/zfs-2.1.6/zfs-2.1.6.tar.gz
[root@clustergfs0x home]# tar xzvf zfs-2.1.6.tar.gz && cd zfs-2.1.6
[root@clustergfs0x zfs-2.1.6]# ./configure
[root@clustergfs0x zfs-2.1.6]# make
[root@clustergfs0x zfs-2.1.6]# make install
[root@clustergfs0x zfs-2.1.6]# modinfo zfs |head -10

[root@clustergfs0x ~]# echo modprobe zfs >> /etc/rc.local
[root@clustergfs0x ~]# chmod +x /etc/rc.local
[root@clustergfs0x ~]# source /etc/rc.local
[root@clustergfs0x ~]# lsmod |grep -w zfs

4 Création des alias Disques (3 nodes)

Création du fichier vdev_id.conf

[root@clustergfs0x home]# lspci |grep SCSI
00:05.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI
[root@clustergfs0x home]# ls -al /dev/disk/by-path/pci-0000:00:05.0*

[root@clustergfs0x ~]# VAL=`ls -als /dev/disk/by-path/pci-0000:00:05.0* |grep -v part |wc -l` && expr ${VAL} - 1
24

[root@clustergfs0x ~]# for i in `seq 0 23`; do echo "alias d$(( i + 1 )) /dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:$(( i + 1))" >> /etc/vdev_id.conf ;done
[root@clustergfs0x ~]# cat /etc/vdev_id.conf

[root@clustergfs0x ~]# mkdir -p /etc/zfs
[root@clustergfs0x ~]# cp /etc/vdev_id.conf /etc/zfs/vdev_id.conf

Récupération script rules vdev

[root@clustergfs0x ~]# curl -o /usr/lib/udev/rules.d/68-vdev.rules http://images.45drives.com/udev/68-vdev.rules

[root@clustergfs0x ~]# curl -o /usr/lib/udev/vdev_id_45drives http://images.45drives.com/udev/vdev_id_45drives

[root@clustergfs0x ~]# chmod +x /usr/lib/udev/vdev_id_45drives

Lancement de la création des Alias

[root@clustergfs0x ~]# udevadm control --reload-rules
[root@clustergfs0x ~]# udevadm trigger
[root@clustergfs0x ~]# udevadm settle
[root@clustergfs0x ~]# ls -al /dev/disk/by-vdev/

5 Création d’un POOL Zfs (3 nodes)

Création du pool – 3 RAIDZ2 x 8 disques

Dans notre cas 1 pool de disque de 3 RAIDZ2 x 8 disques => 6 fault disque tolérant

[root@clustergfs0x home]# zpool create -f zpool -o ashift=9 raidz2 d1 d2 d3 d4 d5 d6 d7 d8 raidz2 d9 d10 d11 d12 d13 d14 d15 d16 raidz2 d17 d18 d19 d20 d21 d22 d23 d24
[root@clustergfs0x home]# ls -al /dev/disk/by-vdev/

Check du zpool sur les 3 nodes

[root@clustergfs01 tools]# zpool list

[root@clustergfs02 tools]# zpool list

[root@clustergfs03 tools]# zpool list

[root@clustergfs0x tools]# zpool status

6 Installation GlusterFS (3 nodes)

Attention la version 10.3 , provoque la perte des Bricks au redémarrage de la machine.
A priori un BUG connu , se retourner vers la version disponible sur le Git

Installation liburing

[root@clustergfs0x ~]#cd /home
[root@clustergfs0x home]# dnf groupinstall "Development Tools"
[root@clustergfs0x home]# yum install git -y
[root@clustergfs0x home]# git clone https://github.com/axboe/liburing.git
[root@clustergfs0x home]# cd liburing/
[root@clustergfs0x liburing]# ./configure
[root@clustergfs0x liburing]# make && make install

Installation Packages Prérequis

[root@clustergfs0x home]# yum -y install automake python3 libxml2-devel gperftools
[root@clustergfs0x home]# dnf -y install liburing libcgroup libtool flex bison libacl libacl-devel
[root@clustergfs0x home]# dnf --enablerepo=powertools install rpcgen -y
[root@clustergfs0x home]# dnf --enablerepo=powertools install userspace-rcu-devel -y

Installation Packages GlusterFS

[root@clustergfs0x ~]# cd /home && git clone https://github.com/gluster/glusterfs.git
[root@clustergfs0x home]# cd glusterfs/

[root@clustergfs0x glusterfs]#./autogen.sh
[root@clustergfs0x glusterfs]#./configure
[root@clustergfs0x glusterfs]# make
[root@clustergfs0x glusterfs]# make install

Installation Environnement Variable GlusterFS

[root@clustergfs0x glusterfs]# export PATH=$PATH:/usr/local/sbin
[root@clustergfs0x glusterfs]# echo "export PATH=$PATH:/usr/local/sbin" >> ~/.bashrc
[root@clustergfs0x glusterfs]# source ~/.bashrc
[root@clustergfs0x glusterfs]# glusterfs --version
glusterfs 12dev

Installation du service GlusterFS

[root@clustergfs0x glusterfs]# mkdir -p /sysconfig/glusterd
[root@clustergfs0x glusterfs]# vi /etc/systemd/system/multi-user.target.wants/glusterd.service

[Unit]
Description=GlusterFS, a clustered file-system server
Documentation=man:glusterd(8)
StartLimitBurst=6
StartLimitIntervalSec=3600
Requires=
After=network.target
Before=network-online.target

[Service]
Type=forking
PIDFile=/var/run/glusterd.pid
LimitNOFILE=65536
Environment="LOG_LEVEL=INFO"
EnvironmentFile=-/etc/sysconfig/glusterd
ExecStart=/usr/local/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS
KillMode=process
TimeoutSec=300
SuccessExitStatus=15
Restart=on-abnormal
RestartSec=60
StartLimitBurst=6
StartLimitInterval=3600

[Install]
WantedBy=multi-user.target
[root@clustergfs0x glusterfs]# systemctl daemon-reload

Démarrer les services GlusterFS

[root@clustergfs0x ~]# systemctl enable glusterd.service && systemctl start glusterd.service
[root@clustergfs0x ~]# systemctl status glusterd.service

Ajout des Rules dans le Firewall

[root@clustergfs0x ~]# firewall-cmd --add-port={4379,24007-28008}/tcp --permanent --zone=public
[root@clustergfs0x ~]# firewall-cmd --remove-service={cockpit,dhcpv6-client} --permanent --zone=public
[root@clustergfs0x ~]# firewall-cmd --reload
[root@clustergfs0x ~]# firewall-cmd –list-port

7 Creation Bricks GlusterFS (3 nodes)

Création des volumes « Brick »

[root@clustergfs0x ~]# zfs create zpool/ctdb
[root@clustergfs0x ~]# zfs create zpool/vol1
[root@clustergfs0x ~]# zfs create zpool/vol2
[root@clustergfs0x ~]# df -Th |grep zpool

Création des quotas « Brick »

[root@clustergfs0x ~]# zfs set quota=2G zpool/ctdb
[root@clustergfs0x ~]# zfs set quota=275G zpool/vol1
[root@clustergfs0x ~]# zfs set quota=275G zpool/vol2
[root@clustergfs0x ~]# df -Th |grep zpool

Mount ZFS des « Brick »

[root@clustergfs0x ~]# zfs set mountpoint=/zpool zpool
[root@clustergfs0x ~]# zfs set mountpoint=/zpool/ctdb zpool/ctdb
[root@clustergfs0x ~]# zfs set mountpoint=/zpool/vol1 zpool/vol1
[root@clustergfs0x ~]# zfs set mountpoint=/zpool/vol2 zpool/vol2

On start des zpool et bricks

[root@clustergfs01 ~]# echo "zpool import -F zpool" >> /etc/rc.local
[root@clustergfs01 ~]# chmod +x /etc/rc.local

8 Création cluster GlusterFS et Volume (node1)

Check des Flux Hosts GlusterFS – Réseau privé

[root@clustergfs01 ~]# ping -c 2 clustergfs02

[root@clustergfs01 ~]# ping -c 2 clustergfs03

Enrôlement des machines Gluster

[root@clustergfs01 ~]# gluster peer status
Number of Peers: 0

[root@clustergfs01 ~]# gluster peer probe clustergfs02
[root@clustergfs01 ~]# gluster peer probe clustergfs03

Check du cluster GlusterFS 3 nodes

[root@clustergfs01 ~]# gluster peer status


Connexion des machines clustergfs02 et clustergfs03

[root@clustergfs02 ~]# gluster peer status


Connexion des machines clustergfs01 et clustergfs03

[root@clustergfs03 ~]# gluster peer status


Connexion des machines clustergfs01 et clustergfs02

Création du Réplica Données /tank

[root@clustergfs01 ~]# gluster volume create tank replica 3 clustergfs01:/zpool/vol1/brick clustergfs02:/zpool/vol2/brick clustergfs03:/zpool/vol1/brick clustergfs02:/zpool/vol1/brick clustergfs01:/zpool/vol2/brick clustergfs03:/zpool/vol2/brick

[root@clustergfs01 ~]# gluster volume info all

Création du Réplica Données ctdb

[root@clustergfs01 ~]# gluster volume create ctdb clustergfs01:/zpool/ctdb clustergfs02:/zpool/ctdb clustergfs03:/zpool/ctdb force
[root@clustergfs01 ~]# gluster volume info ctdb

Démarrer les volumes

[root@clustergfs01 ~]# gluster volume start ctdb
[root@clustergfs01 ~]# gluster volume start tank

[root@clustergfs01 ~]# gluster vol status ctdb

[root@clustergfs01 ~]# gluster vol status tank

[root@clustergfs01 ~]# gluster vol heal tank full
[root@clustergfs01 ~]# gluster volume heal tank info

Règles Firewall (3 nodes)

[root@clustergfs01 ~]# yum install net-tools
[root@clustergfs01 ~]# netstat -antp |sort | uniq

[root@clustergfs0x ~]# firewall-cmd --permanent --add-port={2049,49000-61000}/tcp --zone=public
[root@clustergfs0x ~]# firewall-cmd --reload

9 Montage volume GLustergfs (3 nodes)

Montage Gluster Volume /ctdb 

[root@clustergfs01 ~]# dnf install attr -y
[root@clustergfs0x ~]# mkdir -p /mnt/ctdb
[root@clustergfs0x ~]# echo "localhost:/ctdb /mnt/ctdb glusterfs defaults,_netdev 0 0" >> /etc/fstab

[root@clustergfs0x ~]# mount /mnt/ctdb
[root@clustergfs0x ~]# df -h

Montage Gluster Volume /tank

[root@clustergfs0x ~]# mkdir /mnt/tank
[root@clustergfs01 ~]# echo "localhost:/tank /mnt/tank glusterfs defaults,_netdev 0 0" >> /etc/fstab
[root@clustergfs0x ~]# mount /mnt/tank
[root@clustergfs0x ~]# df -h |grep /mnt

Check Ecriture sur GlusterFS

[root@clustergfs01 ~]# echo "Petit Test - Ecriture à partir de gfs01 " >> /mnt/tank/gfs01.txt

[root@clustergfs02 ~]# cat /mnt/tank/gfs01.txt

[root@clustergfs03 ~]# cat /mnt/tank/gfs01.txt

Views: 10

Laisser un commentaire

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