Master Slave Server Group
A master slave server group contains two ECS instances. The master slave server group can help you to define multiple listening dimension.
NOTE: One ECS instance can be added into multiple master slave server groups. NOTE: One master slave server group can only add two ECS instances, which are master server and slave server. NOTE: One master slave server group can be attached with tcp/udp listeners in one load balancer. NOTE: One Classic and Internet load balancer, its master slave server group can add Classic and VPC ECS instances. NOTE: One Classic and Intranet load balancer, its master slave server group can only add Classic ECS instances. NOTE: One VPC load balancer, its master slave server group can only add the same VPC ECS instances. NOTE: Available in 1.54.0+
Example Usage
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.AlicloudFunctions;
import com.pulumi.alicloud.inputs.GetZonesArgs;
import com.pulumi.alicloud.ecs.EcsFunctions;
import com.pulumi.alicloud.ecs.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.ecs.inputs.GetImagesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.ecs.Instance;
import com.pulumi.alicloud.ecs.InstanceArgs;
import com.pulumi.alicloud.slb.ApplicationLoadBalancer;
import com.pulumi.alicloud.slb.ApplicationLoadBalancerArgs;
import com.pulumi.alicloud.ecs.EcsNetworkInterface;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceArgs;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceAttachment;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceAttachmentArgs;
import com.pulumi.alicloud.slb.MasterSlaveServerGroup;
import com.pulumi.alicloud.slb.MasterSlaveServerGroupArgs;
import com.pulumi.alicloud.slb.inputs.MasterSlaveServerGroupServerArgs;
import com.pulumi.alicloud.slb.Listener;
import com.pulumi.alicloud.slb.ListenerArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var config = ctx.config();
final var msServerGroupZones = AlicloudFunctions.getZones(GetZonesArgs.builder()
.availableDiskCategory("cloud_efficiency")
.availableResourceCreation("VSwitch")
.build());
final var msServerGroupInstanceTypes = EcsFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.availabilityZone(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.eniAmount(2)
.build());
final var image = EcsFunctions.getImages(GetImagesArgs.builder()
.nameRegex("^ubuntu_18.*64")
.mostRecent(true)
.owners("system")
.build());
final var slbMasterSlaveServerGroup = config.get("slbMasterSlaveServerGroup").orElse("forSlbMasterSlaveServerGroup");
var mainNetwork = new Network("mainNetwork", NetworkArgs.builder()
.vpcName(slbMasterSlaveServerGroup)
.cidrBlock("172.16.0.0/16")
.build());
var mainSwitch = new Switch("mainSwitch", SwitchArgs.builder()
.vpcId(mainNetwork.id())
.cidrBlock("172.16.0.0/16")
.zoneId(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.vswitchName(slbMasterSlaveServerGroup)
.build());
var groupSecurityGroup = new SecurityGroup("groupSecurityGroup", SecurityGroupArgs.builder()
.vpcId(mainNetwork.id())
.build());
for (var i = 0; i < 2; i++) {
new Instance("msServerGroupInstance-" + i, InstanceArgs.builder()
.imageId(image.applyValue(getImagesResult -> getImagesResult.images()[0].id()))
.instanceType(msServerGroupInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.instanceTypes()[0].id()))
.instanceName(slbMasterSlaveServerGroup)
.securityGroups(groupSecurityGroup.id())
.internetChargeType("PayByTraffic")
.internetMaxBandwidthOut("10")
.availabilityZone(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.instanceChargeType("PostPaid")
.systemDiskCategory("cloud_efficiency")
.vswitchId(mainSwitch.id())
.build());
}
var msServerGroupApplicationLoadBalancer = new ApplicationLoadBalancer("msServerGroupApplicationLoadBalancer", ApplicationLoadBalancerArgs.builder()
.loadBalancerName(slbMasterSlaveServerGroup)
.vswitchId(mainSwitch.id())
.loadBalancerSpec("slb.s2.small")
.build());
var msServerGroupEcsNetworkInterface = new EcsNetworkInterface("msServerGroupEcsNetworkInterface", EcsNetworkInterfaceArgs.builder()
.networkInterfaceName(slbMasterSlaveServerGroup)
.vswitchId(mainSwitch.id())
.securityGroupIds(groupSecurityGroup.id())
.build());
var msServerGroupEcsNetworkInterfaceAttachment = new EcsNetworkInterfaceAttachment("msServerGroupEcsNetworkInterfaceAttachment", EcsNetworkInterfaceAttachmentArgs.builder()
.instanceId(msServerGroupInstance[0].id())
.networkInterfaceId(msServerGroupEcsNetworkInterface.id())
.build());
var groupMasterSlaveServerGroup = new MasterSlaveServerGroup("groupMasterSlaveServerGroup", MasterSlaveServerGroupArgs.builder()
.loadBalancerId(msServerGroupApplicationLoadBalancer.id())
.servers(
MasterSlaveServerGroupServerArgs.builder()
.serverId(msServerGroupInstance[0].id())
.port(100)
.weight(100)
.serverType("Master")
.build(),
MasterSlaveServerGroupServerArgs.builder()
.serverId(msServerGroupInstance[1].id())
.port(100)
.weight(100)
.serverType("Slave")
.build())
.build());
var tcp = new Listener("tcp", ListenerArgs.builder()
.loadBalancerId(msServerGroupApplicationLoadBalancer.id())
.masterSlaveServerGroupId(groupMasterSlaveServerGroup.id())
.frontendPort("22")
.protocol("tcp")
.bandwidth("10")
.healthCheckType("tcp")
.persistenceTimeout(3600)
.healthyThreshold(8)
.unhealthyThreshold(8)
.healthCheckTimeout(8)
.healthCheckInterval(5)
.healthCheckHttpCode("http_2xx")
.healthCheckConnectPort(20)
.healthCheckUri("/console")
.establishedTimeout(600)
.build());
}
}
Block servers
The servers mapping supports the following:
server_ids
- (Required) A list backend server ID (ECS instance ID).port
- (Required) The port used by the backend server. Valid value range: 1-65535.weight
- (Optional) Weight of the backend server. Valid value range: 0-100. Default to 100.type
- (Optional, Available in 1.51.0+) Type of the backend server. Valid value ecs, eni. Default to eni.server_type
- (Optional) The server type of the backend server. Valid value Master, Slave.is_backup
- (Removed from v1.63.0) Determine if the server is executing. Valid value 0, 1.
Import
Load balancer master slave server group can be imported using the id, e.g.
$ pulumi import alicloud:slb/masterSlaveServerGroup:MasterSlaveServerGroup example abc123456