TimesTen内存数据库活动主备及AWT实践(一)

2022-04-07 00:00:00 数据 数据库 文件 安装 主机

作者简介:庞旭光,现就职于北京海天起点,oracle维护工程师,拥有6年电信,政府,银行等行业核心系统oracle数据库运维经验,获得11g ORACLE OCM认证,Redhat Enterprise 7 RHCE认证,擅长oracle数据库方面的故障诊断及问题处理。


概述


本文档是基于某个客户的需求案例编写的。


TimesTen内存数据库产品(以下简称TT),是ORACLE公司收购的一款产品,对于列的长度比较短、SQL语句结构比较简单(无表关联或表关联很少)、处理速度要求高的业务非常合适,能够极大的提高数据处理速度,这也是其名称为TimesTen的主要原因。


同时,它自带的TT数据库与TT数据库(以下简称TT库)之间的数据复制(replication)功能,既灵活,又强大。在复制方向方面,可以实现一对一、一对多、多对一或级联复制;在复制范围方面,可以是表级复制,也可以是全库复制,但是全库复制时,在DDL复制方面有限制,详细限制见本文后面附录一。依靠数据复制功能,可以非常灵活的实现高可用、读写分离、负载均衡等解决方案,其中为常见的便是:ACTIVE STANDBY PAIR(个人姑且将其翻译成:活动主备),主库进行写操作,备库进行读操作,在主、备库存在的同时,还可以再附加一个只读灾备数据库,以便应对主、备库均出现无法恢复的故障。另外,借助于CACHE GROUP(TT中的一个术语)功能,它还可以和常规ORACLE数据库进行数据交互,可以将ORACLE数据库里的表缓存到TT内存库里,可以以只读方式缓存,也可以以读写方式缓存(但有限制,后文会进行说明)。在现实当中,这样的应用需求比较少,但还是有。TT也提供了能够实现上述功能的标准架构,如下图所示:



这里先对上述架构做一个简单的解释:

 

架构中一共涉及到5台主机,其中3台运行TT内存数据库,2台运行ORACLE数据库。其中TT主库和TT备库是一对活动主备,正常情况下,应用程序使用TT主库,同时TT主库通过复制代理进程(replicateagent)将主库发生的改变同步至TT备库(类似于GoldenGate),TT备库再通过复制代理进程将改变同步至TT灾备库和ORACLE数据库DB1。TT灾备数据库,一般运行在异地,TT灾备数据库,可以附加ORACLE数据库,也可以不附件ORACLE数据库,如果附加了ORACLE数据库,假设数据库名为DB2,则TT灾备数据库通过复制代理进程将数据同步至ORACLE数据库DB2。如果TT主库和TT备库发生了主动角色转换:switchover,那么由转换后承担备库角色的TT库代替原备库进行数据同步的工作,也就是说哪个库是备库,哪个库承担数据同步的工作;如果发生了故障切换(被动角色转换):failover,那么当前存活的库成为主库,由主库(此时备库由于故障无法恢复)向灾备数据库及ORACLE数据库发送同步数据。

 

对于ORACLE侧发生的数据改变,则由运行在TT库主机上的TT cache agent进程去获取,而不是ORACLE侧通过某个进程自动推送至TT侧,TT侧在连接ORACLE数据库时,通过提前配置好的TNS去连接,在初次连接时需要进行用户名和密码验证。

 

无论任何时间点,只有承担TT主库角色的库可以进行更改类操作,TT备库、TT灾备库只能进行读(查询)操作。如果TT主库和TT备库均出现故障无法恢复,则可以激活TT灾备库,由其承担TT主库的角色,所有应用程序连接至灾备库。TT库之间的数据同步和与ORACLE之间的数据交互细节,在本文后面会进行介绍。

 

本文就是基于上述架构所做的实验,在本实验中,三台运行TT内存数据库的主机,分别为tt_master,tt_standby,tt_subscriber,三台主机上的TT内存库的名称均为testawtds,这主要是为了TT库发生切换时,应用程序不需要更改连接数据库时的数据库名。两台运行ORACLE数据库的主机的主机名分别为tt_oracledb1,tt_oracledb2,两个ORACLE数据库的名称分别为ttcgdb1,ttcgdb2。

 

