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