神舟通用数据库读写分离(RW)集群

神舟通用数据库读写分离(RW)集群

神舟通用数据库读写分离(RW)集群的架构图如下所示,

clip_image001

和神通DB的HA架构不同,RW集群是share nothing的架构,每个节点都保存一份数据库,通过事务日志,传输db的更改,来保证多个节点的数据一致性。节点又分同步节点和异步节点,从Oracle DBA的角度讲,基本原理和Oracle ADG一样,RW集群的同步节点相当于ADG的最大保护模式,异步节点相当于最大性能模式。

“神通DB的RW集群,最大可以有9个节点,各节点的地位默认都是平等的,也可以设置节点的权值,使权值最大的同步节点优先成为主机。正常工作状态下,master及时将自己产生的日志同步到slave,以保证主备之间的数据一致性,用户对master所作的任何更新操作,都会在slave上得到体现。如果同步slave长时间收不到master的心跳信息,将会在集群的同步节点之间发起选举操作,选出新的master,并继续对用户提供数据服务。而这种切换对于用户而言是基本透明的(只需进行重新连接)。如果slave端发生故障,而master仍处于活动状态时,只要发生故障的同步节点小于集群同步节点总数的二分之一,集群系统仍继续对外提供数据服务,对用户不会产生任何影响,只需DBA及时对slave进行故障排除即可。”

“神通高可用集群系统中的备机是可读的,在此基础上提供了读写分离功能。JDBC 驱动包含了分发的功能,可以导致一方面用户可以直接连接备机执行只读查询操作,另一方面也可以通过驱动进行读写分离:驱动自动对用户执行的SQL语句进行读写分类,将写操作发送到主机执行,将只读操作发送到备机执行,驱动按照一定的算法进行负载均衡,以达到提升系统整体性能的目的。”

另外,神通DB RW集群不需要第三方集群软件管理浮动IP,数据库自身就可以完成浮动IP的管理,这里不是依靠HA服务,而是数据库服务和agent服务,实际上,为了避免浮动IP的配置冲突,使用RW集群时,最好把神通DB的HA服务关掉。

神通DB的RW集群配置步骤还是非常简单的,我们用3台服务器举例:

虚拟机 服务IP 心跳IP
centos75vm1 192.168.204.121 192.168.42.121
centos75vm2 192.168.204.122 192.168.42.122
centos75vm4 192.168.204.124 192.168.42.124

三台服务器的OS都是redhat 7.5,神通db软件安装过程略过,都是安装在缺省位置/opt/ShenTong。

首先在centos75vm1上创建数据库,注意一定要启用归档模式,其他都用缺省值。然后将数据库备份,备份可以用神通数据库自带的“数据库维护工具”,启动命令行是/opt/ShenTong/bin/oem

image

image

备份完成后,将生成的一个备份文件分别FTP到其他两台服务器。还是用这个工具恢复数据库。备份类型选择外部备份,然后指向ftp过来的备份文件:

image

保证数据库恢复后可以正常启动。

然后关闭3个节点的数据库,修改数据库参数文件OSRDB.conf,修改下面几个参数:

HOTSTANDBY_DATABASE_TYPE=2

ENABLE_HA_SINGLE_ALIVE=false

HA_LOCAL_NET_DEV_NAME='ens33:1'         ### 这个网卡设备名就是服务IP对应的设备

HA_SERVER_IP_ADDRESS='192.168.204.10'    ### 这个是对外提供服务的浮动IP

HA_GATEWAY='192.168.204.2'

然后启动3个节点的数据库。

在一节点,使用iSQL登入数据库,然后将第一个节点,也是master节点计入集群:

alter database add node ‘192.168.42.121’

然后将另外两个节点加入集群

alter database add node ‘192.168.42.122’  sync

slave节点刚加入的时候,先是以异步节点的方式加入,等日志同步了,再转变成同步方式:

SQL> alter database add node 4 '192.168.42.124' sync;      
NOTICE, 新增节点已先改成异步方式,正在等日志同步上之后自动改为同步..
NOTICE, 已将节点改为同步节点
ALTER DATABASE SET

可以指定node编号,也可以不指定,让系统自动指定,后续操作节点,可以用node编号来引用。

添加完节点,RW集群就算配置完成了,可以用过查看v_sys_ha_slave_info视图,查看节点状态:

