负载均衡SDK实践
概览
负载均衡SDK,是通过封装OpenAPI协议,简化租户上云的一种方式。由于租户内部业务系统程序开发语言各不相同,会提供多种程序语言版本的SDK。在使用SDK时,还需要对服务域名、Access Key/Secret Key密钥对及网络配置参数(如:连接数上限、超时设置等)进行配置。
负载均衡SDK使用实践
下面将以Go语言版本SDK为例,演示如何通过SDK实现负载均衡实例的创建、变配直到销毁的整个过程。
1.资源准备
在创建负载均衡前,除了确认SDK的服务域名、Access Key/Secret Key之外,同样需要准备好所在地域内的VPC、子网及云服务器等资源。其中,子网与云服务器要创建在相同VPC内。
2.创建应用型负载均衡实例
根据VPC实例ID与子网ID创建负载均衡实例,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func CreateLoadBalancer() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    createBlbArgs := &appblb.CreateLoadBalancerArgs{
7        Name: "blb-test",            // 实例名称
8        VpcId: "vpc-xxxxxxxx",       // 实例所在的专有网络的唯一ID
9        SubnetId: "sbn-xxxxxxxx",    // 实例所在的子网的唯一ID
10    }
11    // 创建负载均衡实例
12    response, _ := BlbClient.CreateLoadBalancer(createBlbArgs) 
13}
            3.查询应用型负载均衡实例
根据负载均衡ID查询实例的详细信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DescribeLoadBalancers() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    describeBlbsArgs := &appblb.DescribeLoadBalancersArgs{}
7    // 查询负载均衡实例列表
8    response, _ := BlbClient.DescribeLoadBalancers(describeBlbsArgs) 
9}
            4.更新应用型负载均衡实例
根据负载均衡ID更新实例信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func UpdateLoadBalancer() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    BlbID := "blb-xxxxxxxx"                            // 实例ID
7    updateBlbArgs := &appblb.UpdateLoadBalancerArgs{
8        Name: "blb—test",                             // 实例名称
9        Description: "blb description",               // 实例描述
10    }
11    // 更新负载均衡实例
12    err := BlbClient.UpdateLoadBalancer(BlbID, updateBlbArgs) 
13    if err != nil {
14        panic(err)
15    }
16}
            5.创建监听
为负载均衡实例创建监听时,可配置监听端口和调度算法等信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DescribeAppTCPListeners() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    BlbID := "blb-xxxxxxxx"  // 实例ID
7    describeTCPListenersArgs := &appblb.DescribeAppListenerArgs{
8        ListenerPort: 80,    // 监听端口号
9    }
10    // 查询TCP监听
11    response, err := BlbClient.CreateAppTCPListeners(BlbID, describeTCPListenersArgs) 
12    if err != nil {
13        panic(err)
14    }
15}
            6.查询监听
根据负载均衡ID查询实例下的监听的详细信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DescribeAppTCPListeners() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    BlbID := "blb-xxxxxxxx"  // 实例ID
7    describeTCPListenersArgs := &appblb.DescribeAppListenerArgs{
8        ListenerPort: 80,    // 监听端口号
9    }
10    // 查询TCP监听
11    response, err := BlbClient.DescribeAppTCPListeners(BlbID, describeTCPListenersArgs) 
12    if err != nil {
13        panic(err)
14    }
15}
            7.更新监听
根据负载均衡ID和监听端口更新监听的配置信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func UpdateAppTCPListener() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your Endpoint"
5	appBlbClient, _ := appblb.NewClient(ak, sk, endpoint)   // 初始化客户端
6	blbID := "blb-xxxxxxxx"                                 // 实例ID
7	updateAppTCPListenerArgs := &appblb.UpdateAppTCPListenerArgs{
8		UpdateAppListenerArgs: appblb.UpdateAppListenerArgs{
9			ListenerPort: 80,                              // 监听端口
10			Scheduler: "RoundRobin",                       // 调度算法
11		},
12	}
13	// 更新监听
14	if err := appBlbClient.UpdateAppTCPListener(blbID, updateAppTCPListenerArgs); err != nil {
15		panic(err)
16	}
17}
            8.创建服务器组