其中:tt_master为主库,tt_standby为备库,tt_subscriber为灾备库,tt_master上的replication agent进程将发生在tt_master上的数据变更发送至tt_standby,tt_standby在自己主机上应用数据变更的同时,再将其发送至tt_subscriber和ORACLE数据库ttcgdb1。tt_subscriber在接收到tt_standby发送过来的数据同步后,在自己主机上应用数据变更的同时,再通过replicationagent将其发送至自己附加的ORACLE数据库ttcgdb2上。

 

如果tt_master需要从ORACLE数据库ttcgdb1上的数据或数据变更时,则通过运行在tt_master主机上的cache agent去获取。

 

在实验中,为了简单起见,tt_subscriber主机和tt_oracledb2使用的网段和tt_master、tt_standby主机相同,但是从逻辑上,我们将其当做异地主机来看。

 

本文从安装TT开始,对上面涉及到的一系列操作进行演示,主要包括:

 

TT建库、TT创建用户、TT和ORACLE数据交互、TT主备同步、TT灾备库实施、主备主动切换、主备故障切换等等。

 

本文实验中涉及到的5台主机均为虚拟机,操作系统均为RedHatEnterprise Linux 7.1 64bit,TT版本均为11.2.2.8.20,ORACLE的版本均为11.2.0.4.12。5台主机对应的IP地址、主机上安装的软件、版本以及CPU、内存配置、所承担的角色,汇总如下:


主机名

IP地址

软件

版本

CPU、内存

角色

tt_master

192.0.2.31

timesten

11.2.2.8.20

1C,2G

TT主库节点

tt_standby

192.0.2.32

timesten

11.2.2.8.20

1C,2G

TT备库节点

tt_subscriber

192.0.2.33

timesten

11.2.2.8.20

1C,2G

TT灾备节点

tt_oracledb1

192.0.2.34

oracle

11.2.0.4.12

1C,2G

oracle节点1

tt_oracledb2

192.0.2.35

oracle

11.2.0.4.12

1C,2G

oracle节点2


需要说明的是:本文是基于TT 11.2.2.8.20版本所做的测试,11.2.x版本的操作,与7.0.x版本的操作有所不同,7.0.x版本的相关操作,可参考7.0.x 相关的文档。


安装TT软件并创建TT数据库


对于TT版本,我们选择本文档编写时,ORACLE发布的新的TT版本:11.2.2.8.20(2016年12月8日发布),后续的操作,也均在该版本上进行。

 

另外,TT的CACHE GROUP功能需要调用ORACLE数据库的函数库及其它文件,因此,在安装TT以前,需要先安装ORACLE数据库软件,可以是SERVER也可以是CLIENT,安装后,记录下ORACLE_HOME目录位置,在安装TT时会使用。

 

对于ORACLE数据库软件的安装过程,这里不再描述,只记录下结果:软件我们选择CLIENT,安装目录为:/u01/app/oracle/product/11.2.0.4/client_1。

 

TT软件,我们选择安装在:/tt/TimesTen/tt1122目录下。与安装ORACLE类似,安装TT前,也需要做一些准备工作。另外tt_master、tt_standby、tt_subscriber三台主机上的安装、配置操作均相同,只是建库操作不同。所以我们这里只记录tt_master主机上的安装、配置过程。在安装并配置完成后,只在tt_master主机上手动创建TT数据库,tt_standby和tt_subscriber主机上通过TT的复制功能创建数据库。


安装前配置


与安装ORACLE类似,也是需要创建用户、配置内核参数、修改SHELLLIMIT限制等等。

 

创建用户组、用户、目录并修改权限


#groupadd ttadmin

#mkdir /etc/TimesTen

#chgrp -R ttadmin /etc/TimesTen

#chmod 770 /etc/TimesTen/

