La base de métrologie de Shinken peut être fortement sollicitée sur des architectures supervisant un grand nombre d'éléments. Sa disponibilité est également importante puisqu'elle peut être source de données pour des outils externes à Shinken (Grafana par exemple) pouvant être mis à disposition.
L'objectif de cette page de documentation est d'expliquer de manière détaillée la procédure nécessaire pour la mise en place d'un cluster Graphite. Cela permet d'augmenter la disponibilité des données et d'éviter la perte de données en cas d'incident sur la machine stockant les métriques.
Avant de commencer, voici un résumé des différentes étapes nécessaires pour la configuration du cluster Graphite:
La première étape dans la mise en place d'un cluster Graphite est bien entendu l'installation de Graphite. Comme les autres dépendances de Shinken, il faut que la version de Graphite installée soit celle fournie avec l'installeur Shinken. En effet, certaines modifications ont été faites sur Graphite pour l'intégration avec Shinken, ce qui rend incompatible les versions de Graphites qui auraient pu être installées auparavant via d'autres installeurs.
Sur chaque machine qui compose le cluster Graphite, il faudra alors procéder à une installation de Shinken.
La procédure d'installation de Shinken est décrite dans la page de documentation dédiée: Guide d'installation et de mise à jour
Sur chaque carbon-relay
Installer Keepalived et ses dépendances sur tous les serveurs qui vont composer le cluster:
yum install keepalived |
Une fois l'installation terminé, il faut allé éditer le fichier de configuration de Keepalived
! Configuration File for keepalived
vrrp_instance NOM_DU_SERVEUR {
# Priorité utilisée lors de l'élection d'un nouveau maître. C'est la priorité la plus élevée qui gagne l'élection
priority 150
# ID du routeur virtuel. Doit être unique sur l'ensemble des noeuds
virtual_router_id 255
# Option qui a pour conséquence qu’un master qui renaît ne reprendra pas l’IP si son SLAVE l’a
nopreempt
# Interface d'écoute et d'échange des paquets multicast VRRP
interface enp0s3
# L'état de santé des cibles est vérifié toutes les 5 secondes
advert_int 5
# Interface réseau commune aux membres
virtual_ipaddress {
XXX.XXX.XXX.XXX/XX brd XXX.XXX.XXX.XXX dev enp0s3 scope global
}
} |
ATTENTION à modifier les informations suivantes :
! Configuration File for keepalived
vrrp_instance SRV01 {
priority 150
virtual_router_id 255
nopreempt
interface enp0s3
advert_int 5
virtual_ipaddress {
192.168.1.100/24 brd 192.168.1.255 dev enp0s3 scope global
}
} |
! Configuration File for keepalived
vrrp_instance SRV02 {
priority 100
virtual_router_id 255
nopreempt
interface enp0s3
advert_int 5
virtual_ipaddress {
192.168.1.100/24 brd 192.168.1.255 dev enp0s3 scope global
}
} |
Redémarrer Keepalived sur tous les serveurs du cluster en commençant par la maître :
systemctl restart keepalived |
Ainsi la commande "ip addr" devrait vous renvoyer l'ip courante et l'ip virtuelle précédemment créé :
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:20:4a:2f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.68/24 brd 192.168.1.255 scope global noprefixroute dynamic enp0s3
valid_lft 75921sec preferred_lft 75921sec
inet 192.168.1.100/24 brd 192.168.1.255 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe20:4a2f/64 scope link noprefixroute
valid_lft forever preferred_lft forever |
Une fois Shinken, Graphite et Keepalived installés, il faut procéder à la configuration de Graphite.
On commence par dire à Graphite qu'on utilise la fonctionnalité de relay via le fichier /opt/graphite/conf/carbon.conf (copier le fichier d'exemple carbon.conf.example si besoin).
Sur chaque carbon-relay
Dans la section "[relay]", on modifie la variable "DESTINATIONS" dans laquelle on décrit la liste des démons carbon-relay qui constituent le cluster Graphite.
[relay] ... <autres options> ... DESTINATIONS = adresse_carbon_cache_1:2004, adresse_carbon_cache_2:2004 |
On configure ensuite le relay pour lui spécifier les adresses des carbon-cache pour l'écriture et les adresses à utiliser pour la lecture des métriques.
Sur chaque carbon-relay
Cette configuration se fait via le fichier /opt/graphite/conf/relay-rules.conf (copier le fichier d'exemple relay-rules.conf.example si besoin):
[default] default = true destinations = adresse_carbon_cache_1:2004,adresse_carbon_cache_2:2004 read_destinations = adresse_carbon_cache_1:80,adresse_carbon_cache_2:80 |
Par défaut, l'installeur Shinken ne met pas en place de fichier d'init pour le démon carbon-relay. Pour pouvoir le démarrer en tant que service du système comme les autres démons, il va falloir mettre en place ce fichier.
Pour cela, copier le fichier suivant vers /etc/init.d/carbon-relay sur la machine qui va héberger le démon carbon-relay: carbon-relay
A la fin de cette étape de configuration, le relais est correctement configuré en ce qui concerne l'écriture des données. Pour la lecture des métriques, il faut encore autoriser la lecture des métriques, ce qui est l'objectif de l'étape suivante.
Par défaut, Graphite n'autorise la lecture des métriques seulement depuis une interface locale, pour des raisons de sécurité. Il faut alors sur chaque machine qui héberge un démon carbon-relay, modifier les réglages d'Apache pour autoriser la lecture sur des machines externes.
Sur chaque carbon-relay, on trouve dans le fichier /etc/httpd/conf.d/graphite.conf la ligne suivante:
<VirtualHost 127.0.0.1:80> |
Cette ligne permet de dire à Apache qu'il faut écouter les requêtes de lecture des métriques sur l'interface locale (127.0.0.1) et le port 80 seulement. Pour écouter ces requêtes sur toutes les interfaces réseau de la machine, on remplacera cette ligne par la suivante:
<VirtualHost *:80> |
On redémarre ensuite Apache pour prendre en compte les modifications:
# Sur CentOS 6 service httpd restart # Sur CentOS 7 systemctl restart httpd |
Comme vu dans la section présentant l'architecture qu'on est en train de mettre en place, le Broker, et en particulier son module Graphite-Perfdata, envoie ses informations au démon carbon-relay au lieu de les envoyer directement à un démon carbon-cache.
Il faut donc modifier la configuration de Shinken pour envoyer les métriques sur le démon carbon-relay.
Sur le serveur Shinken
Pour ca, on modifie la configuration du module Graphite-Perfdata dans le fichier /etc/shinken/modules/graphite.cfg:
#======== Graphite address ========= # host: graphite server address (ip or fqdn) host addresse_ip_virtuelle # port: tcp port of the graphite server port 2013 |
On change ici le port 2003 (port par défaut du carbon-cache) vers le port 2013 (port par défaut du carbon-relay).
Il faut également modifier les réglages de Shinken pour lui spécifier d'envoyer les requêtes de lecture des métriques sur le carbon-relay au lieu de les envoyer directement sur un démon carbon-cache.
Cette modification se fait directement dans les réglages du module WebUI, responsable de l'interface de Visualisation. Dans /etc/shinken/modules/webui.cfg, on modifie la section suivante:
[...] #======== Metrology access ========= # Multi-realm graphite parameter graphite_backends *:addresse_ip_virtuelle [...] |
A ce stade, la configuration de Graphite a été modifiée pour utiliser un démon carbon-relay. On a aussi effectué des modifications de configuration au niveau de Shinken pour prendre en compte ce changement d'architecture au niveau de Graphite.
La dernière étape est de redémarrer les différents démons pour prendre en compte ces changements de configuration.
On commence par stopper le démon carbon-cache sur le serveur shinken:
/etc/init.d/carbon-cache stop |
On démarrer le démon carbon-relay sur tous les serveurs composant le cluster:
/etc/init.d/carbon-relay start |
On redémarrer le démon carbon-cache sur tous les serveurs composant le cluster:
/etc/init.d/carbon-cache restart |
On redémarre ensuite l'Arbiter pour prendre en compte les modifications de configuration de Shinken:
/etc/init.d/shinken-arbiter restart |
La haute disponibilité de Graphite est donc gérée entièrement par Keepalived, puis Graphite s'occupe de la réplication des données entre les démons carbon-cache et de la lecture des données. Cette modification d'architecture est invisible pour les utilisateurs.