Outils pour utilisateurs

Outils du site


fr:rapports:2020:08-14

2020/08/14 (Hub infra - installation réseau et ceph)

FIXME À relire et peaufiner.

Sur d'autres pages ou pads…

Présences

tharyrok, hgo, tierce, ptr_here

A faire

  • config la sortie virtual serial des hp
  • la config réseau
  • crée le cluster proxmox
  • créer le cluster ceph
  • créer nos utilisateur unix/proxmox/ilo
  • changé les mdp root/admin/….
  • créer les vm edge
  • config bgp
  • rajouter du basilic

Situation de départ

Voir réunion précédente : https://wiki.neutrinet.be/fr/rapports/2020/08-12

En gros on a topi, nam et bour qui sont installé avec un Proxmox, actuellement individuel. Ils ne sont pas encore en « cluster ».

On se fait un screen partagé

Sur chaque serveur on fait

screen -S nam ou bour ou topi en tant que root

se connecter chacun en root sur les serveurs concernés

screen -x nam pour « rejoindre » le terminal partagé

Config la sortie virtual serial des hp

C'est pour contourner la limite des 30sec de terminal des iLo sans licence.

#nano /etc/default/grub
# Dire au kernel d'avoir un tty sur le serial et sur la sortie video
GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty1 console=ttyS1,115200"
# Le menu grub du boot s'affiche en serial et en sortie video
GRUB_TERMINAL="console serial"
# configurer la sortie serial du grub
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1"
# update-grub

(ssh ILO est pourri / il faut paramétrer ton client avec des vieilles cryptos)

host 192.168.12.61 (nam)
    MACs hmac-md5,hmac-sha1
    Ciphers aes256-ctr
    KexAlgorithms diffie-hellman-group1-sha1
    HostKeyAlgorithms ssh-rsa

Se connecter en ssh au iLo d'un des serveur ( ssh 192.168.12.61 (ou son IP au datacenter) -ladministrator (ou ton login si tu es dans les utilisateurs/admin des iLo) -p22 )

