SOHO-DBproxy源码分析-- proxy plugin配置加载

1.配置加载

int network_mysqld_proxy_plugin_apply_config(chassis *chas, chassis_plugin_config *config);
这是proxy plugin配置加载函数。proxy plugin的配置通过一个指针指向主配置

config->chas = chas; //config的类型为chassis_plugin_config,每个插件都有各自不同的实现

backends的信息保存在主配置中:

chassis_private *g = chas->priv;
/** 
 * @author sohu-inc.com
 * 为实现对cons的同步访问
 */     
struct chassis_private {
    GMutex cons_mutex;
    GPtrArray *cons;                          /**< array(network_mysqld_con) */
    network_backends_t *backends;
    gint connection_id_sequence;
};


SOHO对读写请求分别配置负载均衡算法,可选的算法有两种,保存在主配置中

GString * (* lb_algo_func[2])( chassis *chas, proxy_rw conn_type);

最小连接数算法:

chas->lb_algo[PROXY_TYPE_WRITE] = "lc";
chas->lb_algo_func[PROXY_TYPE_WRITE] = loadbalance_lc_select; //针对写请求

chas->lb_algo[PROXY_TYPE_READ] = "lc";
chas->lb_algo_func[PROXY_TYPE_READ] = loadbalance_lc_select; //针对读请求


权重算法:

chas->lb_algo[PROXY_TYPE_WRITE] = "wrr";
chas->lb_algo_func[PROXY_TYPE_WRITE] = loadbalance_wrr_select;


chas->lb_algo[PROXY_TYPE_READ] = "wrr";
chas->lb_algo_func[PROXY_TYPE_READ] = loadbalance_wrr_select;


默认情况下,选择最小连接数算法作为负载均衡算法。


SOHO对于读写请求也提供了不同的监听端口(支持动态绑定多虚ip),默认配置如下:

g_string_append(chas->listen_addresses[PROXY_TYPE_WRITE], ":4040");
g_string_append(chas->listen_addresses[PROXY_TYPE_READ], ":4242");

每个监听地址拥有不同的配置:

config->listen_configs[0] = g_ptr_array_new();//写监听地址,每个数组成员为一个chassis_plugin_config
config->listen_configs[1] = g_ptr_array_new();//读监听地址,<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">每个数组成员为一个chassis_plugin_config</span>


通过以下函数创建监听连接并加载其配置(大部分属性继承上层配置)

struct chassis_plugin_config *chassis_plugin_config_new_init_2(
        const struct chassis_plugin_config *config,
        const gchar *ip_port, proxy_rw type,
        chassis *chas)

该函数创建监听连接并加载配置后将监听连接会被汇总到主配置中

g_hash_table_insert(chas->listen_cons[type], listen_key, con);//key是ip和port


完成对监听连接和负载均衡算法的配置后,开始加载backends的信息:

gboolean co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值