#useradd -g ttadmin -d /tt timesten

#passwd timesten


配置操作系统

 

包括两项工作:配置内核参数、配置SHELL LIMIT限制。

 

配置内核参数

 

涉及到5个内核参数:

 

kernel.shmmax

 

kernel.shmall

 

vm.nr_hugepages

 

vm.hugetlb_shm_group

 

kernel.sem

 

下面分别介绍这些参数的设置规则。

 

1、kernel.shmmax

 

设置规则,如果计划只创建一个TT数据库则:

 

kernel.shmmax= PermSize + TempSize + LogBufMB + 64 MB

 

如果要创建多个TimesTen内存库,则多个库叠加。

 

这里的PermSize 和 TempSize、LogBufMB是TT数据库里的术语,用于设置某个TT数据库的属性,类似于ORACLE的PGA、SGA等数据库实例属性设置参数。其中:

 

PermSize:指定某个TT数据库的总大小。这部分内存空间,用于保存TT库里的表、索引等实际数据,这部分内存从主机物理内存中划分。

 

TempSize:保存临时数据的空间,类似ORACLE的临时表空间。LogBufMB:类似于oracle的redolog buffer。

 

由于我们只是测试目的,所以计划将PermSize大小设置为512M,TempSize大小设置为128M,LogBufMB大小为128M,再加64M(TT额外要求的)共计:832M。而操作系统在安装完后的值为68719476736(64G),远远大于我们需要的值,因此保持不变:kernel.shmmax =68719476736。

 

2、kernel.shmall

 

kernel.shmall>= shmmax/page_size

 

Linux下的page_size一般为4096,可以通过”getconf PAGE_SIZE”命令进行确认,这里结果为4096,而68719476736/4096为1048576,而操作系统当前值为4294967296,也远远能满足我们的需要,因此也保持不变:

 

kernel.shmall = 4294967296

 

3、大内存页(huge page)相关的参数

 

涉及两个内核参数:vm.nr_hugepages和vm.hugetlb_shm_group。

 

(1)vm.nr_hugepages

 

设置规则:数据库大小/Hugepagesize

 

Hugepagesize的值可以通过如下命令查看,Linux下一般为2M:

 

cat /proc/meminfo |grep -i Hugepagesize

 

Hugepagesize: 2048 kB

 

结合上面的64G,我们设置为:32768。

 

(2)vm.hugetlb_shm_group

 

设置规则:Group ID of the user

 

通过id命令查看:id timesten

 

uid=1000(timesten) gid=1001(ttadmin) groups=1001(ttadmin)

 

所以后的设置为:

 

vm.nr_hugepages = 32768

 

vm.hugetlb_shm_group = 1001

 

4、SEMAPHORES(信号)

 

对应的内核参数是:kernel.sem = 300 32000 100 128

 

一般情况下,我们只需要设置个参数,设置规则:

 

如果只计划创建一个TT数据库,那么:TT数据库的客户端连接数+155。如果计划创建多个数据库,则每个数据库先按上述原则计算,然后所有数据库叠加。由于是测试目的,且只创建一个数据库,计划连接数为100,所以终结果为:100+155,我们再上浮一些,设置为300。

 

kernel.sem = 300 32000 100 128

 

后将上述参数加入:/etc/sysctl.conf文件中,然后以root用户执行sysctl -p使其生效。

 

创建修改shell limit限制

 

修改:/etc/security/limits.conf文件,在文件的后,加入如下内容:


timesten soft nofile 131072

timesten hard nofile 131072

timesten soft memlock unlimited

timesten hard memlock unlimited

timesten soft core unlimited

timesten hard core unlimited

timesten soft nproc 131072

timesten hard nproc 131072


做完上述所有设置后,安装TT。


安装TimesTen软件


安装过程记录

 

安装介质文件为:p25078246_1122_Linux-x86-64.zip,将其上传至/tt目录并解压。进入解压后的目录,执行./setup.sh进行安装,安装过程如下:


