You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by di...@apache.org on 2014/07/10 06:20:00 UTC
git commit: Fixing STRATOS-703 - HAProxy route to same server even
there are multiple clusters
Repository: stratos
Updated Branches:
refs/heads/master a46859352 -> e97b95ce4
Fixing STRATOS-703 - HAProxy route to same server even there are multiple clusters
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e97b95ce
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e97b95ce
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e97b95ce
Branch: refs/heads/master
Commit: e97b95ce4c0c082060afc357746034947eb085e7
Parents: a468593
Author: Dinesh Bandara <di...@wso2.com>
Authored: Thu Jul 10 09:49:22 2014 +0530
Committer: Dinesh Bandara <di...@wso2.com>
Committed: Thu Jul 10 09:49:22 2014 +0530
----------------------------------------------------------------------
.../haproxy/extension/HAProxyConfigWriter.java | 81 +++++++++++++++-----
.../extension/HAProxyStatisticsReader.java | 39 +++++-----
.../src/main/templates/haproxy.cfg.template | 9 ++-
3 files changed, 87 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/e97b95ce/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
index 66ea32a..b767fe0 100644
--- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
+++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
@@ -57,38 +57,74 @@ public class HAProxyConfigWriter {
globalParameters.append("stats socket ");
globalParameters.append(statsSocketFilePath);
- // Prepare frontend-backend collection
- StringBuilder frontendBackendCollection = new StringBuilder();
+ // Prepare frontend http collection
+ StringBuilder frontEndHttp = new StringBuilder();
+ // Prepare frontend https collection
+ StringBuilder frontEndHttps = new StringBuilder();
+ // Prepare backend http collection
+ StringBuilder backEndHttp = new StringBuilder();
+ // Prepare backend https collection
+ StringBuilder backEndHttps = new StringBuilder();
+
+ String frontEndHttpId = "http_frontend";
+ String frontEndHttpsId = "https_frontend";
+ boolean frontEndHttpAdded = false;
+ boolean frontEndHttpsAdded = false;
+
for (Service service : topology.getServices()) {
for (Cluster cluster : service.getClusters()) {
if(cluster.getServiceName().equals("haproxy"))
continue;
-
if ((service.getPorts() == null) || (service.getPorts().size() == 0)) {
throw new RuntimeException(String.format("No ports found in service: %s", service.getServiceName()));
}
for (Port port : service.getPorts()) {
- String frontendId = cluster.getClusterId() + "-host-" + HAProxyContext.getInstance().getHAProxyPrivateIp() + "-proxy-" + port.getProxy();
- String backendId = frontendId + "-members";
-
- // Frontend block
- frontendBackendCollection.append("frontend ").append(frontendId).append(NEW_LINE);
- frontendBackendCollection.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp()).append(":").append(port.getProxy()).append(NEW_LINE);
- frontendBackendCollection.append("\tmode ").append(port.getProtocol()).append(NEW_LINE);
- frontendBackendCollection.append("\tdefault_backend ").append(backendId).append(NEW_LINE);
- frontendBackendCollection.append(NEW_LINE);
-
- // Backend block
- frontendBackendCollection.append("backend ").append(backendId).append(NEW_LINE);
- frontendBackendCollection.append("\tmode ").append(port.getProtocol()).append(NEW_LINE);
- for (Member member : cluster.getMembers()) {
- frontendBackendCollection.append("\tserver ").append(member.getMemberId()).append(" ")
- .append(member.getMemberIp()).append(":").append(port.getValue()).append(NEW_LINE);
+ if (port.getProtocol().equals("http")){
+ if (!frontEndHttpAdded) {
+ frontEndHttp.append("frontend ").append(frontEndHttpId).append(NEW_LINE);
+ frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp()).append(":").append(port.getProxy()).append(NEW_LINE);
+ frontEndHttp.append("\tmode ").append(port.getProtocol()).append(NEW_LINE);
+ frontEndHttpAdded = true;
+ }
+
+ for(String hostname : cluster.getHostNames()) {
+ frontEndHttp.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ").append(hostname).append(NEW_LINE);
+ frontEndHttp.append("\tuse_backend ").append(hostname).append("-http-members if is_").append(hostname).append(NEW_LINE);
+
+ // Backend block
+ backEndHttp.append("backend ").append(hostname).append("-http-members").append(NEW_LINE);
+ backEndHttp.append("\tmode ").append("http").append(NEW_LINE);
+ for (Member member : cluster.getMembers()) {
+ backEndHttp.append("\tserver ").append(member.getMemberId()).append(" ")
+ .append(member.getMemberIp()).append(":").append(port.getValue()).append(NEW_LINE);
+ }
+ backEndHttp.append(NEW_LINE);
+ }
+ } else if (port.getProtocol().equals("https")){
+ if (!frontEndHttpsAdded) {
+ frontEndHttp.append("frontend ").append(frontEndHttpsId).append(NEW_LINE);
+ frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp()).append(":").append(port.getProxy()).append(NEW_LINE);
+ frontEndHttp.append("\tmode ").append("http").append(NEW_LINE);
+ frontEndHttpsAdded = true;
+ }
+
+ for(String hostname : cluster.getHostNames()) {
+ frontEndHttps.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ").append(hostname).append(NEW_LINE);
+ frontEndHttps.append("\tuse_backend ").append(hostname).append("-https-members if is_").append(hostname).append(NEW_LINE);
+
+ // Backend block
+ backEndHttps.append("backend ").append(hostname).append("-http-members").append(NEW_LINE);
+ backEndHttps.append("\tmode ").append("https").append(NEW_LINE);
+ for (Member member : cluster.getMembers()) {
+ backEndHttps.append("\tserver ").append(member.getMemberId()).append(" ")
+ .append(member.getMemberIp()).append(":").append(port.getValue()).append(NEW_LINE);
+ }
+ backEndHttps.append(NEW_LINE);
+ }
}
- frontendBackendCollection.append(NEW_LINE);
}
}
}
@@ -104,7 +140,10 @@ public class HAProxyConfigWriter {
// Insert strings into the template
VelocityContext context = new VelocityContext();
context.put("global_parameters", globalParameters.toString());
- context.put("frontend_backend_collection", frontendBackendCollection.toString());
+ context.put("frontend_http_collection", frontEndHttp.toString());
+ context.put("frontend_https_collection", frontEndHttps.toString());
+ context.put("backend_http_collection", backEndHttp.toString());
+ context.put("backend_https_collection", backEndHttps.toString());
// Create a new string from the template
StringWriter stringWriter = new StringWriter();
http://git-wip-us.apache.org/repos/asf/stratos/blob/e97b95ce/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyStatisticsReader.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyStatisticsReader.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyStatisticsReader.java
index 676f522..f564e7c 100644
--- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyStatisticsReader.java
+++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyStatisticsReader.java
@@ -60,28 +60,27 @@ public class HAProxyStatisticsReader implements LoadBalancerStatisticsReader {
}
for (Port port : service.getPorts()) {
- frontendId = cluster.getClusterId() + "-host-" + HAProxyContext.getInstance().getHAProxyPrivateIp() + "-proxy-" + port.getProxy();
- //frontendId = cluster.getClusterId() + "-proxy-" + port.getProxy();
- backendId = frontendId + "-members";
-
- for (Member member : cluster.getMembers()) {
- // echo "get weight <backend>/<server>" | socat stdio <stats-socket>
- command = String.format("%s/get-weight.sh %s %s %s", scriptsPath, backendId, member.getMemberId(), statsSocketFilePath);
- try {
- output = CommandUtils.executeCommand(command);
- if ((output != null) && (output.length() > 0)) {
- array = output.split(" ");
- if ((array != null) && (array.length > 0)) {
- weight = Integer.parseInt(array[0]);
- if (log.isDebugEnabled()) {
- log.debug(String.format("Member weight found: [cluster] %s [member] %s [weight] %d", member.getClusterId(), member.getMemberId(), weight));
+ for(String hostname : cluster.getHostNames()) {
+ backendId = hostname+"-http-members";
+ for (Member member : cluster.getMembers()) {
+ // echo "get weight <backend>/<server>" | socat stdio <stats-socket>
+ command = String.format("%s/get-weight.sh %s %s %s", scriptsPath, backendId, member.getMemberId(), statsSocketFilePath);
+ try {
+ output = CommandUtils.executeCommand(command);
+ if ((output != null) && (output.length() > 0)) {
+ array = output.split(" ");
+ if ((array != null) && (array.length > 0)) {
+ weight = Integer.parseInt(array[0]);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Member weight found: [cluster] %s [member] %s [weight] %d", member.getClusterId(), member.getMemberId(), weight));
+ }
+ totalWeight += weight;
}
- totalWeight += weight;
}
- }
- } catch (IOException e) {
- if (log.isErrorEnabled()) {
- log.error(e);
+ } catch (IOException e) {
+ if (log.isErrorEnabled()) {
+ log.error(e);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e97b95ce/extensions/load-balancer/haproxy-extension/src/main/templates/haproxy.cfg.template
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/haproxy-extension/src/main/templates/haproxy.cfg.template b/extensions/load-balancer/haproxy-extension/src/main/templates/haproxy.cfg.template
index c58ce87..0c62939 100644
--- a/extensions/load-balancer/haproxy-extension/src/main/templates/haproxy.cfg.template
+++ b/extensions/load-balancer/haproxy-extension/src/main/templates/haproxy.cfg.template
@@ -9,4 +9,11 @@ defaults
timeout client 50000ms
timeout server 50000ms
-$frontend_backend_collection
\ No newline at end of file
+$frontend_http_collection
+
+$frontend_https_collection
+
+$backend_http_collection
+
+$backend_https_collection
+