This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 5d7da1a Add internalComHost and internalComPort config to Nacos.
(#5192)
5d7da1a is described below
commit 5d7da1aead98e367582613d9caa04fb87385e8cd
Author: Ax1an <[email protected]>
AuthorDate: Wed Jul 29 15:54:10 2020 +0800
Add internalComHost and internalComPort config to Nacos. (#5192)
---
docs/en/setup/backend/backend-cluster.md | 14 ++++++-
docs/en/setup/backend/configuration-vocabulary.md | 2 +
.../plugin/nacos/ClusterModuleNacosConfig.java | 6 +++
.../cluster/plugin/nacos/NacosCoordinator.java | 9 +++++
...ITClusterModuleNacosProviderFunctionalTest.java | 43 ++++++++++++++++++++++
.../cluster/plugin/nacos/NacosCoordinatorTest.java | 9 +++++
6 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/docs/en/setup/backend/backend-cluster.md
b/docs/en/setup/backend/backend-cluster.md
index 1f7c75f..92fad98 100644
--- a/docs/en/setup/backend/backend-cluster.md
+++ b/docs/en/setup/backend/backend-cluster.md
@@ -92,6 +92,12 @@ cluster:
# other configurations
```
+Same as Zookeeper coordinator,
+in some cases, oap default gRPC host and port in core are not suitable for
internal communication among the oap nodes.
+The following setting are provided to set the host and port manually, based on
your own LAN env.
+- internalComHost, the host registered and other oap node use this to
communicate with current node.
+- internalComPort, the port registered and other oap node use this to
communicate with current node.
+
## Nacos
Set the **cluster/selector** to **nacos** in the yml to enable.
@@ -99,4 +105,10 @@ Set the **cluster/selector** to **nacos** in the yml to
enable.
cluster:
selector: ${SW_CLUSTER:nacos}
# other configurations
-```
\ No newline at end of file
+```
+
+Same as Zookeeper coordinator,
+in some cases, oap default gRPC host and port in core are not suitable for
internal communication among the oap nodes.
+The following setting are provided to set the host and port manually, based on
your own LAN env.
+- internalComHost, the host registered and other oap node use this to
communicate with current node.
+- internalComPort, the port registered and other oap node use this to
communicate with current node.
\ No newline at end of file
diff --git a/docs/en/setup/backend/configuration-vocabulary.md
b/docs/en/setup/backend/configuration-vocabulary.md
index 51fc33a..0b55920 100644
--- a/docs/en/setup/backend/configuration-vocabulary.md
+++ b/docs/en/setup/backend/configuration-vocabulary.md
@@ -63,6 +63,8 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`.
**Receiver** mode
| - | Nacos| serviceName| Service name used for SkyWalking cluster.
|SW_SERVICE_NAME|SkyWalking_OAP_Cluster|
| - | - | hostPort| hosts and ports used of Nacos cluster.|
SW_CLUSTER_NACOS_HOST_PORT|localhost:8848|
| - | - | namespace| Namespace used by SkyWalking node coordination.|
SW_CLUSTER_NACOS_NAMESPACE|public|
+| - | - | internalComHost| The hostname registered in the Nacos for the
internal communication of OAP cluster.| - | -|
+| - | - | internalComPort| The port registered in the Nacos for the internal
communication of OAP cluster.| - | -1|
| storage|elasticsearch| - | ElasticSearch 6 storage implementation | - | - |
| - | - | nameSpace | Prefix of indexes created and used by SkyWalking. |
SW_NAMESPACE | - |
| - | - | clusterNodes | ElasticSearch cluster nodes for client connection.|
SW_STORAGE_ES_CLUSTER_NODES |localhost|
diff --git
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java
index bbfe071..917b394 100644
---
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java
+++
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java
@@ -32,4 +32,10 @@ public class ClusterModuleNacosConfig extends ModuleConfig {
@Setter
@Getter
private String namespace = "public";
+ @Setter
+ @Getter
+ private String internalComHost;
+ @Setter
+ @Getter
+ private int internalComPort = -1;
}
diff --git
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinator.java
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinator.java
index 4253d8f..8629900 100644
---
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinator.java
+++
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinator.java
@@ -23,6 +23,8 @@ import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import java.util.ArrayList;
import java.util.List;
+
+import com.google.common.base.Strings;
import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
@@ -65,6 +67,9 @@ public class NacosCoordinator implements ClusterRegister,
ClusterNodesQuery {
@Override
public void registerRemote(RemoteInstance remoteInstance) throws
ServiceRegisterException {
+ if (needUsingInternalAddr()) {
+ remoteInstance = new RemoteInstance(new
Address(config.getInternalComHost(), config.getInternalComPort(), true));
+ }
String host = remoteInstance.getAddress().getHost();
int port = remoteInstance.getAddress().getPort();
try {
@@ -75,4 +80,8 @@ public class NacosCoordinator implements ClusterRegister,
ClusterNodesQuery {
this.selfAddress = remoteInstance.getAddress();
TelemetryRelatedContext.INSTANCE.setId(selfAddress.toString());
}
+
+ private boolean needUsingInternalAddr() {
+ return !Strings.isNullOrEmpty(config.getInternalComHost()) &&
config.getInternalComPort() > 0;
+ }
}
diff --git
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
index 724f221..44cfef7 100644
---
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
+++
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.cluster.plugin.nacos;
import com.alibaba.nacos.api.naming.NamingService;
import java.util.Collections;
import java.util.List;
+
import org.apache.skywalking.apm.util.StringUtil;
import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
@@ -63,6 +64,25 @@ public class ITClusterModuleNacosProviderFunctionalTest {
}
@Test
+ public void registerRemoteOfInternal() throws Exception {
+ final String serviceName = "register_remote_internal";
+ ModuleProvider provider = createProvider(serviceName, "127.0.1.2",
1000);
+
+ Address selfAddress = new Address("127.0.0.2", 1000, true);
+ RemoteInstance instance = new RemoteInstance(selfAddress);
+ getClusterRegister(provider).registerRemote(instance);
+
+ List<RemoteInstance> remoteInstances = queryRemoteNodes(provider, 1);
+
+ ClusterModuleNacosConfig config = (ClusterModuleNacosConfig)
provider.createConfigBeanIfAbsent();
+ assertEquals(1, remoteInstances.size());
+ Address queryAddress = remoteInstances.get(0).getAddress();
+ assertEquals(config.getInternalComHost(), queryAddress.getHost());
+ assertEquals(config.getInternalComPort(), queryAddress.getPort());
+ assertTrue(queryAddress.isSelf());
+ }
+
+ @Test
public void registerRemoteOfReceiver() throws Exception {
final String serviceName = "register_remote_receiver";
ModuleProvider providerA = createProvider(serviceName);
@@ -151,6 +171,29 @@ public class ITClusterModuleNacosProviderFunctionalTest {
return provider;
}
+ private ClusterModuleNacosProvider createProvider(String serviceName,
String internalComHost,
+ int internalComPort)
throws Exception {
+ ClusterModuleNacosProvider provider = new ClusterModuleNacosProvider();
+
+ ClusterModuleNacosConfig config = (ClusterModuleNacosConfig)
provider.createConfigBeanIfAbsent();
+
+ config.setHostPort(nacosAddress);
+ config.setServiceName(serviceName);
+
+ if (!StringUtil.isEmpty(internalComHost)) {
+ config.setInternalComHost(internalComHost);
+ }
+
+ if (internalComPort > 0) {
+ config.setInternalComPort(internalComPort);
+ }
+
+ provider.prepare();
+ provider.start();
+ provider.notifyAfterCompleted();
+ return provider;
+ }
+
private ClusterRegister getClusterRegister(ModuleProvider provider) {
return provider.getService(ClusterRegister.class);
}
diff --git
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
index 71acb74..7668fe3 100644
---
a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
+++
b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
@@ -45,6 +45,8 @@ public class NacosCoordinatorTest {
private Address remoteAddress = new Address("10.0.0.1", 1000, false);
private Address selfRemoteAddress = new Address("10.0.0.2", 1001, true);
+ private Address internalAddress = new Address("10.0.0.3", 1002, false);
+
private static final String SERVICE_NAME = "test-service";
@Before
@@ -93,6 +95,13 @@ public class NacosCoordinatorTest {
registerRemote(selfRemoteAddress);
}
+ @Test
+ public void registerRemoteUsingInternal() throws NacosException {
+ nacosConfig.setInternalComHost(internalAddress.getHost());
+ nacosConfig.setInternalComPort(internalAddress.getPort());
+ registerRemote(internalAddress);
+ }
+
private void validate(Address originArress, RemoteInstance instance) {
Address instanceAddress = instance.getAddress();
assertEquals(originArress.getHost(), instanceAddress.getHost());