You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2020/02/17 09:07:38 UTC
[tomcat] branch master updated: Improved CloudMembershipService
documentation and configuration
This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new d6abbe3 Improved CloudMembershipService documentation and configuration
new c1a8aaf Merge pull request #243 from bohmber/dnsmembership_doc
d6abbe3 is described below
commit d6abbe3f6684c71a27b4739c78580c8fed82eaa9
Author: bohmber <bo...@apache.org>
AuthorDate: Sun Feb 16 17:24:32 2020 +0100
Improved CloudMembershipService documentation and configuration
---
.../membership/cloud/CloudMembershipService.java | 39 +++++++++++++++
.../membership/cloud/DNSMembershipProvider.java | 55 ++++++++++++++++++++++
.../cloud/KubernetesMembershipProvider.java | 4 ++
3 files changed, 98 insertions(+)
diff --git a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
index bcb213e..e840349 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
@@ -31,6 +31,41 @@ import org.apache.catalina.tribes.util.StringManager;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
+/**
+ * A {@link org.apache.catalina.tribes.MembershipService} that uses Kubernetes API(default) or DNS to retrieve
+ * the members of a cluster.<br>
+ * <p>
+ * The default implementation of the MembershipProvider component is the {@link KubernetesMembershipProvider}.
+ * The MembershipProvider can be configured by the <code>membershipProviderClassName</code> property.
+ * Possible shortcuts are {@code kubernetes} and {@code dns}. For dns look at the {@link DNSMembershipProvider}.
+ * </p>
+ * <p>
+ * <strong>Configuration example</strong>
+ * </p>
+ *
+ * {@code server.xml }
+ *
+ * <pre>
+ * {@code
+ * <Server ...
+ *
+ * <Service ...
+ *
+ * <Engine ...
+ *
+ * <Host ...
+ *
+ * <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
+ * <Channel className="org.apache.catalina.tribes.group.GroupChannel">
+ * <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService"/>
+ * </Channel>
+ * </Cluster>
+ * ...
+ * }
+ * </pre>
+ *
+ */
+
public class CloudMembershipService extends MembershipServiceBase
implements CloudMembershipServiceMBean {
@@ -39,7 +74,9 @@ public class CloudMembershipService extends MembershipServiceBase
public static final String MEMBERSHIP_PROVIDER_CLASS_NAME = "membershipProviderClassName";
private static final String KUBE = "kubernetes";
+ private static final String DNS = "dns";
private static final String KUBE_PROVIDER_CLASS = "org.apache.catalina.tribes.membership.cloud.KubernetesMembershipProvider";
+ private static final String DNS_PROVIDER_CLASS = "org.apache.catalina.tribes.membership.cloud.DNSMembershipProvider";
protected static final byte[] INITIAL_ID = new byte[16];
private MembershipProvider membershipProvider;
@@ -101,6 +138,8 @@ public class CloudMembershipService extends MembershipServiceBase
String provider = getMembershipProviderClassName();
if (provider == null || KUBE.equals(provider)) {
provider = KUBE_PROVIDER_CLASS;
+ } else if (DNS.equals(provider)) {
+ provider = DNS_PROVIDER_CLASS;
}
if (log.isDebugEnabled()) {
log.debug("Using membershipProvider: " + provider);
diff --git a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
index 7b57d97..551aaec 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
@@ -30,6 +30,61 @@ import org.apache.catalina.tribes.membership.MemberImpl;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
+/**
+ * A {@link org.apache.catalina.tribes.MembershipProvider} that uses DNS to retrieve the members of a cluster.<br>
+ *
+ * <p>
+ * <strong>Configuration example for Kubernetes</strong>
+ * </p>
+ *
+ * {@code server.xml }
+ *
+ * <pre>
+ * {@code
+ * <Server ...
+ *
+ * <Service ...
+ *
+ * <Engine ...
+ *
+ * <Host ...
+ *
+ * <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
+ * <Channel className="org.apache.catalina.tribes.group.GroupChannel">
+ * <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService"
+ * membershipProviderClassName="org.apache.catalina.tribes.membership.cloud.DNSMembershipProvider"/>
+ * </Channel>
+ * </Cluster>
+ * ...
+ * }
+ * </pre>
+ *
+ * {@code dns-membership-service.yml }
+ *
+ * <pre>
+ * {@code
+ * apiVersion: v1
+ * kind: Service
+ * metadata:
+ * annotations:
+ * service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
+ * description: "The service for tomcat cluster membership."
+ * name: my-tomcat-app-membership
+ * spec:
+ * clusterIP: None
+ * ports:
+ * - name: membership
+ * port: 8888
+ * selector:
+ * app: my-tomcat-app
+ * }
+ * </pre>
+ *
+ * Environment variable configuration<br>
+ *
+ * {@code DNS_MEMBERSHIP_SERVICE_NAME=my-tomcat-app-membership }
+ */
+
public class DNSMembershipProvider extends CloudMembershipProvider {
private static final Log log = LogFactory.getLog(DNSMembershipProvider.class);
diff --git a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
index ce2b1b1..11e0a48 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
@@ -38,6 +38,10 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.json.JSONParser;
+/**
+ * A {@link org.apache.catalina.tribes.MembershipProvider} that uses Kubernetes API to retrieve the members of a cluster.<br>
+ *
+ */
public class KubernetesMembershipProvider extends CloudMembershipProvider {
private static final Log log = LogFactory.getLog(KubernetesMembershipProvider.class);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org