高可用性参数
高可用性(HA)功能是通过指定以下参数和位掩码值来进行配置的。
产品概述,请参阅 HA应用介绍。
主机端参数
下面的结构被初始化并传递给函数 mco_HA_set_master_params()
::
typedef struct
{
uint4 mode_flags; /* 高可用性模式和选项标志 */
uint2 max_number_of_replicas;
mco_device_t async_databuf; /* 支持 MCO_HAMODE_ASYNC */
uint4 trans_log_length; /* 支持 STATEFUL_REPLICATION */
timer_unit commit_timeout; /* 将事务数据发送到副本 */
timer_unit initial_timeout; /* attach_replica()超时(初始同步) */
timer_unit synch_timeout; /* 等待副本确认 */
timer_unit detach_timeout; /* 分离副本 */
uint2 mcast_port; /* 组播支持 */
const char *mcast_addr;
mco_HA_ErrorHandler errhandler; /* 分离副本回调 */
void *errhandler_ctx; /* 分离副本回调上下文 */
uint4 hotsync_msg_objects;
uint4 hotsync_msg_size;
uint8 initial_ha_sequencer;
void *ssl_params;
mco_bool disable_writes_on_kill;
/* 如果在原主实例已重启的情况下允许重新切换回副本实例,可能会导致事务丢失。*/
uint2 quorum; /* 多数投票机制的初始值 */
int compression_level; /* 压缩程度 */
} mco_HA_master_params_t;
副本端参数
下面的结构被初始化并传递给函数 mco_HA_attach_master()
::
typedef struct
{
uint4 mode_flags;
timer_unit initial_timeout; /* 初始同步超时 */
timer_unit commit_timeout; /* 读取事务数据 */
timer_unit wait_data_timeout; /* 副本等待下一次提交的时间 */
mco_ha_notifying notifying_callback; /* 指向通知回调例程的指针 */
void* notifying_context; /* 用户定义的通知回调例程参数 */
uint2 repeat_counter; /* 重复提交的尝试计数器 */
uint2 mcast_port;
const char *mcast_addr;
const char* cancelpoint_addr;
MCO_COMMIT_POLICY initial_commit_policy; /* 初始同步期间的磁盘提交策略 */
uint4 initial_objs_in_trans; /* 初始同步期间每个事务的对象数 */
void *ssl_params;
mco_trans_iterator_callback_t iterator; /* 与副本端事务迭代相关 */
void *iterator_context; /* 与副本端事务迭代相关 */
uint4 batch_commit_length; /* 事务中 */
uint4 batch_commit_bsize; /* 以字节数为单位 */
timer_unit batch_commit_period; /* 以微秒为单位 */
int compression_level; /* 压缩程度 */
} mco_HA_replica_params_t;
批量提交参数
如果 batch_commit_length
和 batch_commit_bsize
均为 0,则不使用批量提交(无论 batch_commit_period
的值是多少)。
请注意,批量提交仅对异步复制模式或事务窗口大小大于 1 的同步模式有意义。这是因为 HA 运行时总是在副本向主节点确认之前提交一批事务。这保留了同步复制的语义:如果副本通过确认报告成功提交,则该事务已在副本上提交。
示例
以下是一些不同批量提交行为的示例设置。在所有这些示例中,batch_commit_period
的默认值为 1000(1 秒)。
- 无论事务大小,最多合并 10 个事务:
mco_HA_replica_params_t rpl_p;
mco_HA_replica_params_init( &rpl_p );
rpl_p.batch_commit_length = 10;
- 在总大小小于100Kb的情况下,最多合并10个事务:
mco_HA_replica_params_t rpl_p;
mco_HA_replica_params_init( &rpl_p );
rpl_p.batch_commit_length = 10;
rpl_p.batch_commit_bsize = 100 * 1024;
- 合并总大小小于1Mb的事务:
mco_HA_replica_params_t rpl_p;
mco_HA_replica_params_init( &rpl_p );
rpl_p.batch_commit_bsize = 1024 * 1024;
主机端状态
在结构体 mco_HA_master_params_t 中的 mode_flags
元素被指定为以下一个或多个位掩码值的组合:
/* 主模式标志 */
#define MCO_MASTER_MODE 0x1
#define MCO_HAMODE_MULTIPROCESS_COMMIT 0x2
#define MCO_HAMODE_ASYNCH 0x4
#define MCO_HAMODE_MCAST 0x8
#define MCO_HAMODE_MCAST_RELIABLE 0x10
#define MCO_HAMODE_HOTSYNCH 0x20
#define MCO_HAMODE_STATEFUL_REPLICATION 0x40
#define MCO_HAMODE_BINEVOLUTION 0x80
副本端状态
在结构体 mco_HA_replica_params_t 中的 mode_flags
元素被指定为以下一个或多个位掩码值的组合:
/* 副本模式标志 */
#define MCO_HAMODE_ALLOW_CANCEL 0x2000
#define MCO_HAMODE_FORCE_MASTER 0x4000
#define MCO_HAMODE_REPLICA_NOTIFICATION 0x8000
#define MCO_HAMODE_FORCE_SYNC 0x10000
/* 意味着副本和主服务器需要在初始同步阶段交换关于已注册REST接口的信息 */
#define MCO_HAMODE_SEND_RESTLIST 0x20000
#define MCO_HAMODE_EXPLICIT_WRITE_ACCESS 0x40000