读写分离集群(RW)配置

配置说明

启动模式

神通支持以下两种搭建集群的方式:

1: 将所有使用同一物理备份进行恢复后的节点,以备机模式启动(参数 HOTSTANDBY_DATABASE_TYPE 设置为 2)。 节点在备机模式时可以进行读操作,并且也可通过命令将自身添加进集群并作为集群的第一个节点。 在将当前连接的节点添加成第一个节点后,通过 alter database add node 语句将其它节点依次添加进集群。

2: 也可先将一个节点以普通模式启动(参数 HOTSTANDBY_DATABASE_TYPE 设置为 0),通过 alter database set node list 语句将所有结点加到集群。 然后关闭数据库并将参数 HOTSTANDBY_DATABASE_TYPE 修改为 2,将整个数据库复制到所有的节点,启动所有节点上的数据库。

注解

只有开启了日志归档的数据库,才能被添加为读写分离的节点。

节点类型

神通高可用集群的节点分为两种:

  • 同步节点

    同步节点用于保护数据,可作为主机运行,集群系统中的master在同步节点之间选举产生。

  • 异步节点

    异步节点用于提供只读数据或远程灾备,它不参与master的竞选,只能作为slave运行。

通过SQL可以为集群添加节点,不指定类型节点类型时默认为同步节点,也可以在添加之后修改节点类型

注解

除了添加集群的第一个节点以外,其它时候添加同步节点,会先添加成异步节点,待此节点的日志同步上主机的日志后(每10s会打印备节点与主节点之间的差距),再自动再转换成同步节点,这样在转成同步节点之前,不会影响集群其它更新事务的提交。

如果等待被添加节点的时间太长,会影响主节点对集群状态的修改,可以手动取消添加节点的操作。但是取消添加节点的操作后,需要用户手动转换为同步节点。

节点权值

神通高可用集群的节点的权值默认为0,可设置的范围是[0,127]。

主机在发现存在权值比自身大的同步备机,在该备机的日志与主机相同情况下,会主动给该备机让出master。

注解

可以为不同节点分配不同权值,使部分配置较好的节点能经常作为主机 通过修改备机或主机的权值,可以进行主备切换,在切换之后需要手动改回以前的权值

注解

更改权重切换主机时,现有主机会等待正在执行中的事务结束后再切换,但为了防止集群主节点长时间不能对外提供服务,因此设置超时时间,超时时间到了则会直接切换主节点,但未完成的事务的修改会回滚。

通过配置 HA_SWITCHOVER_WAIT_TIME 参数设置等待超时时间,默认值 3s

日志传输

HA_LOG_MASTER_SEND_BUF_BLOCK_NUM 用于设置主机一次最多可以从日志文件中读取多少个日志块,一个日志块512字节。

HA_LOG_SEND_BLOCK_NUM 用于设置主机一次最多可以向网络中发送多少个日志块,一个日志块512字节。

神通高可用集群的日志传输还提供了压缩功能,在日志量较大的时候可以降低网络负载,提升日志传输性能。 通过 HA_LOG_COMPRESS_MIN_BLOCK_NUM 可以配置在主机一次发送达到多少个日志块儿时对日志进行压缩。 0表示不启用压缩。

注解

集群中所有节点的的 HA_LOG_SEND_BLOCK_NUM 配置参数应当相同。

备机延迟

默认情况下,主机将日志回刷到一半以上的同步备机就可以提交事务, 而备机在得到主机的日志后还需要进行redo才能将修改操作反应到数据中, 因此备机的数据相对主机的数据会存在一定的延迟, 主机提交的修改可能需要延迟一定的时间才能在备机上查询到。

如果用户需要保证主机提交完事务后可以立刻在备机上查询到最新的修改, 可以将 ENABLE_HA_SLAVE_SYNC_REDO 配置参数设置为 on , 在这种配置下,主机会等待同步备机redo日志完成才会提交本机事务。 如果用户不关心备机上是否能够查询到最新结果,关闭此参数可以提高性能。

主备切换

集群中的主机会定期向所有备机发送心跳信息,如果同步备机超过一定时间没有收到心跳, 就认为主机已经不存在,会在同步备机之间发起选举操作,尝试推选出新的主机。

HA_HEARTBEAT_PERIOD_MS 配置参数设置HA集群主机心跳间隔时间(单位:毫秒)。

HA_ELECTION_TIMEOUT_MS 配置参数设置HA集群备机选主超时时间(单位:毫秒)。

注解

在实际运行过程中,为了提高选主效率,避免所有节点同一时间发起竞选操作产生冲突, 同步备机在 [ HA_ELECTION_TIMEOUT_MS , HA_ELECTION_TIMEOUT_MS * 2] 区间生成一个随机值作为选主超时时间。

注解

为避免网络抖动产生的影响, HA_HEARTBEAT_PERIOD_MS 应当小于 HA_ELECTION_TIMEOUT_MS /2 。

浮动ip

神通高可用集群提供浮动ip功能,设置了浮动Ip以后,无论哪个节点被选为主机,应用都可以通过浮动ip进行访问。

浮动IP通过以下四个参数进行设置:

HA_LOCAL_NET_DEV_NAME 浮动IP本机网络设备名称。 windows机器的网络设备名称可以在"控制面板网络和 Internet网络连接"中看到,一般是'本地连接'。 linux机器的网络设备名称可以通过ifconfig命令查看,一般是'eth0',配置此参数时应该使用设备别名'eth0:1'。

注解

linux机器的网络设备名称一定要加上后缀 ':1' ,如果同一个设备上需要配置多于2个Ip时,使用 ':2' 、 ':3' 等等后缀都是可以的。

HA_SERVER_IP_ADDRESS 浮动IP地址

HA_SUB_MASK 浮动IP子网掩码

HA_GATEWAY 浮动IP网关

配置示例

假设有3台机器:192.168.1.2、 192.168.1.3 和 192.168.1.4, 网卡名称都为‘本地连接’,浮动ip为 192.168.1.100。

3台机器的配置参数可以都如下:

HOTSTANDBY_DATABASE_TYPE=2

ENABLE_HA_SINGLE_ALIVE=false
HA_LOCAL_NET_DEV_NAME='本地连接:1'
HA_SERVER_IP_ADDRESS='192.168.1.100'
HA_GATEWAY='192.168.1.1'

在这3台机器上都使用了相同数据库备份进行恢复之后,都以备机方式启动数据库,并启动oscaragent服务。

先为集群添加1个结点,可通过isql或sql交互工具连接到其中1个节点,然后执行以下命令将该节点加到集群:

alter database add node 'xxx'; --xxx为本机的ip或域名

然后同样的也将另外两个节点加到集群,

在主机上通过 v_sys_ha_slave_info 视图可以查看集群所有节点的信息。