腾讯云⾃建Oracle Rac集群(单SCAN-IP&双节点)

2022-12-14 21:42:03 浏览数 (1)

1. 背景

许多传统企业的历史系统使用的都是Oracle数据库,虽然去O是一个方向,但是去O的成本还是较大,所以不少企业在上云的过程中,尝试在云上搭建自己的Oracle数据库。目前主备模式相对简单,已经是普遍使用的方案了,但是Oracle Rac集群的搭建还是面临着许多挑战,本文是一次在腾讯云上搭建Oracle Rac集群的尝试,单SCAN-IP 双节点模式。

2. 安装环境规划

2.1 前提准备

在腾讯云上搭建Oracle RAC,有三个重要前提,目前都需要向腾讯云申请开通:

  1. 共享云硬盘,通过控制台工单开通
  2. HAVIP(高可用虚拟IP),申请地址:https://cloud.tencent.com/document/product/215/36691
  3. 开启VPC(私有网络)的组播功能,内测申请已经结束,即将开放公测:https://cloud.tencent.com/document/product/215/53428

2.2 Oracle RAC环境规划

2.2.1 ⽹络规划

创建专有⽹络IPV4⽹段:10.0.0.0/8

创建两个交换机:10.0.0.0/24、10.0.1.0/24

指定两台服务器的Public IP:10.0.0.2、10.0.0.4

指定两台服务器的VIP: 10.0.0.3、10.0.0.5

创建两块弹性⽹卡,指定两台服务器的Private IP:10.0.1.2、10.0.1.4

创建一个⾼可⽤虚拟IP:10.0.0.14

2.2.2 存储规划

本次测试选⽤两块100G SSD云硬盘做为系统盘,选⽤ ⼀ 块500G SSD共享云硬盘存储数据及OCR。⽣产环境建议OCR单独分配三块独⽴云盘,数据盘也按类型单独划分。

3. 安装Oracle数据库

数据库安装包含安装GRID,安装Database两部分,安装采⽤静默安装⽅式,详细安装参考官方文档。

4. ⽹络配置

腾讯云⾼可⽤虚拟IP需配合keepalive将IP绑定⾄服务器,目前产品在灰度优化中,切换时延在10s左右。

4.1 安装keepalive

代码语言:javascript复制
# 检查 keepalive 软件包版本
yum list keepalived

# 若版本在1.2.24以上则直接yum安装,否则推荐源码安装
yum install -y keepalived

# 配置keepalive
vim /etc/keepalived/keepalived.conf

-----rac1
! Configuration File for keepalived
global_defs {
     notification_email {
       acassen@firewall.loc
       failover@firewall.loc
       sysadmin@firewall.loc
     }
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 192.168.200.1
     smtp_connect_timeout 30
     router_id LVS_DEVEL
     vrrp_skip_check_adv_addr
     vrrp_garp_interval 0
     vrrp_gna_interval 0
  }
  vrrp_script checkhaproxy
  {
       script "/etc/keepalived/do_sth.sh"   # 检测业务进程是否运行正常。其中“do_sth.sh”文件为用户自定义的业务进程检测脚本,请根据业务需要来执行,执行时“do_sth.sh”更换为
实际的脚本名称。
       interval 5
  }
  vrrp_instance VI_1 {
  # 注意主备参数选择
  state BACKUP              # 设置初始状态均为“备“
      interface eth0          # 设置绑定 VIP 的网卡 例如 eth0
      virtual_router_id 51    # 配置集群 virtual_router_id 值
      nopreempt               # 设置非抢占模式,
      # preempt_delay 10      # 仅 state MASTER 时生效
      priority 100            # 两设备是相同值的等权重节点
      advert_int 5
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      unicast_src_ip 10.0.0.2  # 设置本机内网IP地址
      unicast_peer {
          10.0.0.4
  }
      virtual_ipaddress {
          10.0.0.3
          10.0.0.14
      }
      notify_master "/etc/keepalived/notify_action.sh MASTER"
      notify_backup "/etc/keepalived/notify_action.sh BACKUP"
      notify_fault "/etc/keepalived/notify_action.sh FAULT"
      notify_stop "/etc/keepalived/notify_action.sh STOP"
      garp_master_delay 1    # 设置当切为主状态后多久更新 ARP 缓存
      garp_master_refresh 5   # 设置主节点发送 ARP 报文的时间间隔
       track_interface {
                  eth0               # 使用绑定 VIP 的网卡 例如 eth0
          }
      track_script {
         checkhaproxy
      }
  }
  
  
  -----rac2
  ! Configuration File for keepalived
