Maison >Opération et maintenance >Nginx >Comment atteindre une haute disponibilité en combinant keepalived avec nginx

Comment atteindre une haute disponibilité en combinant keepalived avec nginx

WBOY
WBOYavant
2023-05-15 21:07:121415parcourir

1. Introduction

keepalived est une solution haute disponibilité pour les services lvs basée sur le protocole vrrp, qui peut être utilisée pour éviter les points de défaillance uniques. Un service LVS aura deux serveurs exécutant keepalived, un comme serveur principal (maître) et un comme serveur de sauvegarde (sauvegarde), mais il apparaîtra comme une adresse IP virtuelle pour le monde extérieur. Le serveur principal enverra des messages spécifiques au serveur. serveur de sauvegarde. Lorsque le serveur de sauvegarde Lorsque le serveur ne peut pas recevoir ce message, c'est-à-dire lorsque le serveur principal tombe en panne, le serveur de sauvegarde reprendra l'adresse IP virtuelle et continuera à fournir des services, garantissant ainsi une haute disponibilité. Keepalived est l'implémentation parfaite de vrrp, donc avant d'introduire keepalived, introduisons d'abord le principe de vrrp.

Introduction au protocole 1.vrrp

Dans un environnement réseau réel, deux hôtes qui ont besoin de communiquer n'ont pas de connexion physique directe dans la plupart des cas. Dans une telle situation, comment choisir l’itinéraire entre eux ? Comment l'hôte sélectionne-t-il la route du saut suivant vers l'hôte de destination ? Il existe deux solutions courantes à ce problème :

  1. Utiliser des protocoles de routage dynamique (rip, ospf, etc.) sur l'hôte

  2. Configurer le routage statique sur l'hôte

Évidemment, configurer le routage dynamique sur l'hôte est très peu pratique en raison de nombreux problèmes tels que les coûts de gestion et de maintenance et sa prise en charge. La configuration de routes statiques est devenue très populaire, mais le routeur (ou la passerelle par défaut) devient souvent un point de défaillance unique. Le but de vrrp est de résoudre le problème du point de défaillance unique du routage statique. vrrp utilise un protocole d'élection pour attribuer dynamiquement des tâches de routage à un certain routeur vrrp parmi les routeurs virtuels du réseau local.

2.mécanisme de fonctionnement vrrp

Dans un routeur virtuel vrrp, il existe plusieurs routeurs vrrp physiques, mais ces plusieurs machines physiques ne peuvent pas fonctionner en même temps, mais celle appelée maître est responsable du travail de routage, tout le reste est une sauvegarde , le maître n'est pas statique, vrrp permet à chaque routeur vrrp de participer à l'élection, et le maître est le vainqueur final. Le maître dispose de certains privilèges, par exemple, il possède l'adresse IP du routeur virtuel. Notre hôte utilise cette adresse IP comme route statique. Le maître privilégié est responsable du transfert des paquets envoyés à l'adresse de la passerelle et de la réponse aux requêtes arp.

vrrp implémente la fonction d'un routeur virtuel via le protocole d'élection. Tous les messages du protocole sont envoyés sous forme de paquets IP multicast (multicast) (adresse multicast 224.0.0.18). Un routeur virtuel se compose d'un vrid (plage 0-255) et d'un ensemble d'adresses IP, qui apparaissent au monde extérieur comme une adresse Mac bien connue. Par conséquent, dans un routeur virtuel, peu importe qui est le maître, le Mac et l'IP externes sont les mêmes (appelés VIP). L'hôte client n'a pas besoin de modifier sa configuration de routage en raison des changements du maître. Pour le client, cette commutation maître-esclave est transparente.

