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:backendip: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:etcdip:port/v2/keys/upstreams/upstreamname/upstreamname/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:etcdip: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)