Une fois connecté au ilo il y a la commande « vsp » pour ce connecter au virtual serial (pas besoin donc de se connecter sur le iLo en https et d'aller chercher le console HTML5 qui est limité a 30 sec)

La configuration du réseau

Les connexion physiques

Nam sera en haut dans le rack (c'est important pour raison mystique: de pas croiser les sessions BGP). En fait sur nam ce trouve la vm edge-01. Du coup on sait que le port 1 du patch panel de verixi va sur le premier serveur et le port 2 du patch panel va sur le deuxieme serveur.

Il y a deux connexions SFP+ (fibre, 10Gb) entre nam et bour (2 portes chacun) qui sont configurées en agrégation de lien (LACP) Il y a deux connexions RJ45 (1Gb) entre nam et bour (4 portes chacun) qui sont configurées en agrégation de lien (LACP) et c'est la troisième et quatrième interface physique du serveur. Il y a une connexion 1Gb entre nam et topi et c'est la deuxième interface physique du serveur. Il y a une connexion 1Gb entre bour et topi et c'est la deuxième interface physique du serveur. Il y a une connexion RJ45 (1Gb) entre edge-01 (une VM actuellement) et Verixi sur le serveur nam et c'est la première interface physique du serveur. Il y a une connexion RJ45 (1Gb) entre edge-02 (une VM actuellement) et Verixi sur le serveur bour et c'est la première interface physique du serveur (ils sont numérotés sur le châssis, en dessous du socket rj45).

Nam a un convertisseur usb serial qui est connecté sur la sortie serial de topi.

Les switches virtuels

Le vmbr1 est le switch pour la connexion bgp. (edge-01, edge-02) Nous ne pouvons pas, sur ce modèle de HP, faire du pci passthrough donc connecter la première interface réseau dans la vm edge. Ce switch virtuel ne doit pas être utiliser pour les machine virtuelle.

Le vmbr0 est le switch virtuel pour toute l'infra de Neutrinet et c'est sur ce dernier qu'il y aura les différents vlan. Par exemple, pour les amis, il ou elle seront sur le VLAN40 sur vmbr0.

L'interconnexion entre les switches virtuels

Nam, bour et topi sont sur un bateau… Mais surtout, ils ont le même switch virtuel vmbr0. Ces trois switches sont interconnectés par les câbles physiques (rj45 et sfp) pour éviter de faire des boucles on utilise le protocole RSTP.

On a fait en sorte, grâce au RSTP (Rapid Spanning Tree Protocol), que les fibres entre nam et bour sont utilisés en priorité et les rj45 en backup (c'est la longue ligne dans le fichier /etc/network/interfaces) Et si jamais nam et bour ne savent plus se parler directement (rj45 ou fibre) il passent par topi pour continuer la discussion. Idem entre topi et nam.

Les VLANs

Le lien suivant aura servi de source d'inspiration (ou d'ultime expiration si on comprends rien au réseau ce qui est le cas de la moitié des gens chez Neutrinet :p)

 https://pve.proxmox.com/wiki/Open_vSwitch#Example_2:_Bond_.2B_Bridge_.2B_Internal_Ports
vlan 10-99 Interne Neutrinet

# Utilisé pour les Proxmox et Ceph et iLo, bref pour tout ce qui est physique
VLAN 10 (Management)
    10.0.10.0/24
    fd97:cbaf:f4d3:32a9:10::/64

# Actuellement utilisé par les VMs qui se trouvent à i3d et qu'on rapatrie ce samedi
VLAN 20 (OLD Internal)
    172.16.42.0/24

# Utilisé par nos futures VMs. Par ex, les pfsenses utiliseront ce VLAN. Idem pour les nouvelles VMs, comme celle dédiée au Mattermost (exemple fictif)
VLAN 30 (Internal)
    10.0.30.0/24
    fd97:cbaf:f4d3:32a9:30::/64

# Nos IPs publiques
VLAN 40 (WAN)
    80.67.181.0/28
    2001:913:1000::/40

la config

Vérifier que openvswitch est bien là :

  apt install openvswitch-switch

Et puis reboot. ( reconnect ssh 192.168.12.213 et 192.168.12.214 )

Si on s'est planté dans la config, passer par le iLo

Mettre à jour la config pour les VLANs (un vlan est comme une interface reseau) :

/etc/network/interfaces

Changer les hosts/IPs des trois serveurs :

/etc/hosts
127.0.0.1        localhost
10.0.10.11                        nam.blue.neutri.net        nam
fd97:cbaf:f4d3:32a9:10::11        nam.blue.neutri.net        nam
10.0.10.12                        bour.blue.neutri.net        bour
fd97:cbaf:f4d3:32a9:10::12        bour.blue.neutri.net        bour
10.0.10.13                        topi.blue.neutri.net        topi
fd97:cbaf:f4d3:32a9:10::13        topi.blue.neutri.net        topi
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ensuite, faire : ip a Et vérifier les links down par exemple

Note : dans le choix des noms du style eno1 eno2 … Le eno c'est le driver, et le chiffre c'est la ligne PCI définie par le matos (dans udev on peut s'amuser, mais bon)

Le mtu n'etait pas correcte; adapter de 12000 a la valeur trouvée pour le max_mtu de l'interface avec la commande:

# ip -d link list
exemple : link/ether 52:54:00:82:78:1b brd ff:ff:ff:ff:ff:ff promiscuity 1 minmtu 68 maxmtu 65521
root@nam:~# cat /proc/net/bonding/bond1 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: d8:9d:67:6e:91:9d
Active Aggregator Info:
    Aggregator ID: 1
    Number of ports: 2
    Actor Key: 9
    Partner Key: 9
    Partner Mac Address: d8:9d:67:6e:c1:4d

Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: d8:9d:67:6e:91:9d
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: d8:9d:67:6e:91:9d
    port key: 9
    port priority: 255
    port number: 1
    port state: 63
details partner lacp pdu:
    system priority: 65535
    system mac address: d8:9d:67:6e:c1:4d
    oper key: 9
    port priority: 255
    port number: 1
    port state: 63

Slave Interface: eno3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: d8:9d:67:6e:91:9e
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: d8:9d:67:6e:91:9d
    port key: 9
    port priority: 255
    port number: 2
    port state: 63
details partner lacp pdu:
    system priority: 65535
    system mac address: d8:9d:67:6e:c1:4d
    oper key: 9
    port priority: 255
    port number: 2
    port state: 63

Verifier avec :

# ovs-vsctl show
tharyrok: meh, les vlan s'annoncent pas... --> /etc/network/interfaces
root@bour:~# ovs-vsctl show
67721823-be17-439d-a8fd-e84b47b3ff04
    Bridge "vmbr0"
        Port "vlan10"
            tag: 10
            Interface "vlan10"
                type: internal
        Port "eno4"
            Interface "eno4"
        Port "bond0"
            Interface "bond0"
        Port "bond1"
            Interface "bond1"
        Port "vmbr0"
            Interface "vmbr0"
                type: internal
    ovs_version: "2.12.0"

RSTP: La valeur de rstp-path-cost doitt être différentes sur tous les hosts.. si on prends la même valeur dans la config de nam et bour, rstp n'arrive pas a un spanningtree valable et bloque tout le bazar

config topi

root@nam:~#  lsusb
Bus 001 Device 003: ID 0557:2008 ATEN International Co., Ltd UC-232A Serial Port [pl2303]

screen pour se connecter via port serial a topi

/etc/networ/interfaces configurer un bridge en utilisant openvswitch verifier les mtu ( ip -d link list )

enp3s0 enp4s0 : interfaces sur topi pour donner acces au iLo (vlan 10)

– essay de pinger bour, depuis bour, couper le lien (eno4) et voire que le ping continue

plan IP

On essaie d'avoir une plage pour les machines physique et on rajoute +100 pour les iLO (par exemple) Pour rappel, un schéma avec les IPs est disponible ici : https://wiki.neutrinet.be/fr/rapports/2020/08-08

Tout ce qui suis est arbitraire !

Nam

10.0.10.11

fd97:cbaf:f4d3:32a9:10::11


ILO

10.0.10.111

fd97:cbaf:f4d3:32a9:10::111

Bour

10.0.10.12

fd97:cbaf:f4d3:32a9:10::12


ILO

10.0.10.112

fd97:cbaf:f4d3:32a9:10::112

Topi

10.0.10.13

fd97:cbaf:f4d3:32a9:10::13


80.67.181.9

2001:913:1000::9

edge-01

10.0.10.51

fd97:cbaf:f4d3:32a9:10::51


62.112.29.67/31

2a00:1528:3201:5::22/126


80.67.181.2

2001:913:1000::2

VRRP : 80.67.181.1 2001:913:1000::1

edge-02

10.0.10.52

fd97:cbaf:f4d3:32a9:10::52


62.112.29.91/31

2a00:1528:3201:5::26/126


80.67.181.3

2001:913:1000::2

VRRP : 80.67.181.1 2001:913:1000::1

c fini réseau

proxmox cluster

https://pve.proxmox.com/wiki/Cluster_Manager

vite changer sshd_config enable 'PermitRootLogin without-password' (parce que c'est un peu plus facile le temps de configurer le bazar) et on copie la clé rsa root de nam vers topi ( à la main sur base d'un user qui peut se connecter et qui est sudoer).

D'abord on crée le cluster « patata » (cf. choix des noms lors de la réunion précédente)

root@nam:~# pvecm create patata

Voir si le cluster est créé.

# pvecm status

on va sur bour et on l'ajoute au cluster sur base de l'ipv6 de nam

# pvecm add fd97:cbaf:f4d3:32a9:10::11

et si maintenant on fait un pvecm status on voit les 2 nodes (et plus 1 seul, dans le bas)

root@bour:~# pvecm status
…
Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 fd97:cbaf:f4d3:32a9:10::11%32629
0x00000002          1 fd97:cbaf:f4d3:32a9:10::12%32629 (local)

On va sur nam et sur bour pour installer corosync-qdevice

apt install corosync-qdevice

On va ensuite sur topi et on install corosync-qnetd.

apt install corosync-qnetd

On retourne sur nam et on lui demande d'ajouter topi en tant que « qdevice » (c'est juste un membre du cluster qui donne une voix sans pour autant être considéré comme un hyberviseur). L'ip qui fini par :13 étant l'ipv6 de topi.

pvecm qdevice setup fd97:cbaf:f4d3:32a9:10::13

Et on peut voir sur l'une des trois machine, qu'il y a un membre en plus qui est le qdevice (topi)

root@bour:~# pvecm status
Membership information
----------------------
    Nodeid      Votes    Qdevice Name
0x00000001          1    A,V,NMW fd97:cbaf:f4d3:32a9:10::11%32571 (local)
0x00000002          1    A,V,NMW fd97:cbaf:f4d3:32a9:10::12%32571
0x00000000          1            Qdevice

La création du cluster c'est fini.

Ceph (le petit fils de Chtulu)

configuration de sudo sans mot de passe

Installer sudo sur les trois machines (topi, nam, bour)

# apt install sudo 

éditer le visudo

…
# Allow members of group sudo to execute any command, without specifying password
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

On ajoute l'utilisateur qui utilisera ceph-deploy dans les sudoers sur les trois machines.

# usermod -g sudo tharyrok

configuration client ssh

Pour utiliser ceph-deploy (c'est dit dans la doc plus haut).

Sur une machine, par exemple celle de tharyrok, on ajoute ceci comme config ssh (~/.ssh/config)

Host nam
   User tharyrok
   Port 22
   HostName 192.168.12.213

Host bour
   User thayrrok
   Port 22
   HostName 192.168.12.214

Host topi
   User tharyrok
   Port 22
   HostName 192.168.12.217
  • ssh-copy-id pour configurer la connection ssh par cle
  • verifier que l'uilisateur est bien dans le group sudo sur chacune des machines

clone d'un projet ceph-deploy

Sur le PC de tharyrok (par exemple ;) ) on crée repertoire patata-ceph (et 'git init' de repertoire pour pas le perdre et qu'on mettra sur le git de Neutrinet) Pourquoi ? Parce qu'on ne veut pas perdre la config de ceph, sinon on est dans la mouise Moïse. Le repo se trouvera sur le Gitlab ! /!\ Ce dossier pourrait servir un jours si on veut ajouter des OSD ou modifier notre installation ceph.

https://gitlab.domainepublic.net/Neutrinet/patata-ceph

On crée un virtualenv pour install ceph-deploy (un outil pour déployer ceph, mais c'est pas ceph en lui-même)

# ALARACH®

virtualenv3 .env
.env/bin/pip install ceph-deploy
git init
create README.md
git commit

On rajoutera aussi un .gitignore pour ne pas commit le .env !

install de ceph

Parceque Proxomox est prévu pour fonctionner aussi avec du Ceph…

# pveceph install

A exécuter sur les trois serveurs, ce qui ajoutera les repos ceph de proxmox.

Le ceph-deploy étant « un peu vieux » il installerait une ancienne version de ceph. Du coup on passe par les repos de Proxmox pour avoir une version plus récente.

IMPORTANT : Ne pas oublier de brancher son PC, sinon il risque de s'éteindre au bout d'un moment.

création d'un cluster

On pourrait avoir un seul « admin » mais on va l'installer sur nos trois machines par soucis de redondance.

Sur un premier monitoring …

% ./env/bin/ceph-deploy new nam
%  .env/bin/ceph-deploy install --no-adjust-repos nam bour topi

–no-adjust-repos : indique d'utiliser la version de ceph installe' deja sur chaque machine (ici: la version proxmox)

Ne pas oublier de supprimer /etc/apt/sources.list.d/pve-enterprise.list car il génère une 404 (oui on a pas la licence) et du coup ceph-deploy n'aime pas …

création d'un mon

fred@thinkpad-fred ~/Dev/neutrinet/patata-ceph % ceph-deploy mon create-initial

ajouter des admins

% .env/bin/ceph-deploy admin bour topi nam

création d'un mgr (manager)

% .env/bin/ceph-deploy mgr create nam

création des osd (storage device)

On aime bien mettre le osd0 sur un serveur et le osd1 sur un autre serveur, et ainsi de suite pour alterner. Ça évite d'avoir osd0 et 1 sur la première machine. Et si on ajoute un disque un jour sur le premier serveur ça évitera aussi d'avoir osd0, osd1, osd4 sur le premier et osd2, osd3 sur le second. C'est un peu « esthétique » mais en même temps c'est élégant… vous ne trouvez pas? Ça donnera osd0,2 sur nam et osd1,3 sur bour… tadaam.

.env/bin/ceph-deploy osd create --data /dev/sda7 nam
.env/bin/ceph-deploy osd create --data /dev/sda7 bour
.env/bin/ceph-deploy osd create --data /dev/sdb7 nam
.env/bin/ceph-deploy osd create --data /dev/sdb7 bour

verifier un peu les

root@nam:~# systemctl status ceph-mon@nam

root@nam:~# ceph -s
  cluster:
    id:     1a8d6415-fef1-4083-976a-676a521775c1
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum nam (age 39s)
    mgr: nam(active, since 34s)
    osd: 4 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

root@nam:~# systemctl status ceph-osd@0

https://www.spinics.net/lists/ceph-users/msg51954.html ?

demarrer osd a la main pour verifier q c marche localement

root@nam:~# /usr/bin/ceph-osd -d --cluster ceph --id 0 --setuser ceph --setgroup ceph

on ajoute dans la config

ms bind ipv6 = true msbindipv4 = false ms bind_ipv4 = false

ajouter les autres monitors

un par un

./ceph-deploy mon add bour
./ceph-deploy mon add topi

(on a fait un reboot, pour changer)

Et les OSD sont up.

creation du pool

'le fameux placement groupe' : https://ceph.io/pgcalc/

root@bour:~# ceph osd pool create data 128 ceph osd pool set data size 2 ceph osd pool set data min_size 2

Nous on utilise pas de crushmap :p

ajout dans proxmox

copier ceph.conf dans /etc/pve, et faire lien symbolique vers /etc/ceph/ceph.conf copier (?) le admin keyring

conquérir le monde

c'est bien une ambition de mangeur de patates ça :)

fr/rapports/2020/08-14.txt · Dernière modification: 2020/08/18 20:48 par tharyrok