Linux Docker中APISIX集群部署【珍藏版】

这篇具有很好参考价值的文章主要介绍了Linux Docker中APISIX集群部署【珍藏版】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 集群架构

集群流程如下图所示:
Linux Docker中APISIX集群部署【珍藏版】

2 基础环境

部署的系统为AlmaLinux,docker版本为23.0.1,docker-compose版本为v2.2.0,apisix版本为3.0.0。

服务器IP 需安装服务(红色为必装服务) 备注
176.16.108.113 dockerdocker-compose、apisix(apisixdashboardetcd、prometheus、grafana、nginx)、nginxkeepalived 服务节点1
176.16.108.114 dockerdocker-compose、apisix(apisixdashboardetcd、prometheus、grafana、nginx)、nginxkeepalived 服务节点2
176.16.108.115 - 虚拟ip

3 搭建ETCD集群

3.1 etcd简介

etcd是一个分布式的、可靠的key-value存储系统,它用于存储分布式系统中的关键数据。apisix采用etcd保存和同步配置信息。

3.2 创建etcd-cluster-compose.yml

在home目录下创建etcd-node目录,用于存放etcd集群配置文件。服务器节点1和服务器节点2均需要执行如下操作:

[root@s113 home]# cd /home/
[root@s113 home]# mkdir etcd-node
[root@s113 home]# cd etcd-node/
[root@s113 etcd-node]# touch etcd-cluster-compose.yml
[root@s113 etcd-node]# vim etcd-cluster-compose.yml

服务器节点1 etcd集群配置

version: '3'
services:
  etcd:
    image: bitnami/etcd:3.4.15
    restart: always
    volumes:
      - /home/etcd-node/data:/bitnami/etcd
    environment:
      ETCD_NAME: "etcd1"
      ETCD_ENABLE_V2: "true"
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: "http://176.16.108.113:2379"
      ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://176.16.108.113:2380"
      ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
      ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
      ETCD_INITIAL_CLUSTER_STATE: "new"
      ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
      ETCD_INITIAL_CLUSTER: "etcd1=http://176.16.108.113:2380,etcd2=http://176.16.108.114:2380"
      ETCD_DATA_DIR: "/var/lib/etcd"
    ports:
       - "2379:2379/tcp"
       - "2380:2380/tcp"
    networks:
      apisix:

networks:
  apisix:
    driver: bridge      

volumes:
  etcd_data:
    driver: local

服务器节点2 etcd集群配置

version: '3'
services:
  etcd:
    image: bitnami/etcd:3.4.15
    restart: always
    volumes:
      - /home/etcd-node/data:/bitnami/etcd
    environment:
      ETCD_NAME: "etcd2"
      ETCD_ENABLE_V2: "true"
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: "http://176.16.108.114:2379"
      ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://176.16.108.114:2380"
      ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
      ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
      ETCD_INITIAL_CLUSTER_STATE: "new"
      ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
      ETCD_INITIAL_CLUSTER: "etcd1=http://176.16.108.113:2380,etcd2=http://176.16.108.114:2380"
      ETCD_DATA_DIR: "/var/lib/etcd"
    ports:
       - "2379:2379/tcp"
       - "2380:2380/tcp"
    networks: 
      apisix:

networks:
  apisix:
    driver: bridge

volumes:
  etcd_data:
    driver: local

参数详细
ETCD_NAME:设置成员节点的别名,建议为每个成员节点配置可识别的命名。
ETCD_ADVERTISE_CLIENT_URLS:广播到集群中本成员的监听客户端请求的地址。
ETCD_INITIAL_ADVERTISE_PEER_URLS:广播到集群中本成员的Peer监听通信地址。
ETCD_LISTEN_CLIENT_URLS:客户端请求的监听地址列表。
ETCD_LISTEN_PEER_URLS:Peer消息的监听服务地址列表。
ETCD_INITIAL_CLUSTER_TOKEN:启动集群的时候指定集群口令,只有相同token的几点才能加入到同一集群。
ETCD_INITIAL_CLUSTER:所有集群节点的地址列表。
ETCD_INITIAL_CLUSTER_STATE:初始化集群状态,默认为new,也可以指定为existing表示要加入到一个已有集群。

3.3 启动并验证集群

在/home/etcd-node目录下执行指令,服务器节点1和服务器节点2均需要执行如下操作:

