基于WiredLB添加MINIO集群负载均衡
This commit is contained in:
69
cache/tango_cache_client.cpp
vendored
69
cache/tango_cache_client.cpp
vendored
@@ -33,6 +33,18 @@ void caculate_sha256(const char *data, unsigned long len, char *result, u_int32_
|
||||
}
|
||||
}
|
||||
|
||||
int wired_load_balancer_lookup(WLB_handle_t wiredlb, const char *key, int keylen, char *host, size_t hostsize)
|
||||
{
|
||||
struct WLB_consumer_t chosen;
|
||||
|
||||
if(wiredLB_lookup(wiredlb, key, keylen, &chosen))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
snprintf(host, hostsize, "%s:%u", chosen.ip_addr, chosen.data_port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum CACHE_ERR_CODE tango_cache_get_last_error(const struct tango_cache_ctx *ctx)
|
||||
{
|
||||
return ctx->error_code;
|
||||
@@ -261,7 +273,12 @@ struct tango_cache_ctx *tango_cache_update_prepare(struct tango_cache_instance *
|
||||
{
|
||||
snprintf(ctx->object_key, 256, "%s", meta->url);
|
||||
}
|
||||
sprintf(ctx->hostaddr, "%s", instance->minio_hostlist);
|
||||
if(wired_load_balancer_lookup(instance->wiredlb, meta->url, strlen(meta->url), ctx->hostaddr, 48))
|
||||
{
|
||||
instance->error_code = CACHE_ERR_WIREDLB;
|
||||
free(ctx);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//Expires<65>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ
|
||||
now = time(NULL);
|
||||
@@ -377,7 +394,12 @@ struct tango_cache_ctx *tango_cache_fetch_prepare(struct tango_cache_instance *i
|
||||
{
|
||||
snprintf(ctx->object_key, 256, "%s", meta->url);
|
||||
}
|
||||
sprintf(ctx->hostaddr, "%s", instance->minio_hostlist);
|
||||
if(wired_load_balancer_lookup(instance->wiredlb, meta->url, strlen(meta->url), ctx->hostaddr, 48))
|
||||
{
|
||||
instance->error_code = CACHE_ERR_WIREDLB;
|
||||
free(ctx);
|
||||
return NULL;
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
@@ -405,7 +427,12 @@ struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance *
|
||||
{
|
||||
snprintf(ctx->object_key, 256, "%s", objkey);
|
||||
}
|
||||
sprintf(ctx->hostaddr, "%s", instance->minio_hostlist);
|
||||
if(wired_load_balancer_lookup(instance->wiredlb, objkey, strlen(objkey), ctx->hostaddr, 48))
|
||||
{
|
||||
instance->error_code = CACHE_ERR_WIREDLB;
|
||||
free(ctx);
|
||||
return NULL;
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
@@ -564,7 +591,8 @@ static int load_local_configure(struct tango_cache_instance *instance, const cha
|
||||
instance->cache_limit_size = longval * 1024 * 1024;
|
||||
MESA_load_profile_string_def(profile_path, section, "CACHE_BUCKET_NAME", instance->bucketname, 256, "openbucket");
|
||||
MESA_load_profile_uint_def(profile_path, section, "CACHE_OBJECT_KEY_HASH_SWITCH", &instance->hash_object_key, 1);
|
||||
if(MESA_load_profile_string_nodef(profile_path, section, "MINIO_BROKERS_LIST", instance->minio_hostlist, 64) < 0)
|
||||
MESA_load_profile_uint_def(profile_path, section, "MINIO_LISTEN_PORT", &instance->minio_port, 9000);
|
||||
if(MESA_load_profile_string_nodef(profile_path, section, "MINIO_IP_LIST", instance->minio_iplist, 4096) < 0)
|
||||
{
|
||||
MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "Load config %s [%s] MINIO_BROKERS_LIST not found.\n", profile_path, section);
|
||||
return -1;
|
||||
@@ -583,6 +611,34 @@ static int load_local_configure(struct tango_cache_instance *instance, const cha
|
||||
}
|
||||
instance->relative_ttl = intval;
|
||||
|
||||
//Wired_LB<4C><42><EFBFBD><EFBFBD>
|
||||
MESA_load_profile_string_def(profile_path, section, "WIREDLB_TOPIC", instance->wiredlb_topic, 64, "TANGO_CACHE_PRODUCER");
|
||||
MESA_load_profile_string_def(profile_path, section, "WIREDLB_GROUP", instance->wiredlb_group, 64, "KAZAKHSTAN");
|
||||
MESA_load_profile_string_def(profile_path, section, "WIREDLB_DATACENTER", instance->wiredlb_datacenter, 64, "ASTANA");
|
||||
MESA_load_profile_uint_def(profile_path, section, "WIREDLB_OVERRIDE", &instance->wiredlb_override, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wired_load_balancer_init(struct tango_cache_instance *instance)
|
||||
{
|
||||
instance->wiredlb = wiredLB_create(instance->wiredlb_topic, instance->wiredlb_group, WLB_PRODUCER);
|
||||
if(instance->wiredlb == NULL)
|
||||
{
|
||||
MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "wiredLB_create failed.\n");
|
||||
return -1;
|
||||
}
|
||||
wiredLB_set_opt(instance->wiredlb, WLB_OPT_ENABLE_OVERRIDE, &instance->wiredlb_override, sizeof(instance->wiredlb_override));
|
||||
wiredLB_set_opt(instance->wiredlb, WLB_PROD_OPT_DATACENTER, instance->wiredlb_datacenter, strlen(instance->wiredlb_datacenter)+1);
|
||||
if(instance->wiredlb_override)
|
||||
{
|
||||
wiredLB_set_opt(instance->wiredlb, WLB_PROD_OPT_OVERRIDE_PRIMARY_IP, instance->minio_iplist, strlen(instance->minio_iplist)+1);
|
||||
wiredLB_set_opt(instance->wiredlb, WLB_PROD_OPT_OVERRIDE_DATAPORT, &instance->minio_port, sizeof(instance->minio_port));
|
||||
}
|
||||
if(wiredLB_init(instance->wiredlb) < 0)
|
||||
{
|
||||
MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "wiredLB_init failed.\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -598,6 +654,11 @@ struct tango_cache_instance *tango_cache_instance_new(struct event_base* evbase,
|
||||
free(instance);
|
||||
return NULL;
|
||||
}
|
||||
if(wired_load_balancer_init(instance))
|
||||
{
|
||||
free(instance);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
instance->evbase = evbase;
|
||||
instance->multi_hd = curl_multi_init();
|
||||
|
||||
Reference in New Issue
Block a user