Dans un routeur virtuel, seul le routeur vrrp en tant que maître enverra toujours des messages de notification vrrp (messages de publicité vrrp), et la sauvegarde ne préemptera pas le maître à moins que sa priorité ne soit plus élevée. Lorsque le maître n'est pas disponible (la sauvegarde ne peut pas recevoir d'informations de notification), celle ayant la priorité la plus élevée parmi plusieurs sauvegardes sera préemptée pour devenir le maître. Cette préemption est très rapide (

3.vrrp workflow

(1).Initialisation :

Lorsque le routeur démarre, si la priorité du routeur est 255 (la priorité la plus élevée, le routeur a l'adresse du routeur), les informations de notification vrrp doivent être envoyé et diffusez les informations arp pour notifier l'adresse MAC correspondant à l'adresse IP du routeur en tant que MAC virtuel de routage. Réglez le minuteur des informations de notification pour vous préparer à envoyer régulièrement les informations de notification vrrp et passez à l'état maître, sinon, entrez dans l'état de sauvegarde ; Réglez la minuterie pour vérifier régulièrement si les informations de notification du maître sont reçues.

(2).master

  1. Définissez le minuteur de notification programmé ;

  2. Utilisez l'adresse MAC virtuelle vrrp pour répondre à la requête arp de l'adresse IP du routeur ;

  3. Transférez le paquet dont le Mac de destination est ; le mac virtuel vrrp ;

  4. Si vous êtes le propriétaire de l'IP du routeur virtuel, vous accepterez le paquet de données dont l'adresse de destination est l'IP du routeur virtuel, sinon supprimez-le

  5. Lors de la réception de l'événement d'arrêt, supprimez-le ; le minuteur de notification programmé et la priorité d'envoi est de 0 paquet de notification, passez à l'état d'initialisation ;

  6. Si le délai de notification programmé expire, envoyez les informations de notification vrrp ; est 0, envoyez des informations de notification vrrp ; sinon, jugez les données si la priorité est supérieure à celle locale, ou égale et que l'adresse IP réelle est supérieure à l'adresse IP réelle locale, définissez le minuteur de notification programmé, réinitialisez le minuteur d'expiration de l'hôte, et passez à l'état de sauvegarde ; sinon, supprimez le paquet de notification ;

  7. (3 ).backup

Définissez le délai d'expiration de l'hôte

  1. Impossible de répondre aux informations de demande arp pour l'IP du routeur virtuel ;

  2. Rejetez tous les paquets dont l'adresse MAC de destination est l'adresse MAC du routeur virtuel ;

  3. N'acceptez pas tous les paquets de données destinés à l'adresse IP du routeur virtuel 

  4. Lors de la réception d'un événement d'arrêt, supprimez le délai d'attente de l'hôte et passer à l'état d'initialisation ;
  5. Lorsque le délai d'attente de l'hôte expire, il envoie des informations de notification vrrp, diffuse des informations sur l'adresse arp et passe à l'état maître

  6. Lors de la réception des informations de notification vrrp, si la priorité est 0, cela signifie entrer le élection du maître ; sinon, les données sont jugées si la priorité est supérieure à celle de la machine locale, si elle est élevée, le maître est reconnu comme valide et le délai d'attente de l'hôte est réinitialisé ; sinon, le paquet de notification est rejeté ;

    4.arp traitement des requêtes

Lorsque l'hôte interne interroge la machine virtuelle via arp Lorsque l'adresse IP du routeur correspond à l'adresse mac, l'adresse mac renvoyée par le routeur maître est l'adresse mac du vrrp virtuel, pas le mac Adresse de la carte réseau réelle, de sorte que la machine réseau interne ne puisse pas la détecter lorsque le routeur bascule et lorsque le routeur redémarre, ne puisse pas envoyer activement l'adresse MAC réelle de la carte réseau locale. Si la fonction proxy arp (proxy_arp) est activée sur le routeur virtuel, la réponse arp du proxy répond également à l'adresse MAC virtuelle vrrp.

2. Créez l'environnement

1. Serveur 1 : 10.63.0.154 Installez keeplived et définissez la valeur de priorité sur 1002. Serveur 2 : 10.63.0.155 Installez keeplived et définissez la valeur de priorité sur 98
3. Paramétrage Les IP virtuelles correspondant aux deux serveurs sont : 10.63.0.158


3. Installez le nœud maître keepalived

Cette installation de keepalived adopte le mode yum et s'installe sur le serveur 1. Les principales étapes sont les suivantes :

1. Installation ipvsadm, commande : yum install ipvsadm, une fois l'installation terminée, vous pouvez vérifier le numéro de version via la commande ipvsadm –v.

2. Installez keepalived, commande : yum install keepalived Une fois l'installation terminée, vous pouvez vérifier le numéro de version via la commande keepalived –v.
3. Créez le script /usr/local/nginx/nginx_check.sh. Le contenu du script est le suivant :

#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
a=`ps -c nginx --no-header |wc -l`
if [ $a -eq 0 ];then 
 /usr/sbin/nginx
 sleep 2
 if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

Définissez les autorisations nginx_check.sh. La commande de configuration est : chmod 777 /usr/local/nginx/nginx_check.sh

4. /etc/keepalived/keepalived conf. Le fichier de configuration Keepalived.conf est le suivant :

! configuration file for keepalived

global_defs {
 router_id nginx_master154
}

vrrp_script chk_nginx {
 script "/usr/local/nginx/nginx_check.sh"
 interval 2
 weight 20
}
vrrp_instance vi_1 {
 state master
 interface eth0
 virtual_router_id 154
 mcast_src_ip 10.63.0.154
 priority 100
 nopreempt
 advert_int 1
 authentication {
  auth_type pass
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  10.63.0.158
 }
}
}

Fichier de configuration Description du paramètre clé :


router_id // Définir les noms de nœuds

  1. vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" Internet Al 2 poids -20 } //Exécutez le script /etc/keepalived/nginx_check.sh toutes les 2 secondes. Cette vérification a été effectuée depuis le début, et le poids -20 signifie que lorsque le script est exécuté pour déterminer une exception. , la priorité de ce nœud 10.63.0.154 est réduite de 20.

  2. state master //Indique que le rôle de nœud est défini comme master

  3. virtual_router_id 154 //Définissez l'identification du nœud virtuel

  4. interface eth0 //Définissez le nom de la carte réseau pour afficher le nom de la carte réseau du serveur via la commande : ifconfig ou ip a, comme indiqué sur la figure :

Une fois le fichier de configuration ci-dessus terminé, démarrez nginx et démarrez keepalived pour tester si nginx est accessible par l'adresse IP virtuelle. Démarrez la commande keepalived : systemctl start keepalived.service. Après le démarrage, vous pouvez vérifier l'état via la commande systemctl status keepalived.service. La capture d'écran de l'interface principale de nginx utilisant l'IP virtuelle est la suivante :

Comment atteindre une haute disponibilité en combinant keepalived avec nginx

3. Installez le nœud de sauvegarde keepalived Comment atteindre une haute disponibilité en combinant keepalived avec nginx

La méthode d'installation de keepalived sur le serveur 2 est exactement la même que celle sur le serveur 1. Seulement trois modifications sont nécessaires dans le fichier de configuration keepalived.conf. Place :

interface eth0 // Définir le nom de la carte réseau pour visualiser la carte réseau du serveur 2. Si le nom de la carte réseau est eno24, il est défini comme : interface eno24

  1. priority //La valeur de priorité est définie sur 98

  2. mcast_src_ip 10.63 0.155

  3. Après la réussite de l'installation de keepalived sur les deux serveurs, le test d'appel via l'ip virtuel 10.63.0.158 a révélé que c'était toujours la page du nœud principal et la page du nœud de sauvegarde ne serait pas appelée. Après avoir configuré keepalived sur le serveur 1 et l'avoir rappelé, l'interface principale du nœud de veille apparaîtra, comme indiqué ci-dessous :

4 L'outil de gestion des services Linux systemctlComment atteindre une haute disponibilité en combinant keepalived avec nginx

Sous Linux, il existe deux commandes. : services de gestion service et chkconfig. systemctl est le principal outil de gestion des services. Il intègre les fonctions chkconfig et de service. (Vous pouvez utiliser cette commande pour gérer le logiciel d'installation yum et définir s'il doit démarrer au démarrage)

systemctl is-enabled servicename.service #Demander si le service est démarré au démarrage

  1. systemctl activate *.service # Exécutez le service au démarrage

  2. systemctl désactiver *.service #Annuler l'opération de démarrage

  3. systemctl start *.service #Start service

  4. systemctl stop *.service #Stop service

  5. systemctl restart *.service #重启服务

  6. systemctl reload *.service #重新加载服务配置文件

  7. systemctl status *.service #查询服务运行状态

  8. systemctl --failed #显示启动失败的服务

注:*代表某个服务的名字,如http的服务名为httpd

例如在centos 7 上安装http

[root@centos7 ~]# yum -y install httpd

启动服务(等同于service httpd start)  systemctl start httpd.service
停止服务(等同于service httpd stop)  systemctl stop httpd.service
重启服务(等同于service httpd restart) systemctl restart httpd.service
查看服务是否运行(等同于service httpd status) systemctl status httpd.service 开机自启动服务(等同于chkconfig httpd on)  systemctl enable httpd.service
开机时禁用服务(等同于chkconfig httpd on) systemctl disable httpd.service

ps -ef | grep nginx #查看服务进程

#非systemctl配置开机启动:chmod +x /etc/rc.d/rc.local
#打开rc.localvi /etc/rc.local
#加入启动脚本其中路径一定要用全路径如:/usr/local/nginx/sbin/nginx

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer