módulo de configuración de sincronización dinámica nginx nginx-upsync-module

 

Introducción a los escenarios de uso

En general, nginx puede configurarse directamente en sentido ascendente en el archivo de configuración para lograr el equilibrio de carga, pero este método tiene algunas limitaciones en algunos entornos específicos. Por ejemplo, cuando el nodo se ajusta dinámicamente en segundo plano; después de ajustar el nodo, no desea modificar el archivo de configuración y reiniciar nginx.

El archivo de configuración se puede migrar de nginx localmente a otros servicios de terceros, como etcd y consul, y luego sincronizarse con el archivo de configuración en tiempo real a través del módulo nginx-upsync-module para realizar una sincronización dinámica de nodos fuera de línea y fuera de línea con el configuración ascendente y luego se combina con ngx_healthcheck_module para lograr la verificación de estado del backend.

Puede migrar archivos de configuración de nginx localmente a otros servicios de terceros, como etcd y consul, y luego extraer la configuración localmente. Este artículo utiliza nginx-upsync-module, que admite principalmente cónsul y etcd Este artículo toma etcd como ejemplo.

0.etcd introducción

etcd es un sistema de almacenamiento de clave-valor distribuido de código abierto y alta disponibilidad desarrollado en lenguaje Go, que se puede utilizar para compartir configuraciones y registrar y descubrir servicios. Estos se utilizan para almacenar información de configuración sobre upstream en nginx.

2 números de puerto predeterminados utilizados por etcd: 2379 y 2380
2379: para comunicación con el cliente
2380: para comunicarse con pares en el clúster

Dirección del sitio web oficial

https://github.com/etcd-io/etcd/releases

1. Instale etcd (versión independiente)

#VERSION=3.4.20
#tar -zxvf  etcd-v${VERSION}-linux-amd64.tar.gz
#mv etcd-v${VERSION}-linux-amd64  /usr/local/etcd/
#echo 'export PATH=${PATH}:/usr/local/etcd/' >>/etc/profile
#source /etc/profile
#etcd --version
etcd Version: 3.4.20
Git SHA: 1e26823
Go Version: go1.16.15
Go OS/Arch: linux/amd64

2. empezar

nohup  /usr/local/etcd/etcd  \
--name='node1' \
--enable-v2='true' \
--data-dir='/usr/local/etcd/default.etcd' \
--listen-peer-urls='http://0.0.0.0:2380' \
--initial-advertise-peer-urls='http://0.0.0.0:2380' \
--advertise-client-urls='http://0.0.0.0:2379' \
--listen-client-urls='http://0.0.0.0:2379' > /usr/local/etcd/etcd.log  2>&1 &

3. Guión de generación

cat >/usr/local/etcd/start.sh<<EOF ; chmod o+x /usr/local/etcd/start.sh
#!/bin/bash
nohup  /usr/local/etcd/etcd  \
--name='node1' \
--enable-v2='true' \
--data-dir='/usr/local/etcd/default.etcd' \
--listen-peer-urls='http://0.0.0.0:2380' \
--initial-advertise-peer-urls='http://0.0.0.0:2380' \
--advertise-client-urls='http://0.0.0.0:2379' \
--listen-client-urls='http://0.0.0.0:2379' > /usr/local/etcd/etcd.log  2>&1 &
EOF
cat >/usr/local/etcd/stop.sh<<EOF ; chmod o+x /usr/local/etcd/stop.sh
#!/bin/bash
ps aux | grep etcd | grep -v "grep" | awk '{print $2}' | xargs kill > /dev/null 2>&1
EOF

4. instalación de nginx

Instale nginx e instale el módulo de detección de back-end de siete capas como ejemplo

安装七层后端检测模块
cd /root
git clone https://github.com/weibocom/nginx-upsync-module.git
git clone https://github.com/xiaokai-wang/nginx_upstream_check_module.git
rpm -qa | egrep "pcre|pcre-devel|openssl|openssl-devel|zlib|zlib-devel"
yum install  pcre pcre-devel  opessl  openssl-devel  zlib  zlib-devel -y
wget  http://nginx.org/download/nginx-1.16.0.tar.gz
tar xzvf nginx-1.16.0.tar.gz && cd nginx-1.16.0
#nginx安装补丁包
patch -p1 < /root/nginx_upstream_check_module-master/check_1.12.1+.patch
#nginx安装
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream \
--add-module=/root/nginx_upstream_check_module-master \
--add-module=/root/nginx-upsync-module
make && make install

5. Instrucciones de configuración

server {
        listen 80;
        …………
        location / {
        …………
        proxy_pass http://tomcat-cluster;
        }   
}
upstream tomcat-cluster {
server 127.0.0.1:11111;
upsync 127.0.0.1:2379/v2/keys/upstreams/test upsync_timeout=6m upsync_interval=500ms 	upsync_type=etcd strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/upstream.conf;
include /usr/local/nginx/conf/upstream.conf;
    …………
}

parámetro de sintaxis

servidor 127.0.0.1:11111; puerto virtual de trabajo upsync local

127.0.0.1:2379/v2/keys/upstreams/test, ruta de sincronización del servidor etcd

  • upsync_interval=6m; extrae el servidor de consul/etcd de vez en cuando
  • upsync_timeout=500ms, extraiga el tiempo de espera del servidor de la solicitud de consul/etcd.
  • upsync_type=etcd, del tipo de servidor de extracción: cónsul, etcd.
  • strong_dependency=off, si nginx extrae la configuración de consul/etcd cada vez que nginx se inicia o recarga, encendido, extrae

desactivado, no extraiga la configuración

  • upsync_dump_path /usr/local/nginx/conf/upstream.conf, ruta del archivo de configuración de almacenamiento síncrono
  • incluya /usr/local/nginx/conf/upstream.conf, cargue la ruta del archivo de configuración

configuración real final

http {
    server {
        listen 80;
        # status interface
        location /status {
        check_status;
        }
        # http front
        location / {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://tomcat-cluster;
       }   
    }
    upstream tomcat-cluster {
        server 127.0.0.1:11111;
        upsync 127.0.0.1:2379/v2/keys/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=etcd strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/upstream.conf;
        include /usr/local/nginx/conf/upstream.conf;
        check interval=3000 rise=2 fall=5 timeout=5000 type=http;
        check_http_send "GET / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
}

6. Iniciar el servicio

/usr/local/nginx/sbin/nginx

7. Agregar configuración al servicio de backend

Después de que el servicio web back-end esté en línea, debe agregar información de registro a etcd. Después de que la adición sea exitosa, nginx extraerá automáticamente la configuración de etcd, de modo que el servicio back-end se agregará automáticamente a la configuración cuando va en línea

El servicio web backend se ha lanzado recientemente

1. Aumente la sintaxis del nodo del servidor

curl -X PUT -d value="{"weight":1, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}" http://etcdip:etcdi
​p :puerto/v2/keys/dir1/dir1/upstream_name/backendip:backendi​p:backend_port

curl -X PUT -d value="{"weight":1, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}"  \
http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8080

El servicio web backend está recién desconectado

2. Eliminar el nodo de servicio

curl -X DELETE http://etcdip:etcdi​p:port/v2/keys/upstreams/upstreamname/upstreamn​ame/backend_ip:$backend_port

curl -X DELETE http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8086

3. Ajustar los parámetros del servicio

curl -X PUT -d value="{"weight":2, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}"  \
http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8082

4. Detección

curl http://etcdip:etcdi​p:port/v2/keys/upstreams/$upstream_name

curl  http://192.168.241.10:2379/v2/keys/upstreams/test

5. Ver el archivo de configuración en nginx

cat /usr/local/nginx/conf/upstream.conf

Qianfeng Education Introducción a Java Conjunto completo de tutoriales en video (tecnología central de Java, adecuada para la base cero de Java, necesaria para el autoaprendizaje de Java)

 

Supongo que te gusta

Origin blog.csdn.net/longz_org_cn/article/details/132223801
Recomendado
Clasificación