根据负载均衡ID创建后端服务器组,创建时可以指定后端云服务器ID与权重信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func CreateAppServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxxx"
7	CreateAppServerGroupArgs := &appblb.CreateAppServerGroupArgs{
8		Name:        "sg_test",                // 服务器组名称
9		Description: "sg_test",                // 服务器组名称
10        BackendServerList: []AppBackendServer{
11			{
12				InstanceId: "i-xxxxxxxx",      // 云服务器ID
13				Weight:     20,                // 云服务器权重
14			},
15		},
16	}
17    // 创建服务器组
18	response, err := blbClient.CreateAppServerGroup(BlbID, CreateAppServerGroupArgs) 
19	if err != nil {
20		return
21	}
22}
            9.查询服务器组
根据负载均衡实例ID查询实例下所有的服务器组信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DescribeAppServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxxx"
7	DescribeAppServerGroupArgs := &appblb.DescribeAppServerGroupArgs{}
8    // 查询服务器组
9	response, err := blbClient.DescribeAppServerGroup(BlbID, DescribeAppServerGroupArgs) 
10	if err != nil {
11		return
12	}
13}
            10.更新服务器组
根据负载均衡实例ID和服务器组ID更新服务器组信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func UpdateAppServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxxx"
7	UpdateAppServerGroupArgs := &appblb.UpdateAppServerGroupArgs{
8		SgId: "sg-xxxxxxxx",           // 服务器组ID
9		Name: "sg-name",               // 服务器组名称
10		Description: "sg-test",        // 服务器组描述
11	}
12    // 更新服务器组
13	err := blbClient.UpdateAppServerGroup(BlbID, UpdateAppServerGroupArgs)
14	if err != nil {
15		return
16	}
17}
            11.创建服务器组端口
根据负载均衡实例ID与健康检查配置信息,创建服务器组端口,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func CreateAppServerGroupPort() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxx"
7	CreateAppServerGroupPortArgs := &appblb.CreateAppServerGroupPortArgs{
8		SgId: "sg-xxxxxxxx",             // 服务器组ID
9		Port: 80,                        // 服务器组端口
10		Type: "TCP",                     // 服务器组协议
11		HealthCheck: "TCP",              // 健康检查协议
12		HealthCheckPort: 80,             // 健康检查端口
13		HealthCheckTimeoutInSecond: 2,   // 健康检查超时时间
14		HealthCheckIntervalInSecond: 5,  // 健康检查间隔
15		HealthCheckDownRetry: 3,         // 不健康阈值
16		HealthCheckUpRetry: 3,           // 健康阈值
17	}
18    // 创建服务器组端口
19	result, err := blbClient.CreateAppServerGroupPort(BlbID, CreateAppServerGroupPortArgs)
20	if err != nil {
21		return
22	}
23}
            12.更新服务器组端口
通过负载均衡实例ID、服务器组ID以及服务器组端口ID,更新服务器组端口信息,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func UpdateAppServerGroupPort() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxxx"
7	UpdateAppServerGroupPortArgs := &appblb.UpdateAppServerGroupPortArgs{
8		SgId: "sg-xxxxxxxx",              // 服务器组ID
9		PortId: "sg_port-xxxxxxxx",       // 服务器组端口ID
10		HealthCheck: "TCP",               // 健康检查协议
11		HealthCheckPort: 80,              // 健康检查端口
12		HealthCheckTimeoutInSecond: 2,    // 健康检查超时时间
13		HealthCheckIntervalInSecond: 3,   // 健康检查间隔
14		HealthCheckDownRetry: 3,          // 不健康阈值
15		HealthCheckUpRetry: 1,            // 健康阈值
16	}
17    // 更新服务器组端口
18	err := blbClient.UpdateAppServerGroupPort(BlbID, UpdateAppServerGroupPortArgs) 
19	if err != nil {
20		return
21	}
22}
            13.创建策略(监听绑定服务器组)
