RAC架构

RAC(Real Application Clusters):应用集群架构,底层由CRS(Cluster Ready Service)实现。其根本目的是为了实现实例的冗余。

Oracle由两部分组成:

  • 动态部分

    由内存和进程组成的实例instance

  • 静态部分

    数据文件、日志文件、控制文件等组成的database

单节点数据库:一个数据库实例操作数据文件。

RAC架构数据库:多个数据库实例组成集群操作数据文件。

RAC是实例级别的容错:一般会把实例和数据文件分开放置在不同的服务器上,当一个实例服务器掉电后,数据文件不会损坏,其他实例依然可以正常工作。

实例和数据库之间使用SAN网络连接,实例和实例之间由私网连接做数据交互(Cache Fusion)。

RAC的作用:

  • 提供实例级别的冗余
  • 提供更多的系统资源
  • 增加更多的并行处理,可以进行业务分割

缺点:

  • 内存共享与资源争用(Cache Fusion)
  • 底层技术复杂,对DBA技术要求高

RAC架构的oracle,使用 ps -ef | grep crs 可以看到相关的CRS进程(RAC底层由CRS实现)。

查看RAC相关信息:

  1. # -t参数可以将信息以表格样式展示
  2. crs_stat -t

返回信息:

例如搭建的RAC名称为 rac3、rac4

Name Type Target State Host 说明
orc….SM1.asm application ONLINE ONLINE rac3 asm实例(共享存储)
orc….C3.lsnr application ONLINE ONLINE rac3 监听实例
ora.rac3.gsd application ONLINE ONLINE rac3 rac服务
ora.rac3.ons application ONLINE ONLINE rac3 rac服务
ora.rac3.vip application ONLINE ONLINE rac3 vip:虚拟IP
rac会在实例服务器上的网卡,额外绑定一个虚拟IP。
当A服务器宕机时,rac会自动将A服务器绑定的虚拟IP也绑定到B服务器的网卡上
rac4也会出现以上的所有服务 application ONLINE ONLINE rac4
ora.racdb.db application ONLINE ONLINE rac3 数据库
ora…b1.inst application ONLINE ONLINE rac3 rac3的数据库实例
ora….b2.inst application ONLINE ONLINE rac4 rac4的数据库实例

在RAC下,就可以使用gv$开头的相关视图查看集群下所有实例。

rac下,每个实例都有自己的redo log。

rac下,每个实例可以用自己的spfile,但是建议公用一个spfile,避免不一致。asm为共享存储,spfile放到asm即可公用。

使用oracle自带的命令 asmcmd 可以进入asmcmd中进行操作:

例如:

  1. # 查看asm共享存储的大小等信息
  2. lsdg
  3. # 可以像操作linux一样浏览asm中的文件
  4. ls
  5. # 进入DATA文件夹
  6. # 这些文件和文件夹直接在linux中看不到。控制文件、配置文件、数据文件也都存储在asm共享存储中,无法通过操作系统复制出去,只能使用Rman的方式备份出去
  7. cd DATA
  8. # 其他命令
  9. exit # 退出asm
  10. help # 查看帮助
  11. mkdir
  12. mkalias
  13. pwd

Data Guard

Data Guard是数据库的数据一种冗余保护,通过oracle的redo归档日志实现。

运行流程:

  1. 主数据库的reodo数据写入redo归档日志文件
  2. 灾备数据库接收redo归档日志文件
  3. standby灾备数据库通过数据库恢复操作,将redo日志的数据写入灾备数据库(灾备数据库可以有多个)

Data Guard的使用范围:

  • 是一个容错方案,使用于数据量不大的数据库,对于OLTP非常适合
  • OLAP数据量太大,只能选择关键数据创建DG。常规数据选择其他方式备份
  • 可以实现本地、全国异地的容灾

通过查询v$database可以查看数据库是否主数据库、Data Guard状态、保护模式等信息:

  1. select database_role, guard_status, protection_mode from v$database;

返回结果:

DataBase_Role Guard_Status Protection_Mode
PRIMARY NONE MAXIMUM PERFORMANCE
PRIMAY 主数据库
PHYSICAL STANDBY 备份数据库
非DataGuard MAXIMUM PERFORMANCE 高性能
MAXIMUM AVAILABILITY 高可用

在启用了Data Guard的数据库中,归档日志路径也不同:

  1. show parameter log_archive_dest;

