Basado Keepalived lograr la transferencia de VIP, LVS, nginx alta disponibilidad
soluciones de clúster de alta disponibilidad A, Keepalived
Dos, VRRP máquina de estados finitos
En tercer lugar, el uso Keepalived lograr la transición de la VIP
En cuarto lugar, poner en práctica de notificaciones personalizadas cuando las transiciones de estado,
En quinto lugar, para lograr el equilibrio de carga
Seis: Nginx lograr una alta disponibilidad
soluciones de clúster de alta disponibilidad A, Keepalived
Los IPVS nacimiento originales para proporcionar alta disponibilidad, después de recibir la información que el nodo maestro en el extremo posterior RealServer, keepalived puede llamar a sus propias reglas de generación de comandos ipvsadm, puede automáticamente, así como el principal nodo de VIP IPVS reglas "hacerse cargo" aplicación desde el nodo, continuar al servicio al cliente. También permitirá al estado de salud del back-end RealServer hacer las pruebas.
Después de keepalived inicio en un nodo, generará un proceso principal Maestro, el proceso principal generará dos sub-procesos, que son VRRP Stack (lograr protocolo VRRP) Checkers (Health Check IPVS RealServer detección de back-end)
Dos, VRRP máquina de estados finitos
Después de que ambos lados nodos VRRP han comenzado a poner en práctica las transiciones de estado, sólo comenzó cuando el estado inicial es BACKUP, a continuación, enviar una notificación a otros nodos, así como su información de prioridad, que una alta prioridad, se convierte en MAESTRO, de otro modo, o de respaldo, esta vez en el estado para iniciar el servicio en el nodo maestro, proporcionan servicios para los usuarios, si el nodo colgó, luego se convierte en BACKUP, la prioridad es reducido, convertido a otro maestro de nodo, el aumento de la prioridad , el servicio se inicia en este nodo, VIP, VMAC serán transferidos al nodo, proporcionando servicios a los usuarios,
entorno experimental:
Alojamiento Web Versión:
CentOS6.4-i686
Dos nodos:
node1.limian.com 172.16.6.1
node2.limian.com 172.16.6.10
listo
1, un nodo:
Sincronización de tiempo:
[Root @ nodo1 ~] # ntpdate 172.16.0.1
instalación keepalived
[Root @ nodo1 ~] # yum -y install Keepalived
2, dos nodos hacen el mismo trabajo
En tercer lugar, el uso Keepalived lograr la transición de la VIP
3.1 las modificaciones del archivo de configuración keepalived:
[Root @ nodo1 ~] # cd / etc / keepalived / [root @ nodo1 keepalived] # cp keepalived.conf keepalived.conf.back // dan la vuelta fichero de configuración por lo que [root @ nodo1 keepalived] # vim keepalived.conf
3.2 Escenario Global
{global_defs notification_email {// definición de servicio de correo de root @ localhost // define el destinatario, a la máquina en este documento, pero usos de prueba } notification_email_from kaadmin @ // localhost definido emisor, servidor de correo smtp_server definido // 127.0.0.1 , no debe utilizar la dirección externa smtp_connect_timeout 30 // tiempo de espera de la ROUTER_ID del LVS_DEVEL }
3.3 Definición de la etapa vrrp
vrrp_instance VI_1 {// definición de encaminamiento virtual, VI_1 identificador de ruta virtual, el nombre de su propia definición de la MAESTRO estado // abierta, la prioridad del nodo es una prioridad mayor que otro nodo, el estado señor en interfaz eth0 // Todas las notificaciones y otra información de esta interfaz eth0 cabo virtual_router_id 7 // ID del encaminamiento virtual, y esto virtual MAC ID también es la fuente del último párrafo, este número ID es generalmente no mayor de 255, y el ID de ser contrarios prioridad 100 // prioridad inicial número advert_int 1 // anunciado autenticación {// mecanismo de autenticación auth_type PASS // tipo de autenticación auth_pass 1111 // contraseña, una serie de caracteres aleatorios deberían } virtual_ipaddress {// dirección virtual, es decir, el VIP 172.16.6.100 } }
Nos archivo de configuración de nodo maestro se modifica Bueno, tiene que copiar desde un nodo, haga lo apropiado cambia listo para su uso
[Root @ nodo1 keepalived] # scp keepalived.conf 172.16.6.1:/etc/keepalived/
3,4 sesión en el nodo;
[Nodo2 la raíz @ ~] # cd / etc / keepalived / [la raíz @ nodo2 keepalived] # Vim keepalived.conf vrrp_instance VI_1 { Estado // modificar el estado de copia de seguridad desde el nodo, el nodo maestro al maestro, es el nodo desde el BACKUP interfaz eth0 virtual_router_id . 7 prioridad 99 // modificar la prioridad, la atención prioritaria debe ser menor que el nodo maestro es el nodo advert_int. 1 autentificación { AUTH_TYPE el PASS AUTH_PASS 1111 } virtual_ipaddress { 172.16.6.100 } }
3.5 el nodo maestro a continuación, iniciar el servicio
[Root @ nodo1 keepalived] # servicio Keepalived de inicio [root @ nodo1 ~] # ip addr Mostrar // Consulte nuestra definición VIP
3.6 Desde el principio el nodo de servicio
[Root @ nodo2 keepalived] # servicio Keepalived empezar
El servicio en el nodo primario se detuvo, VIP no se parecerá al nodo
[Root @ nodo2 ~] # ip addr espectáculo
3.7 iniciar el servicio en el nodo principal
[La raíz @ nodo1 ~] # Puesta en servicio Keepalived [la raíz @ nodo1 ~] // # show ip addr encontró resultado de la detección VIP transfiere al nodo maestro
nota:
Por el trabajo ARRP por defecto en "modo preventivo", si se encuentra un servicio de paradas de nodos, otro nodo inmediatamente VIP y VMAC "apoderarse de ella", si bajo el "modo no preferente", si su prioridad demasiado alta, parar un nodo de servicio, otro nodo no VIP "agarrar" y VMAC, a menos que este nodo colgó, los dos nodos se "agarre".
En cuarto lugar, poner en práctica de notificaciones personalizadas cuando las transiciones de estado,
4.1 Esta necesidad de depender de un script para completa
El nodo maestro
[root @ nodo1 ~] # cd / etc / keepalived / [root @ nodo1 keepalived] # vim notify.sh //编写脚本 #! / bin / bash vip = 172.16.6.100 contacto = 'root @ localhost' thisip = `ifconfig eth0 | awk '/ inet addr: / {print $ 2}' | awk -F: '{print $ 2}' ` Notify () { mailsubject = "$ thisip es bi maestro $ vip" cuerpo del correo = "transacción vrrp, vip $ flotaba a $ thisip" echo $ cuerpo del correo | -S mail "$ mailsubject" $ contactos } case "$ 1" en el maestro) notificar maestro de salida 0 ;; copia de seguridad) notificar copia de seguridad de salida 0 ;; *) Echo 'Uso: `basename $ 0` {maestro | copia de seguridad | culpa}' la salida 1 ;; esac [root @ nodo1 keepalived] # chmod + x notify.sh [root @ nodo1 keepalived] # ./notify.sh maestro [root @ nodo1 keepalived] # // electrónico查看有没有收到通知 versión de la herencia de correo 12.4 7/29 / 08. Tipo ? en busca de ayuda. "/ var / spool / mail / root": 1 Mensaje 1 new > N1 raíz Mié Sep 25 de 14:54 18/668 "172.16.6.10 es bi 172.16.6.100 mas" y
Compruebe si se le notificará al estado de transición
[root @ nodo1 keepalived] copia de seguridad # ./notify.sh [root @ nodo1 keepalived] culpa # ./notify.sh [root @ nodo1 keepalived] # electrónico de la herencia Mail versión 12.4 07/29/08. Tipo ? en busca de ayuda. "/ var / spool / mail / root": 3 mensajes 2 nuevo 1 raíz Mie 25 sep 14:54 19/679 "172.16.6.10 es bi 172.16.6.100 mas" > N 2 raíz Mie 25 sep 14:57 18 / 668 "172.16.6.10 es bi 172.16.6.100 mas" N 3 raíz mié Sep 25 14:57 18/668 "172.16.6.10 es bi 172.16.6.100 mas" y
Descripción del script para el trabajo, y luego ir a editar el archivo de configuración
[Root @ nodo1 keepalived] # vim keepalived.conf
Añadir en el escenario global
vrrp_script chk_mantaince_down {// script de control manual puede definir una secuencia de comandos "[[-f / etc / keepalived / Abajo]] && salida salida. 1 || 0" intervalo El intervalo de tiempo. 1 // Comprobar peso -2 // Si la prueba falla, prioridad de -2 }
Añadir las siguientes líneas en fase vrrp
track_script {//引用定义的脚本 chk_mantaince_down } notify_master "maestro /etc/keepalived/notify.sh" notify_backup "copia de seguridad /etc/keepalived/notify.sh" notify_fault "culpa /etc/keepalived/notify.sh"
4.2 copiar el script a otro nodo,
[Root @ nodo1 keepalived] # scp notify.sh 172.16.6.1:/etc/keepalived/
Y una posición correspondiente a los mismos contenidos se añade en el archivo de configuración
Ambos nodos para reiniciar el servicio
4.3 Que el nodo maestro se convierte en un nodo esclavo
root @ nodo1 keepalived] # anulada
Mediante la supervisión, encontró que inmediatamente se convierte en el nodo principal del nodo, y recibir un correo electrónico
[root @ nodo1 keepalived] # tail -f / var / log / messages Tiene correo nuevo en / var / spool / mail / root
En quinto lugar, para lograr el equilibrio de carga
5.1 editar el archivo de configuración
[Root @ nodo1 keepalived] # vim keepalived.conf ##### balanceo de carga fase ################# virtual_server 172.16.6.100 80 {// especificar el VIP y el puerto delay_loop 6 // cuántos ciclos de reinicio retrasado el servicio, el servicio haciendo la detección lb_algo rr LoadBalance algoritmo de equilibrio de carga lb_kind DR tipos nat_mask 255.255.0.0 máscara persistence_timeout 0 tiempo de conexión persistente protocolo TCP // protocolo real_server 172.16.6.11 80 {// definición de la parte trasera atributo RealServer peso. 1 HTTP_GET {// define método de URL url {// detectado ruta / código de estado status_code resultado 200 se adquiere // } connect_timeout el tiempo de conexión. 3 // nb_get_retry 3 // intentos delay_before_retry 3 // espera antes de intentar cada conexión } } real_server 172.16.6.12 80 {// atributos definidos en el RealServer extremo trasero de peso. 1 HTTP_GET {// definición de métodos de detección de url {// detectado la URL ruta / status_code // 200 es código de estado de resultado adquisición } connect_timeout el tiempo de conexión. 3 // nb_get_retry 3 // intentos delay_before_retry 3 // espera antes de intentar cada conexión } } }
5.2, en el nodo de hacer la misma modificación
5.3 reinicio del servicio genera y detecta si las reglas con ipvsadm comando
[root @ nodo1 keepalived] # servicio de reinicio keepalived [root @ nodo1 keepalived] # ipvsadm -L -n IP versión 1.2.1 del servidor virtual (tamaño = 4096) Prot LocalAddress: Puerto Programador Banderas -> RemoteAddress: Port Forward Peso activeconn InActConn TCP 172.16.6.100:80 rr [root @ nodo1 keepalived] #
Pero ¿por qué no hay dos RealServer lo definimos? Esto se debe a que no se ha iniciado la máquina virtual, control de salud no fue aprobada, no se mostrará, fuimos a iniciar una máquina virtual, e iniciar el servicio.
Y ejecutar el siguiente comando, hacer LVS balanceo de carga modelo DR
#ifconfig lo: 0 172.16.6.11 172.16.6.11 emisión máscara de red 255.255.255.255 hasta #route complemento -Casa de 172.16.6.11 dev lo: 0 #echo 1> / proc / sys / net / ipv4 / conf / lo / arp_ignore #echo 1 > / proc / sys / net / ipv4 / conf / all / arp_ignore #echo 2> / proc / sys / net / ipv4 / conf / all / arp_announce #echo 2> / proc / sys / net / ipv4 / conf / lo / arp_announce
nota:
1, el número RealServer final múltiple trasera se puede añadir, sin embargo, necesita el archivo de configuración apropiado en la configuración en el nodo maestro, y ejecuta los comandos relacionados para añadir RealServer
2, aunque IPVS Keepalived pueden añadir sus propias reglas, balanceo de carga, pero no pueden alcanzar estática y dinámica de separación, en un entorno de producción que tienen que elegir la mejor solución de acuerdo con la escena.
Seis: Nginx lograr una alta disponibilidad
6.1 precondición
En ambos nodos instalados servicio de nginx, y asegúrese de que no está habilitado httpd
# Netstat -tunlp // Asegúrese de que el puerto 80 no está ocupado
# Nginx servicio se inicia
6.2 editar nginx cada página de un nodo, con el fin de efecto más intuitivo
[Root @ nodo1 ~] # vim /usr/share/nginx/html/index.html // nodo. 1 172.16.6.10 [nodo2 la raíz @ ~] // nodo # Vim /usr/share/nginx/html/index.html 2 172.16.6.1
6.3 Nginx garantizar el acceso normal
6.4 luego se detuvo el servicio,
[Root @ nodo1 keepalived] # vim notify.sh // modificar la secuencia de comandos, puede supervisar el servicio nginx, y se puede activar o desactivar el servicio ################## Caso "$ 1 "en el Master) el maestro Notificar /etc/rc.d/init.d/nginx de inicio de salida 0 ;; copia de seguridad) de la copia de seguridad Notificar /etc/rc.d/init.d/nginx PARADA salida 0 ;; Fallo) Notify Falla / etc PARADA /rc.d/init.d/nginx salida 0 ;; ################################### ###
guión 6,5 sincronización al nodo 2
[Root @ nodo1 keepalived] # scp notify.sh 172.16.6.1:/etc/keepalived/
6.6 el nodo primario
[Root @ nodo1 keepalived] # Touch Down [root @ nodo1 keepalived] #SS -tunl encontró 80 // puerto no está escuchando [root @ nodo1 keepalived] # rm -f Abajo [root @ nodo1 keepalived] #SS -tunl // 80 puerto se ha encontrado que escucha