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:21:28 UTC

[tomcat] branch 9.0.x updated: Improved CloudMembershipService documentation and configuration

This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new a49816d  Improved CloudMembershipService documentation and configuration
a49816d is described below

commit a49816da8d93ef4d0d4d032d6cda49f885347ddc
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