[root@s113 etcd-node]# docker-compose -f etcd-cluster-compose.yml up -d

Linux Docker中APISIX集群部署【珍藏版】

[root@s114 etcd-node]# docker-compose -f etcd-cluster-compose.yml up -d

Linux Docker中APISIX集群部署【珍藏版】

[root@s113 etcd-node]# docker ps

Linux Docker中APISIX集群部署【珍藏版】

[root@s114 etcd-node]# docker ps

Linux Docker中APISIX集群部署【珍藏版】
通过上面指令的执行结果,看出两台服务器节点上的etcd已经在docker中成功运行起来了。

查看集群
在服务器节点1上执行

[root@s113 etcd-node]# docker exec -it a8b536f1163c bash
I have no name!@a8b536f1163c:/opt/bitnami/etcd$ etcdctl member list
175f9081790c5dee, started, etcd1, http://176.16.108.113:2380, http://176.16.108.113:2379, false
5eefe34a545763d9, started, etcd2, http://176.16.108.114:2380, http://176.16.108.114:2379, false
I have no name!@a8b536f1163c:/opt/bitnami/etcd$ 

在服务器节点2上执行

[root@s114 etcd-node]# docker exec -it b5cef18d3687 bash
I have no name!@b5cef18d3687:/opt/bitnami/etcd$ etcdctl member list
175f9081790c5dee, started, etcd1, http://176.16.108.113:2380, http://176.16.108.113:2379, false
5eefe34a545763d9, started, etcd2, http://176.16.108.114:2380, http://176.16.108.114:2379, false
I have no name!@b5cef18d3687:/opt/bitnami/etcd$

进入etcd容器内部查看节点集群情况,看到两个节点都存在,就说明etcd集群成功了。

4 搭建APISIX集群

4.1 下载apisix-docker

下载地址为:https://github.com/apache/apisix-docker/tree/release/apisix-3.0.0
Linux Docker中APISIX集群部署【珍藏版】
Linux Docker中APISIX集群部署【珍藏版】

4.2 上传apisix-docker.zip至两台服务器节点

上传apisix-docker-apisix-3.0.0.zip至/home目录,并解压重命名为apisix-docker。

[root@s113 home]# rz
[root@s113 home]# unzip apisix-docker-apisix-3.0.0.zip
[root@s113 home]# mv apisix-docker-release-apisix-3.0.0 apisix-docker

Linux Docker中APISIX集群部署【珍藏版】

[root@s114 home]# rz
[root@s114 home]# unzip apisix-docker-apisix-3.0.0.zip
[root@s114 home]# mv apisix-docker-release-apisix-3.0.0 apisix-docker

Linux Docker中APISIX集群部署【珍藏版】

4.3 修改docker-compose.yml

由于etcd集群在安装apisix集群之前就已经安装好了,所以在这里的docker-compose.yml中就不需要再配置了,可以选择删除或者注释。
apisix镜像apisix-jdk11:latest是通过自定义插件重新生成的镜像,内嵌apisix镜像为apisix:3.0.0-centos。这里的apisix镜像可以不改,或者改为apisix:3.0.0-centos。
Linux Docker中APISIX集群部署【珍藏版】
服务器节点1和服务器节点2

[root@s113 /]# cd /home/apisix-docker/example/
[root@s114 /]# cd /home/apisix-docker/example/
version: "3"

services:
  apisix-dashboard:
    image: apache/apisix-dashboard:2.13-alpine
    restart: always
    volumes:
    - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
    ports:
    - "9000:9000"
    networks:
      apisix:

  apisix:
    image: apisix-jdk11:latest
    restart: always
    volumes:
      - ./apisix_log:/usr/local/apisix/logs
      - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
    ##network_mode: host
    ports:
      - "9180:9180/tcp"
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"
      - "9092:9092/tcp"
    networks:
      apisix:

  web1:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web1.conf:/etc/nginx/nginx.conf
    ports:
      - "9081:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

  web2:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web2.conf:/etc/nginx/nginx.conf
    ports:
      - "9082:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

  prometheus:
    image: prom/prometheus:v2.25.0
    restart: always
    volumes:
      - ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    networks:
      apisix:

  grafana:
    image: grafana/grafana:7.3.7
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - "./grafana_conf/provisioning:/etc/grafana/provisioning"
      - "./grafana_conf/dashboards:/var/lib/grafana/dashboards"
      - "./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini"
    networks:
      apisix:

