You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/06/04 08:07:14 UTC
stratos git commit: Make schedule algorithms as a configurable value
Repository: stratos
Updated Branches:
refs/heads/lvs_extension 04aea8a61 -> 999ffd7f4
Make schedule algorithms as a configurable value
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/999ffd7f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/999ffd7f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/999ffd7f
Branch: refs/heads/lvs_extension
Commit: 999ffd7f459c68860d8022bc7dcf1af01eb74808
Parents: 04aea8a
Author: Gayan Gunarathne <ga...@wso2.com>
Authored: Thu Jun 4 11:36:51 2015 +0530
Committer: Gayan Gunarathne <ga...@wso2.com>
Committed: Thu Jun 4 11:36:51 2015 +0530
----------------------------------------------------------------------
.../lvs-extension/src/main/bin/lvs-extension.sh | 1 +
.../apache/stratos/lvs/extension/Constants.java | 1 +
.../org/apache/stratos/lvs/extension/LVS.java | 4 +-
.../stratos/lvs/extension/LVSConfigWriter.java | 298 ++++++++++---------
.../stratos/lvs/extension/LVSContext.java | 15 +-
.../lvs/extension/LVSStatisticsReader.java | 3 +-
6 files changed, 172 insertions(+), 150 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh b/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
index 659addd..c276cd2 100755
--- a/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
+++ b/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
@@ -43,6 +43,7 @@ properties="-Dlvs.private.ip=127.0.0.1
-Dcluster.id=cluster-1
-Dservice.name=service-1
-Dlvs.service.virtualip.set=tomcat2|192.168.56.40,tomcat1|192.168.56.41
+ -Dschedule.algorithm=rr
-Dserver.state=MASTER"
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
index 715798f..ce0f267 100644
--- a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
+++ b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
@@ -39,4 +39,5 @@ public class Constants {
public static final String VIRTUALIPS_FOR_SERVICES = "lvs.service.virtualip.set" ;
public static final String KEEPALIVED_START_COMMAND = "service keepalived restart";
public static final String SERVER_STATE ="server.state" ;
+ public static final String LVS_SCHEDULE_ALGO = "schedule.algorithm";
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
index 257a60e..6470a13 100644
--- a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
+++ b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
@@ -44,6 +44,7 @@ public class LVS implements LoadBalancer {
private String virtualIPsForServices;
private String keepAlivedStartCommand;
private String serverState;
+ private String scheduleAlgo;
public LVS() {
this.executableFilePath = LVSContext.getInstance().getExecutableFilePath();
@@ -55,6 +56,7 @@ public class LVS implements LoadBalancer {
this.virtualIPsForServices= LVSContext.getInstance().getVirtualIPsForServices();
this.keepAlivedStartCommand=LVSContext.getInstance().getKeepAlivedStartCommand();
this.serverState=LVSContext.getInstance().getServerState();
+ this.scheduleAlgo=LVSContext.getInstance().getLvsScheduleAlgo();
}
/**
@@ -66,7 +68,7 @@ public class LVS implements LoadBalancer {
try {
log.info("Generating lvs configuration...");
LVSConfigWriter writer = new LVSConfigWriter(templatePath, templateName, confFilePath, statsSocketFilePath,
- virtualIPsForServices,serverState);
+ virtualIPsForServices,serverState,scheduleAlgo);
if(writer.write(topology)) {
return true;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
index 4d6d3f3..3a2f8cc 100644
--- a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
+++ b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
@@ -38,158 +38,164 @@ import java.util.Collection;
*/
public class LVSConfigWriter {
- private static final Log log = LogFactory.getLog(Main.class);
- private static final String NEW_LINE = System.getProperty("line.separator");
- private static final String TAB = " ";
-
- private String templatePath;
- private String templateName;
- private String confFilePath;
- private String statsSocketFilePath;
+ private static final Log log = LogFactory.getLog(Main.class);
+ private static final String NEW_LINE = System.getProperty("line.separator");
+ private static final String TAB = " ";
+
+ private String templatePath;
+ private String templateName;
+ private String confFilePath;
+ private String statsSocketFilePath;
private String virtualIPsForServices;
private String serverState;
+ private String scheduleAlgo;
- public LVSConfigWriter(String templatePath, String templateName, String confFilePath,
- String statsSocketFilePath,String virtualIPsForServices,String serverState) {
+ public LVSConfigWriter(String templatePath, String templateName, String confFilePath,
+ String statsSocketFilePath, String virtualIPsForServices, String serverState,
+ String scheduleAlgo) {
- this.templatePath = templatePath;
- this.templateName = templateName;
- this.confFilePath = confFilePath;
- this.statsSocketFilePath = statsSocketFilePath;
- this.virtualIPsForServices=virtualIPsForServices;
- this.serverState=serverState;
- }
+ this.templatePath = templatePath;
+ this.templateName = templateName;
+ this.confFilePath = confFilePath;
+ this.statsSocketFilePath = statsSocketFilePath;
+ this.virtualIPsForServices = virtualIPsForServices;
+ this.serverState = serverState;
+ this.scheduleAlgo = scheduleAlgo;
+ }
- public boolean write(Topology topology) {
+ public boolean write(Topology topology) {
- StringBuilder configurationBuilder = new StringBuilder();
- StringBuilder virtualIPBuilder=new StringBuilder();
+ StringBuilder configurationBuilder = new StringBuilder();
+ StringBuilder virtualIPBuilder = new StringBuilder();
String state;
- for (Service service : topology.getServices()) {
- for (Cluster cluster : service.getClusters()) {
- if ((service.getPorts() == null) || (service.getPorts().size() == 0)) {
- throw new RuntimeException(String.format("No ports found in service: %s", service.getServiceName()));
- }
- generateConfigurationForCluster(cluster, service.getPorts(), configurationBuilder,virtualIPBuilder,virtualIPsForServices);
- }
- }
-
- // Start velocity engine
- VelocityEngine ve = new VelocityEngine();
- ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatePath);
- ve.init();
-
- // Open the template
- Template t = ve.getTemplate(templateName);
-
- // Insert strings into the template
- VelocityContext context = new VelocityContext();
- context.put("configuration", configurationBuilder.toString());
- context.put("virtualips", virtualIPBuilder.toString());
- context.put("state", serverState);
-
- // Create a new string from the template
- StringWriter stringWriter = new StringWriter();
- t.merge(context, stringWriter);
- String configuration = stringWriter.toString();
-
- // Write configuration file
- try {
- BufferedWriter writer = new BufferedWriter(new FileWriter(confFilePath));
- writer.write(configuration);
- writer.close();
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Configuration written to file: %s", confFilePath));
- }
- return true;
- } catch (IOException e) {
- if (log.isErrorEnabled()) {
- log.error(String.format("Could not write configuration file: %s", confFilePath));
- }
- throw new RuntimeException(e);
- }
- }
-
-
- /**
- * Generate configuration for a cluster with the following format:
- *
- * virtual_server 10.10.10.10 80 {
- * delay_loop 10
- * lvs_sched wlc
- * lvs_method DR
- * persistence_timeout 5
- * protocol TCP
-
- * real_server 10.10.10.41 80 {
- * weight 50
- * TCP_CHECK {
- * connect_timeout 3
- * }
- * }
+ for (Service service : topology.getServices()) {
+ for (Cluster cluster : service.getClusters()) {
+ if ((service.getPorts() == null) || (service.getPorts().size() == 0)) {
+ throw new RuntimeException(
+ String.format("No ports found in service: %s", service.getServiceName()));
+ }
+ generateConfigurationForCluster(cluster, service.getPorts(), configurationBuilder, virtualIPBuilder,
+ virtualIPsForServices, scheduleAlgo);
+ }
+ }
+
+ // Start velocity engine
+ VelocityEngine ve = new VelocityEngine();
+ ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatePath);
+ ve.init();
+
+ // Open the template
+ Template t = ve.getTemplate(templateName);
+
+ // Insert strings into the template
+ VelocityContext context = new VelocityContext();
+ context.put("configuration", configurationBuilder.toString());
+ context.put("virtualips", virtualIPBuilder.toString());
+ context.put("state", serverState);
+
+ // Create a new string from the template
+ StringWriter stringWriter = new StringWriter();
+ t.merge(context, stringWriter);
+ String configuration = stringWriter.toString();
+
+ // Write configuration file
+ try {
+ BufferedWriter writer = new BufferedWriter(new FileWriter(confFilePath));
+ writer.write(configuration);
+ writer.close();
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Configuration written to file: %s", confFilePath));
+ }
+ return true;
+ } catch (IOException e) {
+ if (log.isErrorEnabled()) {
+ log.error(String.format("Could not write configuration file: %s", confFilePath));
+ }
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Generate configuration for a cluster with the following format:
+ * <p/>
+ * virtual_server 10.10.10.10 80 {
+ * delay_loop 10
+ * lvs_sched wlc
+ * lvs_method DR
+ * persistence_timeout 5
+ * protocol TCP
+ * <p/>
+ * real_server 10.10.10.41 80 {
+ * weight 50
+ * TCP_CHECK {
+ * connect_timeout 3
+ * }
+ * }
+ * <p/>
+ * real_server 10.10.10.42 80 {
+ * weight 50
+ * TCP_CHECK {
+ * connect_timeout 3
+ * }
+ * }
+ * }
*
- * real_server 10.10.10.42 80 {
- * weight 50
- * TCP_CHECK {
- * connect_timeout 3
- * }
- * }
- * }
- *
- * @param cluster
- * @param ports
- * @param text
- */
- private void generateConfigurationForCluster(Cluster cluster, Collection<Port> ports, StringBuilder text,StringBuilder virtualIPs,String virtualIPsForServices) {
-
- String[] virtualIPForServiceArray;
- if (virtualIPsForServices.contains(",")) {
- virtualIPForServiceArray = virtualIPsForServices.split(",");
- } else {
- virtualIPForServiceArray = new String[1];
- virtualIPForServiceArray[0] = virtualIPsForServices;
- }
- boolean isServiceAvailable = false;
- for (int i = 0; i < virtualIPForServiceArray.length; i++) {
- String[] virtualIpForService = virtualIPForServiceArray[i].split("\\|");
- for (Port port : ports) {
- for (String hostname : cluster.getHostNames()) {
- if (virtualIpForService[0].equals(cluster.getServiceName())) {
-
- text.append("virtual_server ").append(virtualIpForService[1]).append(" ").append(port.getValue()).append(
- " {").append(
- NEW_LINE);
- text.append(TAB).append("delay_loop 10").append(NEW_LINE);
- text.append(TAB).append("lvs_sched wlc").append(NEW_LINE);
- text.append(TAB).append("lvs_method DR").append(NEW_LINE);
- text.append(TAB).append("persistence_timeout 5").append(NEW_LINE);
- text.append(TAB).append("protocol TCP").append(NEW_LINE).append(NEW_LINE);
-
- //Start real servers block
-
- for (Member member : cluster.getMembers()) {
- // Start upstream server block
- text.append(TAB).append("real_server ").append(member.getHostName()).append(" ")
- .append(port.getValue()).append(" {")
- .append(NEW_LINE);
- text.append(TAB).append(TAB).append("weight 50").append(NEW_LINE);
- text.append(TAB).append(TAB).append("TCP_CHECK {").append(NEW_LINE);
- text.append(TAB).append(TAB).append(TAB).append("connect_timeout 3").append(NEW_LINE);
- text.append(TAB).append(TAB).append("}").append(NEW_LINE);
- text.append(TAB).append("}").append(NEW_LINE);
- }
- text.append("}").append(NEW_LINE);
- isServiceAvailable = true;
- virtualIPs.append(TAB).append(TAB).append(virtualIpForService[1]).append(NEW_LINE);
- }
- }
- }
- if (!isServiceAvailable) {
- log.warn(String.format("Given service is not available in the topology %s", virtualIpForService[0]));
- }
- }
-
-
- }
+ * @param cluster
+ * @param ports
+ * @param text
+ */
+ private void generateConfigurationForCluster(Cluster cluster, Collection<Port> ports, StringBuilder text,
+ StringBuilder virtualIPs, String virtualIPsForServices,
+ String scheduleAlgo) {
+
+ String[] virtualIPForServiceArray;
+ if (virtualIPsForServices.contains(",")) {
+ virtualIPForServiceArray = virtualIPsForServices.split(",");
+ } else {
+ virtualIPForServiceArray = new String[1];
+ virtualIPForServiceArray[0] = virtualIPsForServices;
+ }
+ boolean isServiceAvailable = false;
+ for (int i = 0; i < virtualIPForServiceArray.length; i++) {
+ String[] virtualIpForService = virtualIPForServiceArray[i].split("\\|");
+ for (Port port : ports) {
+ for (String hostname : cluster.getHostNames()) {
+ if (virtualIpForService[0].equals(cluster.getServiceName())) {
+
+ text.append("virtual_server ").append(virtualIpForService[1]).append(" ")
+ .append(port.getValue()).append(
+ " {").append(
+ NEW_LINE);
+ text.append(TAB).append("delay_loop 10").append(NEW_LINE);
+ text.append(TAB).append("lvs_sched ").append(scheduleAlgo).append(NEW_LINE);
+ text.append(TAB).append("lvs_method DR").append(NEW_LINE);
+ text.append(TAB).append("persistence_timeout 5").append(NEW_LINE);
+ text.append(TAB).append("protocol TCP").append(NEW_LINE).append(NEW_LINE);
+
+ //Start real servers block
+
+ for (Member member : cluster.getMembers()) {
+ // Start upstream server block
+ text.append(TAB).append("real_server ").append(member.getHostName()).append(" ")
+ .append(port.getValue()).append(" {")
+ .append(NEW_LINE);
+ text.append(TAB).append(TAB).append("weight 50").append(NEW_LINE);
+ text.append(TAB).append(TAB).append("TCP_CHECK {").append(NEW_LINE);
+ text.append(TAB).append(TAB).append(TAB).append("connect_timeout 3").append(NEW_LINE);
+ text.append(TAB).append(TAB).append("}").append(NEW_LINE);
+ text.append(TAB).append("}").append(NEW_LINE);
+ }
+ text.append("}").append(NEW_LINE);
+ isServiceAvailable = true;
+ virtualIPs.append(TAB).append(TAB).append(virtualIpForService[1]).append(NEW_LINE);
+ }
+ }
+ }
+ if (!isServiceAvailable) {
+ log.warn(String.format("Given service is not available in the topology %s", virtualIpForService[0]));
+ }
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
index 228c455..1307473 100644
--- a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
+++ b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
@@ -46,6 +46,7 @@ public class LVSContext {
private String virtualIPsForServices;
private String keepAlivedStartCommand;
private String serverState;
+ private String lvsScheduleAlgo;
private LVSContext() {
this.lvsPrivateIp = System.getProperty(Constants.LVS_PRIVATE_IP);
@@ -63,7 +64,8 @@ public class LVSContext {
this.serviceName = System.getProperty(Constants.SERVICE_NAME);
this.virtualIPsForServices=System.getProperty(Constants.VIRTUALIPS_FOR_SERVICES);
this.keepAlivedStartCommand=Constants.KEEPALIVED_START_COMMAND;
- this.setServerState(System.getProperty(Constants.SERVER_STATE));
+ this.serverState=System.getProperty(Constants.SERVER_STATE);
+ this.lvsScheduleAlgo = System.getProperty(Constants.LVS_SCHEDULE_ALGO);
if (log.isDebugEnabled()) {
log.debug(Constants.LVS_PRIVATE_IP + " = " + lvsPrivateIp);
@@ -78,7 +80,8 @@ public class LVSContext {
log.debug(Constants.THRIFT_RECEIVER_PORT + " = " + thriftReceiverPort);
log.debug(Constants.NETWORK_PARTITION_ID + " = " + networkPartitionId);
log.debug(Constants.CLUSTER_ID + " = " + clusterId);
- log.debug(Constants.VIRTUALIPS_FOR_SERVICES + " = " + getVirtualIPsForServices());
+ log.debug(Constants.VIRTUALIPS_FOR_SERVICES + " = " + virtualIPsForServices);
+ log.debug(Constants.LVS_SCHEDULE_ALGO + " = " + lvsScheduleAlgo);
}
}
@@ -185,4 +188,12 @@ public class LVSContext {
public void setServerState(String serverState) {
this.serverState = serverState;
}
+
+ public String getLvsScheduleAlgo() {
+ return lvsScheduleAlgo;
+ }
+
+ public void setLvsScheduleAlgo(String lvsScheduleAlgo) {
+ this.lvsScheduleAlgo = lvsScheduleAlgo;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/999ffd7f/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSStatisticsReader.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSStatisticsReader.java b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSStatisticsReader.java
index cfb3435..2bf9003 100644
--- a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSStatisticsReader.java
+++ b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSStatisticsReader.java
@@ -34,7 +34,8 @@ import java.io.IOException;
public class LVSStatisticsReader implements LoadBalancerStatisticsReader {
private static final Log log = LogFactory.getLog(LVSStatisticsReader.class);
- private static final String IPVSADM_STATS_COMMAND = "sudo ipvsadm -L -n |grep Route"; //"ipvsadm -l --stats | grep TCP"
+ private static final String IPVSADM_STATS_COMMAND = "sudo ipvsadm -L -n |grep Route";
+ //"ipvsadm -l --stats | grep TCP"
private TopologyProvider topologyProvider;