[timesten@tt_master linux8664]$ ./setup.sh

 

NOTE: Each TimesTen installation is identified by a unique instance name.

      The instance name must be a non-null alphanumeric string, not longer

      than 255 characters.

 

Please choose an instance name for this installation? [ tt1122 ] --实例名,保持默认。这里的实例名不同于oracle的instance概念,简单来说,安装一套TT软件就是一个TT instance,一个TT_HOME就是TT instance。

Instance name will be 'tt1122'.

Is this correct? [ yes ]

 

Of the three components:

 

  [1] Client/Server and Data Manager

  [2] Data Manager Only

  [3] Client Only

 

Which would you like to install? [ 1 ] --选择安装组件,保持默认。

 

Of the following options :

 

  [1] /tt

  [2] /timesten

  [3] Specify a location

  [q] Quit the installation

 

Where would you like to install the tt1122 instance of TimesTen? [ 1 ] --选择安装目录,接受/tt。

Where would you like to create the daemon home directory? [ /tt/TimesTen/tt1122/info ] --TT配置文件所在目录,保持默认。

 

The daemon logs will be located in /tt/TimesTen/tt1122/info

Would you like to specify a different location for the daemon logs? [ no ]

--是否改变tt的运行日志文件存放目录,不改变,一般不改变。

Installing into /tt/TimesTen/tt1122 ...

Uncompressing ...

 

NOTE: If you are configuring TimesTen for use with Oracle Clusterware, the

      daemon port number must be the same across all TimesTen installations

      managed within the same Oracle Clusterware cluster.

 

NOTE: All installations that replicate to each other must use the same daemon

      port number that is set at installation time. The daemon port number can

      be verified by running 'ttVersion'.

 

The default port number is 53396.

 

Do you want to use the default port number for the TimesTen daemon? [ yes ] --是否让TT主进程使用默认端口,默认端口为53396,7.0版本的TT主进程的默认端口为17001。

The daemon will run on the default port number (53396). --默认端口53396。

 

NOTE: For security, we recommend that you restrict access to the

      TimesTen installation to members of a single OS group. Only members of

      that OS group will be allowed to perform direct mode connections to

      TimesTen, and only members of that OS group will be allowed to perform

      operations that access TimesTen data stores, TimesTen files and shared

      memory. The OS group defaults to the primary group of the instance

      administrator. You can default to this group, choose another OS group

      or you can make this instance world-accessible. If you choose to make

      this instance world-accessible, all database files and shared memory

      are readable and writable by all users.

 

Restrict access to the the TimesTen installation to the group 'ttadmin'? [ yes ] --将访问TT安装目录的用户组限制为ttadmin。

 

NOTE: Enabling PL/SQL will increase the size of some TimesTen libraries.

 

Would you like to enable PL/SQL for this instance? [ yes ] --启用PL/SQL。

 

In order to use the 'Oracle TimesTen Application-Tier Database Cache' feature in any databases

created within this installation, you must set a value for the TNS_ADMIN

environment variable. It can be left blank, and a value can be supplied later

using <install_dir>/bin/ttModInstall.

 

Please enter a value for TNS_ADMIN (s=skip)? [  ] /u01/app/oracle/product/11.2.0.4/client_1/network/admin

--输入TNS_ADMIN变量对应的目录,ORACLE软件需要提前安装好。

TNS_ADMIN will be set to /u01/app/oracle/product/11.2.0.4/client_1/network/admin

You can change TNS_ADMIN later by running <install_dir>/bin/ttmodinstall.

 

NOTE: It appears that you are running version 4 or higher of the g++

      compiler. TimesTen ships with multiple sets of client libraries and server

      binaries : one built for compatibility with g++ 3.4.6 and one with

      g++ 4.1.0. The installer has created links to the 4.1.0 library in the

      <install_dir>/lib directory and to the 4.1.0 server binary in the

      <install_dir>/bin directory. If you want to use a different compiler,

      please modify the links to point to the desired library and server binary.

 

Installing server components ...