通过负载均衡实例ID、服务器组ID以及服务器组端口ID,实现负载均衡前端端口和后端服务器组绑定,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func CreatePolicysServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	appblbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	AppBlbID := "blb-xxxxxxxx"
7	args := &appblb.CreatePolicysArgs{
8		ListenerPort: 80,     // 监听端口
9		Type: "TCP",          // 监听协议
10		AppPolicyVos: []appblb.AppPolicy{        // 监听绑定策略列表
11			{
12				Description: "test",             // 策略描述
13				Priority: 100,                   // 策略优先级
14				AppServerGroupId: "sg-xxxxxxxx", // 服务器组ID
15				BackendPort: 80,                 // 服务器组端口号
16				RuleList: []appblb.AppRule{      // 策略规则列表
17					{
18						Key: "*",                // 规则的类型
19						Value: "*",              // 通配符匹配字符串
20					},
21				},
22			},
23		},
24	}
25    // 创建策略
26	if err := appblbClient.CreatePolicys(AppBlbID, args); err != nil {
27		return
28	}
29}
            14.查询策略
根据负载均衡实例ID及监听信息查询转发策略,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DescribePolicysServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	appblbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	AppBlbID := "blb-xxxxxxxx"
7	args := &appblb.DescribePolicysArgs{
8		Port: 80,
9		Type: "TCP",
10	}
11    // 查询策略
12	response, err := appblbClient.DescribePolicys(AppBlbID, args) 
13	if err != nil {
14		return
15	}
16}
            15.删除策略
根据负载均衡实例ID及转发策略ID,删除转发策略,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DeletePolicys() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	appblbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	AppBlbID := "blb-xxxxxxxx"
7	args := &appblb.DeletePolicysArgs{
8		Port: 80,                 // 监听端口
9		Type: "TCP",              // 监听协议
10		PolicyIdList: []string{  
11			"policy-xxxxxxxx",    // 策略ID
12		},
13	}
14    // 删除策略
15	if err := appblbClient.DeletePolicys(AppBlbID, args); err != nil { 
16		return
17	}
18}
            16.删除服务器组端口
根据负载均衡实例ID及服务器组端口ID,删除服务器组端口,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DeleteAppServerGroupPort() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	BlbID := "blb-xxxxxxxx"
7	DeleteAppServerGroupPortArgs := &appblb.DeleteAppServerGroupPortArgs{
8		SgId: "sg-xxxxxxxx",                             // 服务器组ID
9		PortIdList: []string{"sg_port-xxxxxxxx"},        // 服务器组端口ID
10	}
11    // 删除服务器组端口
12	err := blbClient.DeleteAppServerGroupPort(BlbID, DeleteAppServerGroupPortArgs) 
13	if err != nil {
14		return
15	}
16}
            17.删除服务器组
根据负载均衡实例ID及服务器组ID,删除服务器组,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DeleteAppServerGroup() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	blbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	blbId := "blb-xxxxxxxx"
7	deleteAppServerGroupArgs := &appblb.DeleteAppServerGroupArgs{
8		SgId: "sg-xxxxxxxx", // 服务器组ID
9	}
10    // 删除服务器组
11	err := blbClient.DeleteAppServerGroup(blbId, deleteAppServerGroupArgs) 
12	if err != nil {
13		return
14	}
15}
            18.删除监听
根据负载均衡实例ID及监听信息,删除监听,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DeleteAppListeners() {
4	ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5	client, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6	blbID := "blb-xxxxxxxx"
7	args := &appblb.DeleteAppListenersArgs{
8		PortList: []uint16{
9			80, // 监听端口
10		},
11	}
12    // 删除监听
13	err = client.DeleteAppListeners(blbID, args) 
14	if err != nil {
15		panic(err)
16	}
17}
            19.释放应用型负载均衡
根据负载均衡实例ID,删除负载均衡实例,相关代码如下所示。
1import "github.com/baidubce/bce-sdk-go/services/appblb"
2
3func DeleteLoadBalancer() {
4    ak, sk, endpoint := "Your AK", "Your SK", "Your endpoint"
5    BlbClient, _ := appblb.NewClient(ak, sk, endpoint) // 初始化客户端
6    BlbID := "blb-xxxxxxxx"                            // 实例ID
7    // 释放负载均衡实例
8    err := BlbClient.DeleteLoadBalancer(BlbID) 
9    if err != nil {
10        panic(err)
11    }
12}
            