mirror of https://github.com/apache/cloudstack.git
fixed internal load balancing
This commit is contained in:
parent
d4039743d2
commit
a790f55a60
|
|
@ -5,7 +5,7 @@
|
|||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
|
|
@ -25,11 +25,12 @@ import javax.ejb.Local;
|
|||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
|
||||
import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
|
||||
import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.AgentManager.OnError;
|
||||
import com.cloud.agent.api.Answer;
|
||||
|
|
@ -114,6 +115,7 @@ import com.cloud.vm.VirtualMachineManager;
|
|||
import com.cloud.vm.VirtualMachineName;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.VirtualMachineProfile.Param;
|
||||
import com.cloud.vm.VmWork;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
|
||||
|
|
@ -208,7 +210,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
// Internal LB control command is sent over management server in VMware
|
||||
if (dest.getHost().getHypervisorType() == HypervisorType.VMware) {
|
||||
if (s_logger.isInfoEnabled()) {
|
||||
s_logger.info("Check if we need to add management server explicit route to Internal LB. pod cidr: "
|
||||
s_logger.info("Check if we need to add management server explicit route to Internal LB. pod cidr: "
|
||||
+ dest.getPod().getCidrAddress() + "/" + dest.getPod().getCidrSize()
|
||||
+ ", pod gateway: " + dest.getPod().getGateway() + ", management host: " + _mgmtHost);
|
||||
}
|
||||
|
|
@ -325,7 +327,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
// restart network if restartNetwork = false is not specified in profile parameters
|
||||
boolean reprogramGuestNtwk = true;
|
||||
if (profile.getParameter(Param.ReProgramGuestNetworks) != null
|
||||
if (profile.getParameter(Param.ReProgramGuestNetworks) != null
|
||||
&& (Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) {
|
||||
reprogramGuestNtwk = false;
|
||||
}
|
||||
|
|
@ -367,7 +369,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
@Override
|
||||
public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException,
|
||||
InsufficientCapacityException {
|
||||
InsufficientCapacityException {
|
||||
//not supported
|
||||
throw new UnsupportedOperationException("Plug nic is not supported for vm of type " + vm.getType());
|
||||
}
|
||||
|
|
@ -481,13 +483,13 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
Network guestNetwork = _ntwkModel.getNetwork(guestNetworkId);
|
||||
Nic guestNic = _nicDao.findByNtwkIdAndInstanceId(guestNetwork.getId(), internalLbVm.getId());
|
||||
NicProfile guestNicProfile = new NicProfile(guestNic, guestNetwork, guestNic.getBroadcastUri(), guestNic.getIsolationUri(),
|
||||
_ntwkModel.getNetworkRate(guestNetwork.getId(), internalLbVm.getId()),
|
||||
_ntwkModel.isSecurityGroupSupportedInNetwork(guestNetwork),
|
||||
NicProfile guestNicProfile = new NicProfile(guestNic, guestNetwork, guestNic.getBroadcastUri(), guestNic.getIsolationUri(),
|
||||
_ntwkModel.getNetworkRate(guestNetwork.getId(), internalLbVm.getId()),
|
||||
_ntwkModel.isSecurityGroupSupportedInNetwork(guestNetwork),
|
||||
_ntwkModel.getNetworkTag(internalLbVm.getHypervisorType(), guestNetwork));
|
||||
|
||||
LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs, guestNic.getIp4Address(),
|
||||
guestNic.getIp4Address(), internalLbVm.getPrivateIpAddress(),
|
||||
LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs, guestNic.getIp4Address(),
|
||||
guestNic.getIp4Address(), internalLbVm.getPrivateIpAddress(),
|
||||
_itMgr.toNicTO(guestNicProfile, internalLbVm.getHypervisorType()), internalLbVm.getVpcId());
|
||||
|
||||
cmd.lbStatsVisibility = _configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key());
|
||||
|
|
@ -537,7 +539,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
_accountMgr.checkAccess(caller, null, true, internalLbVm);
|
||||
|
||||
return _itMgr.expunge(internalLbVm, _accountMgr.getActiveUser(callerUserId), caller);
|
||||
return _itMgr.expunge(internalLbVm, _accountMgr.getActiveUser(callerUserId), caller);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -555,7 +557,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
protected VirtualRouter stopInternalLbVm(DomainRouterVO internalLbVm, boolean forced, Account caller, long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException {
|
||||
s_logger.debug("Stopping internal lb vm " + internalLbVm);
|
||||
try {
|
||||
if (_itMgr.advanceStop((DomainRouterVO) internalLbVm, forced, _accountMgr.getActiveUser(callerUserId), caller)) {
|
||||
if (_itMgr.advanceStop(internalLbVm, forced, _accountMgr.getActiveUser(callerUserId), caller)) {
|
||||
return _internalLbVmDao.findById(internalLbVm.getId());
|
||||
} else {
|
||||
return null;
|
||||
|
|
@ -567,7 +569,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
|
||||
@Override
|
||||
public List<DomainRouterVO> deployInternalLbVm(Network guestNetwork, Ip requestedGuestIp, DeployDestination dest,
|
||||
public List<DomainRouterVO> deployInternalLbVm(Network guestNetwork, Ip requestedGuestIp, DeployDestination dest,
|
||||
Account owner, Map<Param, Object> params) throws InsufficientCapacityException,
|
||||
ConcurrentOperationException, ResourceUnavailableException {
|
||||
|
||||
|
|
@ -576,7 +578,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
return startInternalLbVms(params, internalLbVms);
|
||||
}
|
||||
|
||||
protected List<DomainRouterVO> startInternalLbVms(Map<Param, Object> params, List<DomainRouterVO> internalLbVms)
|
||||
protected List<DomainRouterVO> startInternalLbVms(Map<Param, Object> params, List<DomainRouterVO> internalLbVms)
|
||||
throws StorageUnavailableException, InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
|
||||
List<DomainRouterVO> runningInternalLbVms = null;
|
||||
|
||||
|
|
@ -602,8 +604,8 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
|
||||
@DB
|
||||
protected List<DomainRouterVO> findOrDeployInternalLbVm(Network guestNetwork, Ip requestedGuestIp, DeployDestination dest,
|
||||
Account owner, Map<Param, Object> params) throws ConcurrentOperationException,
|
||||
protected List<DomainRouterVO> findOrDeployInternalLbVm(Network guestNetwork, Ip requestedGuestIp, DeployDestination dest,
|
||||
Account owner, Map<Param, Object> params) throws ConcurrentOperationException,
|
||||
InsufficientCapacityException, ResourceUnavailableException {
|
||||
|
||||
List<DomainRouterVO> internalLbVms = new ArrayList<DomainRouterVO>();
|
||||
|
|
@ -681,7 +683,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
s_logger.debug("Adding nic for Internal LB in Guest network " + guestNetwork);
|
||||
NicProfile guestNic = new NicProfile();
|
||||
if (guestIp != null) {
|
||||
guestNic.setIp4Address(guestIp.addr());
|
||||
guestNic.setIp4Address(guestIp.addr());
|
||||
} else {
|
||||
guestNic.setIp4Address(_ntwkMgr.acquireGuestIpAddress(guestNetwork, null));
|
||||
}
|
||||
|
|
@ -783,9 +785,9 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
continue;
|
||||
}
|
||||
|
||||
internalLbVm = new DomainRouterVO(id, routerOffering.getId(), internalLbProviderId,
|
||||
internalLbVm = new DomainRouterVO(id, routerOffering.getId(), internalLbProviderId,
|
||||
VirtualMachineName.getSystemVmName(id, _instance, _internalLbVmNamePrefix), template.getId(), template.getHypervisorType(),
|
||||
template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false,
|
||||
template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false,
|
||||
RedundantState.UNKNOWN, false, false, VirtualMachine.Type.InternalLoadBalancerVm, vpcId);
|
||||
internalLbVm.setRole(Role.INTERNAL_LB_VM);
|
||||
internalLbVm = _itMgr.allocate(internalLbVm, template, routerOffering, networks, plan, null, owner);
|
||||
|
|
@ -827,7 +829,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
|
||||
|
||||
protected DomainRouterVO startInternalLbVm(DomainRouterVO internalLbVm, Account caller, long callerUserId, Map<Param, Object> params)
|
||||
protected DomainRouterVO startInternalLbVm(DomainRouterVO internalLbVm, Account caller, long callerUserId, Map<Param, Object> params)
|
||||
throws StorageUnavailableException, InsufficientCapacityException,
|
||||
ConcurrentOperationException, ResourceUnavailableException {
|
||||
s_logger.debug("Starting Internal LB VM " + internalLbVm);
|
||||
|
|
@ -844,7 +846,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
}
|
||||
|
||||
|
||||
protected List<HypervisorType> getHypervisors(DeployDestination dest, DeploymentPlan plan,
|
||||
protected List<HypervisorType> getHypervisors(DeployDestination dest, DeploymentPlan plan,
|
||||
List<HypervisorType> supportedHypervisors) throws InsufficientServerCapacityException {
|
||||
List<HypervisorType> hypervisors = new ArrayList<HypervisorType>();
|
||||
|
||||
|
|
@ -874,7 +876,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean applyLoadBalancingRules(Network network, final List<LoadBalancingRule> rules, List<? extends VirtualRouter> internalLbVms)
|
||||
public boolean applyLoadBalancingRules(Network network, final List<LoadBalancingRule> rules, List<? extends VirtualRouter> internalLbVms)
|
||||
throws ResourceUnavailableException {
|
||||
if (rules == null || rules.isEmpty()) {
|
||||
s_logger.debug("No lb rules to be applied for network " + network);
|
||||
|
|
@ -890,7 +892,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
if (lbVm.getState() == State.Running) {
|
||||
return sendLBRules(lbVm, rules, network.getId());
|
||||
} else if (lbVm.getState() == State.Stopped || lbVm.getState() == State.Stopping) {
|
||||
s_logger.debug("Internal LB VM " + lbVm.getInstanceName() + " is in " + lbVm.getState() +
|
||||
s_logger.debug("Internal LB VM " + lbVm.getInstanceName() + " is in " + lbVm.getState() +
|
||||
", so not sending apply lb rules commands to the backend");
|
||||
return true;
|
||||
} else {
|
||||
|
|
@ -937,7 +939,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
|
||||
@Override
|
||||
public VirtualRouter startInternalLbVm(long internalLbVmId, Account caller, long callerUserId)
|
||||
public VirtualRouter startInternalLbVm(long internalLbVmId, Account caller, long callerUserId)
|
||||
throws StorageUnavailableException, InsufficientCapacityException,
|
||||
ConcurrentOperationException, ResourceUnavailableException {
|
||||
|
||||
|
|
@ -948,4 +950,16 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
|
||||
return startInternalLbVm(internalLbVm, caller, callerUserId, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmWorkStart(VmWork work) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmWorkStop(VmWork work) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue