Maison > Article > Opération et maintenance > Comment implémenter la haute disponibilité Nginx dans un environnement de production
Préparation :
192.168.16.128
192.168.16.129
Deux machines virtuelles. Installez nginx
Installez nginx
Mettez à jour le fichier source yum :
rpm -ivh http://nginx.org/packages/centos/7/noarch/rpms/nginx-release-centos-7-0.el7.ngx.noarch.rpm wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-7.repo
Installez nginx :
yum -y install nginx
Commande d'opération :
systemctl start nginx; #启动nginx systemctl stop nginx; #停止nginx
Qu'est-ce que la haute disponibilité ?
La haute disponibilité (haute disponibilité) est l'un des facteurs qui doivent être pris en compte dans la conception de l'architecture d'un système distribué. Elle fait généralement référence à la réduction du temps pendant lequel le système ne peut pas fournir de services grâce à la conception. Si un système peut toujours fournir des services, alors la disponibilité est de 100 %, mais il existe des circonstances imprévues. Nous ne pouvons donc qu’essayer de réduire autant que possible les pannes de service.
Problème résolu ?
Dans les environnements de production, nginx est souvent utilisé comme proxy inverse pour fournir des services externes. Cependant, nginx rencontrera inévitablement un jour des pannes, comme une indisponibilité du serveur. Lorsque nginx tombe en panne, toutes les interfaces fournies en externe deviendront inaccessibles.
Bien que nous ne puissions pas garantir que le serveur soit disponible à 100%, nous devons trouver des moyens d'éviter cette tragédie. Aujourd'hui, nous utilisons keepalived pour atteindre la haute disponibilité de nginx
.
Solution de secours à chaud à double serveur
Cette solution est la solution à haute disponibilité la plus courante parmi les entreprises nationales. La secours à chaud à deux serveurs signifie en fait qu'un serveur fournit des services et que l'autre est une sauvegarde pour un certain service. . Lorsqu'un serveur est indisponible, un autre prend sa place.
Qu'est-ce que keepalive ? Le logiciel
keepalived a été initialement conçu pour le logiciel d'équilibrage de charge LVS afin de gérer et de surveiller l'état de chaque nœud de service dans le système de cluster LVS. Plus tard, vrrp (protocole de redondance de routeur virtuel, protocole de redondance de routeur virtuel) a été ajouté pour obtenir une haute disponibilité. protocole). Ainsi, en plus de pouvoir gérer le logiciel LVS, keepalived peut également être utilisé comme solution logicielle à haute disponibilité pour d'autres services (tels que : nginx, haproxy, mysql, etc.)
mécanisme de basculement
transfert de basculement entre les services de haute disponibilité keepalived, est implémenté via vrrp.
Lorsque le service keepalived fonctionne normalement, le nœud maître principal envoie en continu des messages de battement de cœur (multidiffusion) au nœud de sauvegarde pour indiquer au nœud de sauvegarde qu'il est toujours en vie. Lorsque le nœud maître principal tombe en panne, il ne peut pas envoyer de messages de battement de cœur. ., le nœud de secours ne peut plus détecter le battement de cœur du nœud maître, il appelle donc son propre programme de reprise pour prendre en charge les ressources et services IP du nœud maître. Lorsque le nœud maître principal est restauré, le nœud de sauvegarde libère les ressources IP et les services qu'il avait pris en charge lors de la panne du nœud principal et retrouve son rôle de sauvegarde d'origine.
Processus d'implémentation
Installez la méthode keepalived
yum pour installer directement, cette méthode installera automatiquement les dépendances :
yum -y install keepalived
Modifiez le fichier de configuration keepalived de l'hôte (192.168.16.128)
la méthode yum produira le fichier de configuration sous /etc/keepalived :
vi keepalived.conf
keepalived.conf:
#检测脚本 vrrp_script chk_http_port { script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动 interval 2 #(检测脚本执行的间隔,单位是秒) weight 2 #权重 } #vrrp 实例定义部分 vrrp_instance vi_1 { state master # 指定keepalived的角色,master为主,backup为备 interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡 virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 100 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) #授权访问 authentication { auth_type pass #设置验证类型和密码,master和backup必须使用相同的密码才能正常通信 auth_pass 1111 } track_script { chk_http_port #(调用检测脚本) } virtual_ipaddress { 192.168.16.130 # 定义虚拟ip(vip),可多设,每行一个 } }
virtual_ipaddress Vous pouvez y configurer VIP et accéder aux services en ligne via VIP.
L'interface doit être définie en fonction de la carte réseau du serveur. La méthode d'affichage habituelle est la configuration de l'authentification de l'adresse IP
L'autorisation d'accéder à la machine de sauvegarde nécessite également la même configuration
Modifier la configuration keepalive de la machine de sauvegarde (192.168.16.129). file
keepalived.conf:
#检测脚本 vrrp_script chk_http_port { script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动 interval 2 #(检测脚本执行的间隔) weight 2 #权重 } #vrrp 实例定义部分 vrrp_instance vi_1 { state backup # 指定keepalived的角色,master为主,backup为备 interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡 virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 99 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) #授权访问 authentication { auth_type pass #设置验证类型和密码,master和backup必须使用相同的密码才能正常通信 auth_pass 1111 } track_script { chk_http_port #(调用检测脚本) } virtual_ipaddress { 192.168.16.130 # 定义虚拟ip(vip),可多设,每行一个 } }
Script de détection :
#!/bin/bash #检测nginx是否启动了 a=`ps -c nginx --no-header |wc -l` if [ $a -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginx if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行vip转移 killall keepalived fi fi
Autorisation du script : chmod 775 check_nginx_pid.sh
Remarque : Le script doit être autorisé, sinon il n'aura pas l'autorisation d'accéder Ici, nous avons deux serveurs à exécuter. , vip(virtual_ipaddress:192.168.16.130),
Dans l'environnement de production, nous accédons aux services directement via VIP. vip(virtual_ipaddress:192.168.16.130),
我们在生产环境是直接通过vip来访问服务。
模拟nginx故障:
修改两个服务器默认访问的nginx的html页面作为区别。
首先访问192.168.16.130
,通过vip进行访问,页面显示192.168.16.128
;说明当前是主服务器提供的服务。
这个时候192.168.16.128
主服务器执行命令:
systemctl stop nginx; #停止nginx
再次访问vip(192.168.16.130
)发现这个时候页面显示的还是:192.168.16.128
,这是脚本里面自动重启。
现在直接将192.168.16.128
服务器关闭,在此访问vip(192.168.16.130
)现在发现页面显示192.168.16.129
这个时候keepalived
就自动故障转移了,一套企业级生产环境的高可用方案就搭建好了。
keepalived
192.168.16.130
et accédez-y via VIP. La page affiche 192.168.16.128
; indiquant qu'il s'agit actuellement d'un service fourni par le serveur principal. 🎜🎜A ce moment 192.168.16.128
le serveur principal exécute la commande : 🎜rrreee🎜Visitez à nouveau VIP (192.168.16.130
) et constatez que la page affiche toujours : 192.168.16.128
, il s'agit d'un redémarrage automatique dans le script. 🎜🎜Maintenant, fermez directement le serveur 192.168.16.128
, visitez VIP ici (192.168.16.130
) et constatez maintenant que la page affiche 192.168.16.129
à ce moment-là, keepalived
bascule automatiquement et une solution à haute disponibilité pour un environnement de production au niveau de l'entreprise est établie. 🎜🎜 Il existe de nombreuses fonctions dans keepalived
, comme les rappels par e-mail, etc., mais elles ne sont pas disponibles. Vous pouvez vous rendre sur le site officiel pour lire la documentation. 🎜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!