Skywalking+Nacos实现高可用集群和动态配置

环境介绍

下面是架构图:

image-20210605225117059

软件版本信息:

  • nacos:1.3.0
  • skywalking:8.5.0
  • elastcisearch:7.7.1

nacos+keepalived+haproxy高可用集群搭建

可参考:https://www.cnblogs.com/wwjj4811/p/14610307.html

nacos安装完成后,创建出skywalking命名空间,供后续skywalking使用

image-20210605230952916

ES环境搭建

可参考:https://www.cnblogs.com/wwjj4811/p/13054685.html

skywalking安装

三台机器都需要执行:

cd /opt
wget https://mirrors.bfsu.edu.cn/apache/skywalking/8.5.0/apache-skywalking-apm-es7-8.5.0.tar.gz
tar -zxvf apache-skywalking-apm-es7-8.5.0.tar.gz

配置oap

修改配置(三台机器的skywalking配置文件都需要修改)

vi /opt/apache-skywalking-apm-bin-es7/config/application.yml

## 主要修改了三处配置,因为文件太长,这里只贴出修改的部分

cluster:
  selector: ${SW_CLUSTER:nacos}
  # 中间部分省略。。。
  nacos:
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.1.56:18848}
    # Nacos Configuration namespace
    namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"skywalking"}
    # Nacos auth username
    username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}
    password: ${SW_CLUSTER_NACOS_PASSWORD:"nacos"}
    # Nacos auth accessKey
    accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
    secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}
    
storage:
  selector: ${SW_STORAGE:elasticsearch7}
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.1.43:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
    trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
    trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
    dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.

    # 后面省略。。。。
    
configuration:
  selector: ${SW_CONFIGURATION:nacos}
  none:
  # 中间部分省略。。。
  nacos:
    # Nacos Server Host
    serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:192.168.1.56}
    # Nacos Server Port
    port: ${SW_CONFIG_NACOS_SERVER_PORT:18848}
    # 组信息
    group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
    # nacos命名空间
    namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:skywalking}
    # Unit seconds, sync period. Default fetch every 60 seconds.
    period: ${SW_CONFIG_NACOS_PERIOD:60}
    # Nacos auth username
    username: ${SW_CONFIG_NACOS_USERNAME:""}
    password: ${SW_CONFIG_NACOS_PASSWORD:""}
    # Nacos auth accessKey
    accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}
    secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}

配置UI

vi /opt/apache-skywalking-apm-bin-es7/webapp/webapp.yml

#注释部分省略
server:
  port: 8888

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: 192.168.1.53:12800,192.168.1.54:12800,192.168.1.55:12800

启动skywalking

其中一台执行:

/opt/apache-skywalking-apm-bin-es7/bin/startup.sh

另外两台执行:

/opt/apache-skywalking-apm-bin-es7/bin/oapServiceNoInit.sh
/opt/apache-skywalking-apm-bin-es7/bin/webappService.sh

查看启动日志:

tail -500f /opt/apache-skywalking-apm-bin-es7/logs/skywalking-oap-server.log
tail -500f /opt/apache-skywalking-apm-bin-es7/logs/webapp.log

image-20210606011704898

动态配置

可以配置的配置文件如下:

image-20210605233505889

agent-analyzer.default.uninstrumentedGateways

configuration-discovery.default.agentConfigurations

core.default.endpoint-name-grouping

core.default.apdexThreshold

agent-analyzer.default.slowDBAccessThreshold

agent-analyzer.default.sampleRate

alarm.default.alarm-settings

此外:官网文档对这些配置做了详细解释:https://skywalking.apache.org/docs/main/v8.5.0/en/setup/backend/dynamic-config/

我这里就不赘述了

动态配置测试

新建一个配置,在skywalking命名空间中:

新建一个data-id叫做agent-analyzer.default.uninstrumentedGateways,group信息是skywalking,配置格式yaml

配置内容:

gateways:
  - name: proxy0
    instances:
      - host: 127.0.0.1 # the host/ip of this gateway instance
        port: 9099 # the port of this gateway instance, defaults to 80

点击发布:

image-20210606012526256

发布成功后,注意三台机器skywalking-oap-server.log的日志信息,控制台打印了配置的变化,这里就达到了不重启Skywalking而动态刷新配置的效果。

image-20210606012717812

一个小问题

三个skywalking oap服务都注册到了nacos中,服务名称都为SkyWalking_OAP_Cluster,按道理来说有三个实例,可以nacos注册中心一直只有一个实例,有点奇怪,目前找不到原因。

image-20210606013529252

而且三台nacos,每一台的服务信息一模一样,都只有同一个实例。

三台机器的skywalking日志也没有任何错误日志。非常奇怪!!!!!!
不过目前没有影响到基本使用,后续我先在公司的环境再搭建一套,再监控具体服务看看。

原文地址:https://www.cnblogs.com/wwjj4811/p/14854415.html