global_defs {
     notification_email {
       acassen@firewall.loc
       failover@firewall.loc
       sysadmin@firewall.loc
     }
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 192.168.200.1
     smtp_connect_timeout 30
     router_id LVS_DEVEL
     vrrp_skip_check_adv_addr
     vrrp_garp_interval 0
     vrrp_gna_interval 0
  }
  vrrp_script checkhaproxy
  {
       script "/etc/keepalived/do_sth.sh"   # 检测业务进程是否运行正常。其中“do_sth.sh”文件为用户自定义的业务进程检测脚本,请根据业务需要来执行,执行时“do_sth.sh”更换为
实际的脚本名称。
       interval 5
  }
  vrrp_instance VI_1 {
  # 注意主备参数选择
  state BACKUP              # 设置初始状态均为“备“
      interface eth0          # 设置绑定 VIP 的网卡 例如 eth0
      virtual_router_id 51    # 配置集群 virtual_router_id 值
      nopreempt               # 设置非抢占模式,
      # preempt_delay 10      # 仅 state MASTER 时生效
      priority 100            # 两设备是相同值的等权重节点
      advert_int 5
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      unicast_src_ip 10.0.0.4  # 设置本机内网IP地址
      unicast_peer {
          10.0.0.2
  }
      virtual_ipaddress {
          10.0.0.5
          10.0.0.14
      }
      notify_master "/etc/keepalived/notify_action.sh MASTER"
      notify_backup "/etc/keepalived/notify_action.sh BACKUP"
      notify_fault "/etc/keepalived/notify_action.sh FAULT"
      notify_stop "/etc/keepalived/notify_action.sh STOP"
      garp_master_delay 1    # 设置当切为主状态后多久更新 ARP 缓存
      garp_master_refresh 5   # 设置主节点发送 ARP 报文的时间间隔
       track_interface {
                  eth0               # 使用绑定 VIP 的网卡 例如 eth0
          }
      track_script {
         checkhaproxy
      }
  }
  
  # 启动keepalive

控制台能看到绑定到了对应主机,假如rac1的keepalive先启动,HAVIP就会绑定到rac1上,当rac1出现问题,HAVIP会被绑定到rac2。

5 使⽤测试

5.1 RAC集群相关信息汇总

代码语言:javascript复制
# 集群地址信息
10.0.0.2 rac1
10.0.0.4 rac2
10.0.0.3 rac1-vip
10.0.0.5 rac2-vip
10.0.1.2 rac1-priv
10.0.1.4 rac2-priv
10.0.0.14 scan-ip

5.2 数据库压⼒测试

本次压⼒测试通过scan-ip连接⾄集群,在测试前通过造数⼯具创建了约70G的数据,模拟交易环境。

步骤1:测试使⽤30个并发,验证节点双活

查看连接被同时分配到两个节点上

步骤2:测试使⽤100并发

连接数分布如下

步骤3:测试使⽤200并发

连接数分布如下

当连接数为100时,CPU 100%,I/O等待占⽐增⾼,响应时间也随压测时间的增加⽽增加,瓶颈处于服务器性能及磁盘性能限制。

当连接数为200时,CPU 100%,响应时间随压测时间的增加⽽增加,瓶颈处于服务器性能限制。测试标准型S5 4C16G服务器挂载500G SSD云硬盘集群性能如下:

  • TPS最⾼达到132左右
  • RT时间650ms左右
  • 磁盘读最⾼达到187MB/s
  • 磁盘写最⾼达到4MB/s
  • 磁盘读IOPS最⾼达到23000个
  • 磁盘写IOPS最⾼达到800个

0 人点赞