What is the TCP/IP port number that you want the TimesTen Server to listen on? [ 53397 ] --应用程序连接端口,默认为53397,接受默认。7.0版本的默认端口为17003。

Do you want to install the Quick Start Sample Programs and the TimesTen Documentation? [ no ] yes --选择安装快速启动示例程序和TT文档。

Where would you like to install the Quick Start and doc directories (s=skip)? [ /tt/TimesTen/tt1122 ] --接受默认安装路径。

The TimesTen documentation has been installed in /tt/TimesTen/tt1122.

 

The TimesTen Quick Start applications can take up to 64 Mbytes of disk space.

Depending on how your system is configured, you may not want to create the

Quick Start DemoDataStore directory in the default location,

/tt/TimesTen/tt1122/info/DemoDataStore

--系统demo(示例)数据库(data store)数据文件及日志文件存放目录,接受默认。

Where would you like to create the DemoDataStore directory? [ /tt/TimesTen/tt1122/info ]

Creating /tt/TimesTen/tt1122/info/DemoDataStore ...

 

Installing client components ...

 

Would you like to use TimesTen Replication with Oracle Clusterware? [ no ]

--不使用ORACLE RAC,tt可以通过rac来进行管理,但是那样会增大系统架构的复杂性,暂时不使用。

NOTE: The TimesTen daemon startup/shutdown scripts have not been installed.

 

Run the 'setuproot' script :

        cd /tt/TimesTen/tt1122/bin

        ./setuproot -install

This will move the TimesTen startup script into its appropriate location.

 

The startup script is currently located here :

  '/tt/TimesTen/tt1122/startup/tt_tt1122'.

 

The Quickstart home page can be accessed here :

  '/tt/TimesTen/tt1122/quickstart/index.html'

 

The 11.2.2.8 Release Notes are located here :

  '/tt/TimesTen/tt1122/README.html'

 

Starting the daemon ...

TimesTen Daemon startup OK.

End of TimesTen installation.


根据提示,以root用户执行上述红色字体部分,创建TT随系统启动而自动启动的脚本:


[root@tt_master ~]# cd /tt/TimesTen/tt1122/bin

 

[root@tt_master bin]# ./setuproot -install

 

Would you like to install the TimesTen daemon startup scripts into /etc/init.d? [ yes ]

 

Copying /tt/TimesTen/tt1122/startup/tt_tt1122 to /etc/init.d

 

Successfully installed the following scripts :

 

/etc/init.d/tt_tt1122

 

/etc/rc.d/rc0.d/K45tt_tt1122

 

/etc/rc.d/rc1.d/K45tt_tt1122

 

/etc/rc.d/rc2.d/S90tt_tt1122

 

/etc/rc.d/rc3.d/S90tt_tt1122

 

/etc/rc.d/rc5.d/S90tt_tt1122

 

/etc/rc.d/rc6.d/K45tt_tt1122


另外,关于TT安装过程中的几个点,进行下简单说明:

 

1、TT instance(实例)的概念

 

上面已经提到,TT的instance实例概念,它类似于ORACLE里的ORACLE_HOME概念,以相同用户,装一套TT,无论是不是相同版本、有没有选择相同的组件,均为一个TT instance,当前机器上安装的所有TT的实例的信息都记录在:/etc/TimesTen/instance_info文件中,文件内容示例如下:


[root@tt_master ~]# cat /etc/TimesTen/instance_info

 

#SUM 30601 1

 

[ tt1122 ]

 

Product=TimesTen11.2.2.8.20

 

InstallDir=/tt/TimesTen/tt1122

 

InstanceAdministrator=timesten

 

DaemonHome=/tt/TimesTen/tt1122/info

 

BitLevel=64

 

Component=Client/Server and DataManager

 

TT_PORT=53396


2、TT里的”数据库”概念

 

TT里的”数据库”,不称DATABASE,称为DATA STORE,缩写为DS。例如安装过程中提到的示例DATA STORE的相关文件(检查点文件和日志文件)的存放路径为:/tt/TimesTen/tt1122/info/DemoDataStore

 