networks:
  apisix:
    driver: bridge

volumes:
  etcd_data:
    driver: local

4.4 修改apisix_conf/config.yaml

Linux Docker中APISIX集群部署【珍藏版】
server-info插件需要开启,开启它后面可以看到apisix集群节点情况。

服务器节点1和服务器节点2

[root@s113 /]# cd /home/apisix-docker/example/apisix_conf/
[root@s114 /]# cd /home/apisix-docker/example/apisix_conf/
apisix:
  node_listen: 9080              # APISIX listening port
  enable_ipv6: false

  enable_control: true
  control:
    ip: "0.0.0.0"
    port: 9092

plugins:
  - ext-plugin-pre-req  # 请求前置插件
  - proxy-rewrite       # 重写插件
  - server-info         # 服务基本信息插件

ext-plugin:
  cmd: ['java', '-Dfile.encoding=UTF-8', '-jar', '/opt/apisix-runner-bin/gateway-1.0-SNAPSHOT.jar']

deployment:
  admin:
    allow_admin:               # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
      - 0.0.0.0/0              # We need to restrict ip access rules for security. 0.0.0.0/0 is for test.

    admin_key:
      - name: "admin"
        key: edd1c9f034335f136f87ad84b625c8f1
        role: admin                 # admin: manage all configuration data

      - name: "viewer"
        key: 4054f7cf07e344346cd3f287985e76a2
        role: viewer

  etcd:
    host:
      - "http://176.16.108.113:2379"
      - "http://176.16.108.114:2379"
    prefix: "/apisix"               # apisix configurations prefix
    timeout: 30

plugin_attr:
  prometheus:
    export_addr:
      ip: "0.0.0.0"
      port: 9091

4.5 修改dashboard_conf/config.yaml

Linux Docker中APISIX集群部署【珍藏版】
服务器节点1和服务器节点2

[root@s113 /]# cd /home/apisix-docker/example/dashboard_conf/
[root@s114 /]# cd /home/apisix-docker/example/dashboard_conf/
conf:
  listen:
    host: 0.0.0.0     # `manager api` listening ip or host name
    port: 9000          # `manager api` listening port
  allow_list:           # If we don't set any IP list, then any IP access is allowed by default.
    - 0.0.0.0/0
  etcd:
    endpoints:          # supports defining multiple etcd host addresses for an etcd cluster
      - "http://176.16.108.113:2379"
      - "http://176.16.108.114:2379"
                          # yamllint disable rule:comments-indentation
                          # etcd basic auth info
    # username: "root"    # ignore etcd username if not enable etcd auth
    # password: "123456"  # ignore etcd password if not enable etcd auth
    mtls:
      key_file: ""          # Path of your self-signed client side key
      cert_file: ""         # Path of your self-signed client side cert
      ca_file: ""           # Path of your self-signed ca cert, the CA is used to sign callers' certificates
    # prefix: /apisix     # apisix config's prefix in etcd, /apisix by default
  log:
    error_log:
      level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatal
      file_path:
        logs/error.log  # supports relative path, absolute path, standard output
                        # such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
    access_log:
      file_path:
        logs/access.log  # supports relative path, absolute path, standard output
                         # such as: logs/access.log, /tmp/logs/access.log, /dev/stdout, /dev/stderr
                         # log example: 2020-12-09T16:38:09.039+0800    INFO    filter/logging.go:46    /apisix/admin/routes/r1 {"status": 401, "host": "127.0.0.1:9000", "query": "asdfsafd=adf&a=a", "requestId": "3d50ecb8-758c-46d1-af5b-cd9d1c820156", "latency": 0, "remoteIP": "127.0.0.1", "method": "PUT", "errs": []}
authentication:
  secret:
    secret              # secret for jwt token generation.
                        # NOTE: Highly recommended to modify this value to protect `manager api`.
                        # if it's default value, when `manager api` start, it will generate a random string to replace it.
  expire_time: 3600     # jwt token expire time, in second
  users:                # yamllint enable rule:comments-indentation
    - username: admin   # username and password for login `manager api`
      password: admin
    - username: user
      password: user

