1. 背景
许多传统企业的历史系统使用的都是Oracle数据库,虽然去O是一个方向,但是去O的成本还是较大,所以不少企业在上云的过程中,尝试在云上搭建自己的Oracle数据库。目前主备模式相对简单,已经是普遍使用的方案了,但是Oracle Rac集群的搭建还是面临着许多挑战,本文是一次在腾讯云上搭建Oracle Rac集群的尝试,单SCAN-IP 双节点模式。
2. 安装环境规划
2.1 前提准备
在腾讯云上搭建Oracle RAC,有三个重要前提,目前都需要向腾讯云申请开通:
- 共享云硬盘,通过控制台工单开通
- HAVIP(高可用虚拟IP),申请地址:https://cloud.tencent.com/document/product/215/36691
- 开启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个