3、安装过程中的两个目录:

 

(1)/tt/TimesTen/tt1122/info

 

存放数据库配置文件、TT主进程配置文件和TT运行日志文件的目录。

 

数据库相关的配置文件的名称为sys.odbc.ini和sys.ttconnect.ini,不同于ORACLE数据库,每个实例对应一个独立的初始化参数文件,TT多个数据库的配置信息存放在同一个文件里的不同部分,彼此在文件内隔离,但是文件是同一个文件。其中sys.odbc.ini的作用类似于ORACLE的初始化参数文件,sys.ttconnect.ini的作用类似于oracle的tnsnames.ora文件。

 

TT主进程配置文件为ttendaemon.options,与TT主进程运行有关的设置都在这个文件里进行配置,比如:TT主进程守护端口,TT运行日志文件的大大小及日志文件保留数量等等。

 

TT的运行日志文件为:tterrors.log和ttmesg.log,类似于ORACLE的alert日志和trace文件日志。其中,tterrors.log文件默认大大小为10M,每达到10M进行轮替(rotate),多保留10个文件。ttmesg.log默认大大小为100M,每达到10M进行轮替(rotate),也是多保留10个文件。

 

TT 7.0版本有所不同,TT 7.0版本,tterrors.log和ttmesg.log默认大大小都是1M,每达到1M进行轮替(rotate),也是多保留10个文件,要想更改这些设置,就要修改上面提到的:ttendaemon.options。

 

(2)/tt/TimesTen/tt1122/info/DemoDataStore

 

存放DEMO数据库检查点文件和日志文件的目录。

 

这里的检查点文件,类似于ORACLE里的数据文件,虽然TT的操作都是在内存里进行的,但是也必须要定期将变更后的数据写入到磁盘中,以便保存数据,以及下次启动时从操作系统上将数据加载到内存里。但不同于ORACLE,TT只有在启动时,才会从操作系统的文件系统里读入数据,然后加载至内存中,一旦加载完成,在整个运行期间,不会再次从磁盘上加载文件,所有数据相关的操作,均在内存中完成,不像ORACLE那样,需要的时候从磁盘读入内存,长时间不用以后,根据LRU算法,将不需要的数据从内存中清理掉。

 

这里的日志文件,类似于ORACLE的归档日志。


查看安装信息

 

安装信息,可以通过文件查看,也可以通过操作系统命令查看。

 

/etc/TimesTen/instance_info文件

 

上文已经提到,可以查看/etc/TimesTen/instance_info文件,文件内容上文有示例,这里不再重复。

 

命令行方式查看TT版本信息

 

命令为:ttversion,示例如下:


[timesten@tt_master ~]$ ttversion

TimesTen Release 11.2.2.8.20 (64 bit Linux/x86_64) (tt1122:53396) 2016-12-08T19:09:04Z

Instance admin: timesten --实例管理员。

Instance home directory: /tt/TimesTen/tt1122 --安装目录。

Group owner: ttadmin --TT管理组。

Daemon home directory: /tt/TimesTen/tt1122/info --守护进程目录。

PL/SQL enabled. --实例是否启用PL/SQL。


查看TT主进程状态信息

 

命令为:ttstatus,示例如下:


[timesten@tt_master ~]$ ttstatus

TimesTen status report as of Tue Mar 14 17:04:22 2017

Daemon pid 78386 port 53396 instance tt1122

TimesTen server pid 78395 started on port 53397

------------------------------------------------------------------------

Data store /tt/TimesTen/DS/testawtds/testawtds

There are no connections to the data store

RAM residence policy: Manual

Data store is manually unloaded from RAM

Replication policy : Manual

Cache Agent policy : Manual

PL/SQL enabled.

------------------------------------------------------------------------

Accessible by group ttadmin

End of report



原创文章,版权归本文作者所有,如需转载请注明出处


https://mp.weixin.qq.com/s/XEPRQJ7b2DVDwMXkfpya7Q

相关文章