plugins:                          # plugin list (sorted in alphabetical order)
  - api-breaker
  - authz-keycloak
  - basic-auth
  - batch-requests
  - consumer-restriction
  - cors
  # - dubbo-proxy
  - echo
  # - error-log-logger
  # - example-plugin
  - fault-injection
  - grpc-transcode
  - hmac-auth
  - http-logger
  - ip-restriction
  - jwt-auth
  - kafka-logger
  - key-auth
  - limit-conn
  - limit-count
  - limit-req
  # - log-rotate
  # - node-status
  - openid-connect
  - prometheus
  - proxy-cache
  - proxy-mirror
  - proxy-rewrite
  - redirect
  - referer-restriction
  - request-id
  - request-validation
  - response-rewrite
  - serverless-post-function
  - serverless-pre-function
  # - skywalking
  - sls-logger
  - syslog
  - tcp-logger
  - udp-logger
  - uri-blocker
  - wolf-rbac
  - zipkin
  - server-info
  - traffic-split

4.6 启动apisix并验证集群

切换到/home/apisix-docker/example目录下,执行启动指令。

[root@s113 example]# docker-compose -p docker-apisix up -d

Linux Docker中APISIX集群部署【珍藏版】
Linux Docker中APISIX集群部署【珍藏版】

[root@s114 example]# docker-compose -p docker-apisix up -d

Linux Docker中APISIX集群部署【珍藏版】
Linux Docker中APISIX集群部署【珍藏版】
查看集群
访问http://176.16.108.113:9000或者http://176.16.108.114:9000,输入账号admin,密码admin登录到apisix dashboard系统,打开系统信息模块,看到两个apisix节点,就代表apisix集群搭建成功了。
Linux Docker中APISIX集群部署【珍藏版】
在http://176.16.108.113:9000或者http://176.16.108.114:9000任意一个系统中,添加上游、服务、路由信息,在两个系统中都可以看到添加的数据信息。
Linux Docker中APISIX集群部署【珍藏版】
Linux Docker中APISIX集群部署【珍藏版】

5 搭建NGINX集群

5.1 安装nginx

两台服务器节点做下面同样的指令操作。
拉取镜像

docker pull nginx

临时启动nginx容器,复制容器内的重要配置文件到本机

docker run --name nginx -p 80:80 -d nginx
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/
docker cp nginx:/etc/nginx/conf.d/ /home/nginx/conf/
docker cp nginx:/usr/share/nginx/html/ /home/nginx/html/
docker cp nginx:/var/log/nginx/ /home/nginx/logs/

停止删除临时nginx容器

docker stop nginx
docker rm nginx

正式运行nginx容器

docker run -p 8080:80 \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/conf:/etc/nginx/conf.d \
-v /etc/localtime:/etc/localtime \
--name nginx \
--restart=always \
-d nginx

5.2 nginx配置负载均衡

切换到/home/nginx目录中,修改相关配置文件,服务器节点1和服务器节点2均需要做如下修改。

修改nginx.conf配置文件