普通归档日志路径指向本地的目录,Data Guard的归档日志路径指向一个服务(也可以指向本地):

  1. # 指向db_phystdby的服务
  2. SERVICE=db_phystdby LGWR ASYNC

db_phystdby配置在tns中,oracle可以通过这个服务连接到备份数据库中。

可以使用oracle自带的 tnsping 查看和该服务的网络是否能ping通:

  1. tnsping db_phystdby

可以使用sqlplus连接这个远程数据库:

  1. sqlplus sys/tiger@db_phystdby as sysdba

Standby灾备数据库平时的状态应该为 MOUNTED, 不是 OPEN,因为 open 的数据库不能做恢复。

redo归档日志从主数据库发送给备份数据库之后,备份数据库的alert日志中会显示对应信息,可以通过查看备份数据库的alert日志观察灾备的过程。

如果有个归档日志没有正常传给备份服务器,会在alert日志中显示一个GAP:

  1. # 拉取38号归档日志出错
  2. Media Recovery Waiting for thread 1 sequence 38
  3. Fetching gap sequence in thread 1, gap sequence 38-38
  4. FAL[client]: Failed to request gap sequence
  5. GAP - thread 1 sequence 38-38
  6. DBID ........
  7. FAL[client]: All defined FAL servers have ben attempted;

Data Guard会有自动重试机制,接收归档出错后会重试获取。

Data Guard的保护模式

Data Guard的保护模式:

  • 最高数据保护模式(最大保护模式)
  • 最高性能模式
  • 最高可用性模式

最大保护模式:

这是Data Guard三种保护模式中最安全的一种,它保证在任何时候数据都不会丢失。为了保证主、备数据库中的数据实时保持一致,Oracle要保证当事务提交时,日志必须同时写到主数据库和至少一个 Standby 数据库上,只有这样,才能保证主、备上的数据实时一致。

这种保护模式带来的一个问题就是,当日志无法同步地写到至少一个 Standby 数据库时,主数据库将会被强制Shutdown。这样做的目的是,如果 Standby 数据库无法写入日志,则主数据库就不可以发生任何改变,否则就会导致主、备数据库的数据不一致。

最大保护模式损害了系统的可用性。当主服务器的网络有波动时,有可能导致主数据库被迫重启。

最大性能模式:

它是对数据库性能影响最小的,所以被称为最高性能模式,这也是Data Guard默认的保护模式。

它区别于最大数据保护模式的地方是,它并不需要日志信息实时的传递到 Standby 数据库上。比如,当主数据库上的日志信息无法传递到 Standby 数据库上时,主数据库并不会收到任何影响,相关的服务会不断的尝试向Standby实例传递日志信息,直到成功为止。

最大性能模式损害了系统的数据安全性。

最高可用性模式:

正常情况下,它的工作机制和最大数据保护模式一样。

唯一的区别是,当redo日志无法写入到 Standby 数据库上时,并不会导致主数据库 shutdown。此时,Data Guard阿博湖模式将自动切换到最高性能模式,这样主数据库依然可以继续使用,直到故障恢复。当所有的日志全部都传递到 Standby 数据库上后,Data Guard 又自动将保护模式切换回最高可用性模式。

是最大保护模式和最大性能模式的折中方案。

选择DG的保护模式:

Data Guard中Standby数据库类型

Standby数据库类型:

  • 物理Standby数据库(Physical Standby Databases)
  • 逻辑Standby数据库(Logical Standby Databases)

物理灾备数据库执行流程:主数据库发送 redo归档日志,备数据库处于 Mounted 状态,使用数据库介质恢复的方式将redo日志写入数据库。

逻辑Standby数据库:主数据库将该redo归档日志还原成SQL语句,把SQL语句发送给备数据库上进行执行。所以此种方式需要备数据库处于 open状态。

选择:

如果备份数据库仅仅只做数据文件的备份,则使用物理Standby数据库的方式更好,因为此种方式的效率性能更高一些。

如果要实现读写分离,在备数据库上做查询报表等操作,或者需要在备份数据库上新建一些表和主数据库上表做关联查询,此时需要数据库处于open状态,应该选择使用逻辑Standby数据库实现。

RAC + DG

使用 Rac 对数据库的实例做冗余保护。

使用 Data Guard 对数据库做冗余保护。