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