SQL> select node_id,address,synclog,status,port from v_sys_ha_slave_info;
  NODE_ID |    ADDRESS     | SYNCLOG | STATUS | PORT 
---------+----------------+---------+--------+------
        1 | 192.168.42.121 | t       | master |    0
        2 | 192.168.42.122 | t       | slave  | 2003
        4 | 192.168.42.124 | t       | slave  | 2003

查看网卡信息,也能看到浮动IP已经绑定在1节点:

[root@centos75vm1 admin]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.204.121  netmask 255.255.255.0  broadcast 192.168.204.255
         inet6 fe80::3431:6d21:e67c:df0  prefixlen 64  scopeid 0x20<link>
         inet6 fe80::9008:5f98:8fb3:ce9e  prefixlen 64  scopeid 0x20<link>
         ether 00:0c:29:62:81:31  txqueuelen 1000  (Ethernet)
         RX packets 31950  bytes 4284586 (4.0 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 33742  bytes 22179125 (21.1 MiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.204.10  netmask 255.255.255.0  broadcast 192.168.204.255
         ether 00:0c:29:62:81:31  txqueuelen 1000  (Ethernet)

应用要实现读写分离,还需要在jdbc或aci环节进行其他设置,具体参考神通数据库的联机文档中《数据库开发手册》中两种分发器的配置章节,这里就不赘述了。

我们可以用直接关掉虚拟机centos75vm1,模拟掉电,等几秒,可以看到master节点变为其他同步节点,浮动IP已经飘移到其他机器:

SQL> select node_id,address,synclog,status,port from v_sys_ha_slave_info;
  NODE_ID |    ADDRESS     | SYNCLOG | STATUS  | PORT 
---------+----------------+---------+---------+------
        1 | 192.168.42.121 | t       | offline |    0
        2 | 192.168.42.122 | t       | slave   | 2003
        4 | 192.168.42.124 | t       | master  |    0
(3 rows)

我们还可以将不同节点的权重设置为不同值,比如可以将centos75vm1的权重设置的比其他节点高,那么当centos75vm1修复后,根据权重,这个节点又会自动成为master节点,原来的master节点会重启,变为slave。

修改权重的语句:

alter database alter node 1 weight 20;
SQL> select * from v_sys_ha_slave_info;
  NODE_ID |    ADDRESS     | SYNCLOG | STATUS  | PORT | READABLE | SYNCHRONIZED | WEIGHT | START_LSN | NEXT_SEND_LSN | NEXT_FLUSH_LSN | NEXT_REDO_LSN | TRANSMISSION_TIME 
---------+----------------+---------+---------+------+----------+--------------+--------+-----------+---------------+----------------+---------------+-------------------
        1 | 192.168.42.121 | t       | offline |    0 | f        | f            | 20     |         0 |             0 |              0 |            -1 |                -1
        2 | 192.168.42.122 | t       | slave   | 2003 | t        | f            | 0      |   7485952 |       7487488 |        7487488 |       7487504 |                 0
        4 | 192.168.42.124 | t       | master  |    0 | f        | f            | 0      |   7487488 |             0 |        7487488 |       7487488 |                 0
(3 rows)

启动centos75vm1,等一段时间,可以看到master重新回到了node 1:

SQL> select * from v_sys_ha_slave_info;
  NODE_ID |    ADDRESS     | SYNCLOG | STATUS | PORT | READABLE | SYNCHRONIZED | WEIGHT | START_LSN | NEXT_SEND_LSN | NEXT_FLUSH_LSN | NEXT_REDO_LSN | TRANSMISSION_TIME 
---------+----------------+---------+--------+------+----------+--------------+--------+-----------+---------------+----------------+---------------+-------------------
        1 | 192.168.42.121 | t       | master |    0 | f        | f            | 20     |   7488000 |             0 |        7488000 |       7488000 |                 0
        2 | 192.168.42.122 | t       | slave  | 2003 | t        | f            | 0      |   7486976 |       7488000 |        7488000 |       7488016 |                 0
        4 | 192.168.42.124 | t       | slave  | 2003 | t        | f            | 0      |   7486976 |       7488000 |        7488000 |       7488016 |                 0
(3 rows)
Comments are closed.