[root@s113 /]# cd /home/nginx/
[root@s114 /]# cd /home/nginx/
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    upstream apisix {
        ip_hash;
        server 176.16.108.113:9000 weight=1;
        server 176.16.108.114:9000 weight=1;
    }

    upstream apisixApi {
        server 176.16.108.113:9080 weight=1;
        server 176.16.108.114:9080 weight=1;
    }
    include /etc/nginx/conf.d/*.conf;
}

修改default.conf配置文件

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

# 转发网站
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_pass http://apisix/;
    }

# 转发接口
    location ^~/apisixApi/ {
        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;
        rewrite ^/apisixApi/(.*)$ /$1 break;
        proxy_pass http://apisixApi/;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

修改好配置文件,删除旧nginx容器,重新运行新nginx容器。

5.3 验证nginx负载均衡转发

访问http://176.16.108.113:8080或者http://176.16.108.114:8080,输入账号admin,密码admin登录到apisix dashboard系统。
Linux Docker中APISIX集群部署【珍藏版】
Linux Docker中APISIX集群部署【珍藏版】
为了验证nginx集群已经生效了,我们将服务器节点 176.16.108.113上apisix停止运行。再次访问http://176.16.108.113:8080,发现访问成功,说明nginx将请求转发到了服务器节点2的apisix http://176.16.108.114:9000。

6 搭建Keepalived集群

6.1 keepalived简介

keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。VRRP协议保证当主机的下一路由器出现故障时,由另外一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

6.2 安装keepalived

在两台服务器节点上都安装keepalived,下面是安装步骤。

安装keepalived

yum install -y  keepalived

开启keepalived服务

systemctl start keepalived.service

关闭keepalived服务

systemctl stop keepalived.service

查看keepalived服务状态

systemctl status keepalived.service

并对该脚本文件授权:

chmod 777 /etc/keepalived/nginx_check.sh

6.3 创建nginx_check.sh

nginx_check.sh就是起到一个nginx宕机以后,自动开启服务。
切换到/home目录下,创建keepalived目录,在keepalived目录中创建nginx_check.sh文件。两个服务器节点都需要创建。

[root@s113 /]# cd /home/
[root@s113 home]# mkdir keepalived
[root@s113 home]# cd keepalived/
[root@s113 keepalived]# touch nginx_check.sh
A=`ps -ef | grep nginx | grep -v grep | wc -l`
if [ $A -eq 0 ];then
    nginx
    sleep 2
    if [ `ps -ef | grep nginx | grep -v grep | wc -l` -eq 0 ];then
        #killall keepalived
        ps -ef|grep keepalived|grep -v grep|awk '{print $2}'|xargs kill -9
    fi

Fi

6.4 修改keepalived.conf

切换到/etc/keepalived目录下,修改配置文件,两台服务器节点都需要修改。
主节点配置文件

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/home/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER #来决定主从
    interface ens192 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 176.16.108.113 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将track_script块加入instance 配置块
    track_script {
        chk_nginx #执行Nginx监控的服务
    }

    virtual_ipaddress {
        176.16.108.115 #虚拟ip
    }
}

从节点配置文件

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/home/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state BACKUP #来决定主从
    interface ens192 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 176.16.108.114 #填写本机ip
    priority 90 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        176.16.108.115 # 虚拟ip
    }
}

6.5 启动keepalived并验证集群

上面修改了keepalived配置文件,这里需要先重启一下keepalived服务。重启完成之后,输入http://176.16.108.115:8080,就能访问到nginx,再由nginx转发到apisix dashboard界面。
keepalived的主节点为176.16.108.113,副节点为176.16.108.114,默认使用主节点的keepalived,它的优先级高。当我们模拟将主节故障,把它停掉,虚拟ip就会漂移到副节点上,这时由副节点接手主节点的工作。当主节点恢复正常运行,副节点就会停止工作,进入备份状态。

停止主节点,观察副节点

[root@s113 /]# systemctl stop keepalived.service
[root@s113 /]# systemctl status keepalived.service

Linux Docker中APISIX集群部署【珍藏版】

[root@s113 /]# ip add

Linux Docker中APISIX集群部署【珍藏版】

[root@s114 /]# systemctl status keepalived.service

Linux Docker中APISIX集群部署【珍藏版】

[root@s114 /]# ip add

Linux Docker中APISIX集群部署【珍藏版】
开启主节点,观察副节点

[root@s113 /]# systemctl start keepalived.service
[root@s114 /]# systemctl status keepalived.service

Linux Docker中APISIX集群部署【珍藏版】

至此,在docker中apisix集群部署就搭建完成了!

参考博客
docker如何部署etcd集群:https://www.jb51.net/article/278169.htm
Nacos+ApiSix docker 集群环境搭建(docker-compose方式):https://blog.csdn.net/u013480019/article/details/128633596
Apache APISIX v3.0 中文文档:https://www.bookstack.cn/read/apisix-3.0-zh/2690359772755fd6.md
Docker安装Nginx:https://blog.csdn.net/u010148813/article/details/126172372
nginx 配置接口:https://blog.csdn.net/code12313/article/details/117466261
Nginx 配置根据路径转发:https://blog.csdn.net/m0_67393295/article/details/126062706
nginx配置负载均衡:https://blog.csdn.net/qq_34825514/article/details/124311144
nginx 转发配置:https://www.cnblogs.com/zjhblogs/p/16423751.html
nginx的配置转发到其他网站详解:https://www.jb51.net/article/259831.htm
CentOS7 下配置Keepalived为系统服务,开机自动启动:https://it.cha138.com/php/show-40463.html
Nginx的高可用集群:https://blog.csdn.net/liangmengbk/article/details/128177421
搭建Nginx高可用集群(keepalived+双机热备):https://blog.csdn.net/weixin_59566851/article/details/124957266文章来源地址https://www.toymoban.com/news/detail-496921.html

到了这里,关于Linux Docker中APISIX集群部署【珍藏版】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python plotly库介绍】从视觉到洞见:桑基图在业务分析中的应用【保姆级教程过于详细珍藏版】

     👤作者介绍:10年大厂数据经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析可视化:企业实战案例 备注说明:方便大家阅读

    2024年04月17日
    浏览(28)
  • 基于k8s集群容器化部署etcd集群和apisix服务

    创建StorageClass,支持动态pvc创建,StorageClass使用nfs-client,同时使用华为云sfs作为数据持久化存储目录 角色认证(rabc.yaml) 创建nfs-provisioner(nfs-provisioner.yaml) 设置nfs-client(nfs-client.yaml) 创建svc,后续apisix中会使用到(svc.yaml) 挨个执行以上yaml文件,kubectl apply -f ***.yaml 创建etcd有状态服务(e

    2024年01月19日
    浏览(40)
  • 云原生 | K8S集群helm部署apisix3.1

    1.当前环境是内网,内网环境手动下载安装 下载地址:https://github.com/kubernetes/helm/releases 2.执行helm version命令验证: 目前只能查看到客户端的版本,服务器还没有安装 3.添加apisix 仓库 a.查看ns b.查看pvc是否已绑定 c.查看apisix的pod是否启动 d.查看svc e.修改apisix-dashboard端口号为:

    2024年02月13日
    浏览(41)
  • apisix 单机部署 linux

    安装etcd: #安装apisix #启动apisix apisix start #安装dashboard

    2024年01月25日
    浏览(32)
  • 【Docker】在Linux使用Docker进行nacos集群部署

    目录 一、介绍 二、单个部署 三、多个部署  每篇一获 Nacos  是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos的主要功能包括: 服务发现和服务健康检查 :Nacos能够帮助您实现自动服务注册、发现和健康检查。 动态配置服务 :

    2024年01月19日
    浏览(42)
  • 2 - 部署Redis集群架构

    环境: 6台集群服务器 51-56 : 安装Redis软件 初始化配置 停止Redis服务 修改服务使用的ip地址是eth0接口的地址(不需要设置密码和修改服务使用的端口号) 启动Redis服务 第一步 准备ruby脚本的运行环境 第二步 创建脚本 第三步 查看脚本帮助信息 重要说明:内存里不允许有数据

    2024年01月23日
    浏览(34)
  • 部署Nginx+keepalived+Tomcat集群架构

    部署Nginx+keepalived+Tomcat集群架构 集群架构背景 Nginx的高可用负载均衡架构 Nginx和LVS对比的总结: 搭建Nginx+keepalived+Tomcat的高可用负载均衡架构 关闭防火墙或开启8080端口; 删除webappsx下所有文件,创建ROOT目录了,添加ROOT/index.jsp页面,在页面中加入tomcat的IP地址,并打印出re

    2024年04月13日
    浏览(34)
  • arm架构部署k8s集群

    Centos8 镜像支持M芯片 链接: https://pan.baidu.com/s/1P-4fDndvdwlRaw27Skw8jQ?pwd=x5kv 提取码: x5kv 打开虚拟机软件安装Centos8 系统,点击创建自定虚拟机,再点击继续 选择Linux,其他Linux5.x kernel 64-bit Arm 选择新建虚拟磁盘,点击继续 选择自定设置,自定义的虚拟机存储位置,进行存储。 在

    2024年02月21日
    浏览(34)
  • 【架构】docker实现集群主从扩容【案例3/4】

    当整个集群扛不住流量的情况时,需要给集群扩容增加设备,由3主3从,扩为4主4从。实现: 示意图如下: 第一步:新创建两个节点(redis-node-7,端口6387和 redis-node-8,端口6388),并启动。 尽可能和之前创建节点的命名规则一致 第二步:进入其中任意一个容器实例内部 第三

    2024年01月16日
    浏览(35)
  • Temporal部署指南:集群架构、服务器部署流程、部署细节及Temporal UI配置

    本文详细介绍了Temporal的部署流程,包括集群架构、Temporal Server的部署流程、部署细节以及Temporal UI的配置。通过指南,您可以了解到如何部署Temporal到生产环境,并对服务器配置、数据库设置、以及UI部署有清晰的指导。

    2024年02月04日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包