跳至内容

RAC 攻击 - Oracle 集群数据库实战/RAC 攻击自动化

来自维基教科书,开放的书籍,开放的世界

无论您是已经做过早期实验室几十次的参与者,还是专注于后期实验室的课程的讲师,跳过早期实验室并专注于 RAC 攻击课程中的后期实验室通常很有用。目前正在开发和测试用于自动化 RAC 攻击实验室的代码。


此页面将包含有关自动构建标准 RAC 攻击环境的说明。

快速入门

[编辑 | 编辑源代码]

目前,我们正在努力自动化第三和第四个实验室 - 安装 Linux创建集群

  1. 完成前三个实验室:硬件要求软件组件准备主机。不要下载 Oracle Linux;只需下载数据库和集群软件。
  2. 下载并安装 Vagrant 1.5.1
  3. 下载并解压缩 http://racattack.org/vagrantfile.zip(请注意,此文件经常更改,因为我们正在对其进行处理)
  4. 打开命令提示符并更改为解压缩 vagrantfile.zip 的目录
  5. cd vagrantfile-master\OracleLinux\racattack12cR1
  6. vagrant up
  7. vagrant ssh collabn1
  8. sudo su - oracle -c vncserver
  9. 运行您选择的 vnc 客户端并连接到 vnc://192.168.78.51:1
  10. http://racattack.org/listhttps://github.com/racattack/vagrantfile/issues 上讨论问题

您现在可以跳到 连接到虚拟机

此项目由 RAC 攻击团队 提供给您


初始版本:Alvaro Miranda 14/04


对于此实现,我们将使用 Vagrant 来管理 VirtualBox 并自动执行部署。

此实现中使用的软件

[编辑 | 编辑源代码]

除了 RAC_Attack_12c/软件组件 中列出的用于 SSH、VNC、网格和数据库组件的软件外,以下软件已在此实现中使用和测试。

已知可用的操作系统

[编辑 | 编辑源代码]

此实现已使用以下操作系统进行测试

  • Windows 7 Professional 64 位
  • OracleLinux 6.5 64 位
  • Apple Mac OS X 10.9.2

客户机中使用的操作系统

[编辑 | 编辑源代码]

客户机中使用的操作系统是 Oracle Linux 6.5 + 更新。

使用的镜像版本反映了创建和更新镜像的日期

alvaros-mini:oracle65 alvarom$ vagrant box outdated --global

* 'racattack/oracle65' (v14.03.29) is up to date

alvaros-mini:oracle65 alvarom$

此版本的 racattack/oracle65 已创建并更新至 14.03.29


硬件要求

[编辑 | 编辑源代码]
  1. 请查看 RAC_Attack_12c/硬件要求 并检查您是否满足最低硬件要求。

软件组件

[编辑 | 编辑源代码]
  1. 转到 RAC_Attack_12c/Software_Components 并确保您拥有其中列出的所有软件组件。



对于本实验,您需要 vagrant,请访问 www.vagrantup.com/downloads.html,下载并安装 vagrant 软件。

Vagrant 简介 - Vagrant 101

[编辑 | 编辑源代码]

在本实验中,我们将使用 vagrant,但是读者可以访问 Vagrant 文档 以了解在本实验之外哪些其他功能可能有用。


why-vagrant 页面

Vagrant 提供易于配置、可重复使用且可移植的工作环境,这些环境构建在行业标准技术之上,并由一个一致的工作流程控制,以帮助最大限度地提高您和您的团队的生产力和灵活性。


软件安装完成后,正常的部署过程如下


  1. 下载一个 vagrant 盒子
  2. 创建一个 Vagrantfile



让我们使用 vagrant 执行一些命令


alvaros-mini:~ alvarom$ vagrant --help
 Usage: vagrant [options] <command> [<args>]
 -v, --version Print the version and exit.
 -h, --help Print this help.

alvaros-mini:~ alvarom$ vagrant --version
Vagrant 1.5.1

alvaros-mini:~ alvarom$ vagrant box list

alvaros-mini:~ alvarom$


vagrant box

[编辑 | 编辑源代码]

一个 vagrant 盒子是一个虚拟机模板,其中包含专门为 vagrant 制定的配置。为了创建一个盒子,您需要按照 基本盒子文档 中列出的步骤进行操作。

本实验中使用的盒子是使用 packer 版本 0.5.2 创建的。

从 vagrant 1.5.x 开始,您可以使用一个简单的命令从互联网下载盒子。

vagrant box add racattack/oracle65

这将下载本实验使用的基本盒子。

此时,盒子 racattack/oracle65 位于您的系统中,您可以使用它。

Vagrantfile

[编辑 | 编辑源代码]

Vagrant 文件是自动化开始的地方,它将包含有关使用哪个盒子、从哪里获取盒子以及在 Vagrantfile 中列出的自定义操作的信息。

根据 vagrantfile 文档,Vagrantfile 是

Vagrantfile 的主要功能是描述项目所需的机器类型,以及如何配置和配置这些机器。Vagrantfile 被称为 Vagrantfile 是因为文件的实际文字文件名是 Vagrantfile(大小写无关)。

Vagrant 旨在每个项目运行一个 Vagrantfile,并且 Vagrantfile 应该被提交到版本控制。这允许参与项目的其他开发人员签出代码,运行 vagrant up,然后开始工作。Vagrantfile 在 Vagrant 支持的每个平台上都是可移植的。

Vagrantfile 的语法是 Ruby,但无需了解 Ruby 编程语言即可修改 Vagrantfile,因为它主要只是简单的变量赋值。事实上,Ruby 甚至不是 Vagrant 使用最广泛的社区,这应该向您表明,即使没有 Ruby 知识,人们也能在 Vagrant 上取得成功。

要创建一个新的 Vagrantfile,您可以


vagrant init racattack/oracle65


这将在我们执行此命令的目录中创建一个简单的 Vagrantfile。


让我们列举一下我们到目前为止学到的知识


要下载一个 vagrant 盒子

  • vagrant box add racattack/oracle65


要列出我们系统中的盒子

  • vagrant box list


要创建一个初始 Vagrantfile

  • vagrant init racattack/oracle65


我们将使用的其他命令是


要启动/创建一个新的虚拟机

  • vagrant up

要连接到虚拟机

  • vagrant ssh

要重启虚拟机

  • vagrant reload


要停止虚拟机

  • vagrant halt

要检查虚拟机的状态

  • vagrant status



要删除虚拟机

  • vagrant destroy

实验室:创建 test1 虚拟机

[编辑 | 编辑源代码]

在本实验中,我们将创建一个简单的 test1 虚拟机。


  • vagrant box add racattack/oracle65
  • vagrant box list
  • mkdir test1
  • cd test1
  • vagrant init racattack/oracle65
  • vagrant up
  • vagrant reload
  • vagrant halt
  • vagrant destroy

以下是我测试机器上的输出

alvaros-mini:~ alvarom$ vagrant box add racattack/oracle65
==> box: Loading metadata for box 'racattack/oracle65'
    box: URL: https://vagrantcloud.com/racattack/oracle65                                                                                                                                     
==> box: Adding box 'racattack/oracle65' (v14.03.29) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/racattack/oracle65/version/1/provider/virtualbox.box                                                                                           
==> box: Successfully added box 'racattack/oracle65' (v14.03.29) for 'virtualbox'!
alvaros-mini:~ alvarom$ 

alvaros-mini:~ alvarom$ vagrant box list
racattack/oracle65 (virtualbox)
alvaros-mini:~ alvarom$ 

alvaros-mini:~ alvarom$ mkdir test1
alvaros-mini:~ alvarom$ cd test1
alvaros-mini:test1 alvarom$ vagrant init racattack/oracle65
A `Vagrantfile` has been placed in this directory. 
You are now ready to `vagrant up` your first virtual environment! 
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'racattack/oracle65'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Setting the name of the VM: test1_default_1396308377657_73917
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant ssh
[vagrant@oracle65-racattack ~]$ id
uid=500(vagrant) gid=500(vagrant) groups=500(vagrant)
[vagrant@oracle65-racattack ~]$ hostname
oracle65-racattack
[vagrant@oracle65-racattack ~]$ sudo su -
[root@oracle65-racattack ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@oracle65-racattack ~]# exit
logout 
[vagrant@oracle65-racattack ~]$ exit
logout
Connection to 127.0.0.1 closed.
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
==> default: VM already provisioned. Run `vagrant provision` or use `--provision` to force it
alvaros-mini:test1 alvarom$ 

alvaros-mini:test1 alvarom$ vagrant halt
==> default: Attempting graceful shutdown of VM...
alvaros-mini:test1 alvarom$

alvaros-mini:test1 alvarom$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
alvaros-mini:test1 alvarom$


恭喜,您已使用 Vagrant 创建并销毁了您的第一个虚拟机。

RAC 攻击自动化

[编辑 | 编辑源代码]

此时,在 RAC 攻击架构 中,我们处于第一步。

RAC Attack 12c architecture

我们的架构图如下所示


此自动化实现的代码可以在 [racattack.org/code] 找到。

从代码中,我们感兴趣的是 racattack/vagrantfile 仓库。

有两种方法可以下载代码

  1. 下载 zip 文件
  2. 使用 git

下载 zip 文件

[编辑 | 编辑源代码]

一个包含本项目所需所有文件的 zip 文件可以下载为:https://github.com/racattack/vagrantfile/archive/master.zip

下载,解压缩

您完成了。

使用 git

[编辑 | 编辑源代码]

如果您熟悉 git,您可以下载此仓库的副本,如下所示

git clone https://github.com/racattack/vagrantfile

如果您安装了 github 软件,那么您可以 点击此链接

查看 racattack/vagrantfile

[编辑 | 编辑源代码]

在将仓库下载到您的计算机本地后,您将得到类似于以下结构的内容

.
|-- OracleLinux
| |-- README.md
| `-- racattack12cR1

转到 OracleLinux/racattack12cR1 目录

cd OracleLinux/racattack12cR1

结构将类似于以下内容

.
|-- 12cR1
| |-- <scripts>
| `-- readme.txt
|-- Vagrantfile
`-- stagefiles
| |-- <scripts>
` `-- readme.txt

在我们创建第一个集群之前

[编辑 | 编辑源代码]

现在一切都已就绪,我们可以检查集群的状态


alvaros-mini:racattack12cR1 alvarom$ vagrant status

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn2 dns server role is slave
on first boot shared disks will be created, this will take some time

collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
collabn1 dns server role is master
Current machine states:
collabn2 not created (virtualbox)
collabn1 not created (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
alvaros-mini:racattack12cR1 alvarom$

此输出告诉我们什么?

它显示了 2 个节点

collabn2 not created (virtualbox)
collabn1 not created (virtualbox)

它显示了我们可以通过以下网络详细信息访问它们

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51

这意味着我们将从单个节点迁移到 2 个节点。

这也意味着我们离 RAC 攻击架构又近了一步。

RAC attack architecture step2

stagefiles/*.sh 中提供的脚本将完成 Oracle RAC 集群所需的所有配置。

racattack12cR1
`-- stagefiles
| `-- <scripts>

如果我们查看 vagrant status 的输出,我们还有

collabn2 dns server role is slave
collabn1 dns server role is master

这意味着当我们配置我们的实验室时,collabn1 将是 DNS 服务器主节点,而 collabn2 将是 DNS 服务器从节点。

其他信息是

on first boot shared disks will be created, this will take some time

也就是说,在首次执行 vagrant up 时,Vagrant 使用我们的 Vagrantfile 将为正确安装 Oracle RAC 12cR1 设置我们所需的一切。

此时,您可以运行 vagrant up 来创建您的第一个使用此项目的 2 节点 RAC 集群。

vagrant up

[edit | edit source]

vagrant up 命令将读取 Vagrantfile 并创建该文件中的内容。

此项目的 Vagrantfile 已经过测试和改进,并完成了 Oracle RAC 12cR1 安装所需的所有操作系统要求,没有任何问题。

顺序很重要

[edit | edit source]

Vagrant 从上到下执行脚本并创建机器,因此对于高级使用,我们可能最终会在配置完成后安装软件或执行一些任务,因此,我们需要所有节点都启动并运行,因此我们将首先执行 collabn2,然后执行 collabn1。这样一来,一旦 collabn1 启动并运行,我们就可以确保一切都启动并准备就绪。

查看 vagrant up 输出

[edit | edit source]

让我们查看输出。

可以在项目页面上的 https://github.com/racattack/vagrantfile/blob/master/OracleLinux/vagrant-up.log 找到 示例 vagrant up 日志,以便在执行自己的运行之前进行查看。

在此阶段,基本框已导入。

==> collabn2: Importing base box 'kikitux/oracle65-racattack'...


在此阶段,该框将从模板中重命名为适合我们的名称。

==> collabn2: Setting the name of the VM: collabn2.1404011431

Vagrant 魔术

==> collabn2: Clearing any previously set network interfaces...
==> collabn2: Preparing network interfaces based on configuration...

pre-boot 部分,将创建共享磁盘。我们将在后面回顾这一点。

==> collabn2: Running 'pre-boot' VM customizations...

启动虚拟机并设置主机名

==> collabn2: Booting VM...
==> collabn2: Waiting for machine to boot. This may take a few minutes...
==> collabn2: Setting hostname...

挂载共享文件夹

==> collabn2: Mounting shared folders...
collabn2: /vagrant => /Users/alvarom/racattack12cR1
collabn2: /media/sf_12cR1 => /Users/alvarom/racattack12cR1/12cR1
collabn2: /media/stagefiles => /Users/alvarom/racattack12cR1/stagefiles

执行脚本

==> collabn2: Running provisioner: shell...

共享磁盘

[edit | edit source]

为了更接近 RAC Attack 12cR1 架构,我们需要有共享磁盘。


此实现将在首次启动时自动执行 RacAttack Create_Virtualbox_Shared_Storage 步骤

让我们检查 collabn1

alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 running (virtualbox)
collabn1 running (virtualbox)

让我们连接到 collabn1 并成为 root 用户

alvaros-mini:racattack12cR1 alvarom$ vagrant ssh collabn1 
[vagrant@collabn1 ~]$ sudo su -  
[root@collabn1 ~]#

让我们检查磁盘。

  • udev 磁盘
[root@collabn1 ~]# ls -al /dev/asm* /dev/sd*
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk1 -> sdc1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk2 -> sdd1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk3 -> sde1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk4 -> sdf1
brw-rw---- 1 root disk 8, 0 Apr 1 01:35 /dev/sda
brw-rw---- 1 root disk 8, 1 Apr 1 01:35 /dev/sda1
brw-rw---- 1 root disk 8, 2 Apr 1 01:35 /dev/sda2
brw-rw---- 1 root disk 8, 3 Apr 1 01:35 /dev/sda3
brw-rw---- 1 root disk 8, 16 Apr 1 01:35 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 1 01:35 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 /dev/sdc1
brw-rw---- 1 root disk 8, 48 Apr 1 01:35 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 /dev/sdd1
brw-rw---- 1 root disk 8, 64 Apr 1 01:35 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 /dev/sde1
brw-rw---- 1 root disk 8, 80 Apr 1 01:35 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 /dev/sdf1
[root@collabn1 ~]#

我们有 4 个共享磁盘:sdc、sdd、sde、sdf。我们有持久别名


  • OracleASM 磁盘
[root@collabn1 ~]# ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root root 0 Apr 1 01:35 .
drwxr-xr-x 4 root root 0 Apr 1 01:35 ..
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 ASMDISK1
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 ASMDISK2
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 ASMDISK3
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 ASMDISK4
[root@collabn1 ~]#

共享磁盘已创建,权限已设置。准备使用。

再次说明,这意味着我们又向 RAC Attack 12cR1 架构迈进了一步。

RAC_ATTACK Architecture step3

默认情况下包含的内容

[edit | edit source]

除了已经提供的详细说明之外,此自动化脚本还执行以下操作

  • 创建所需的组,以根据 Oracle RAC 手册进行角色分离
  • 创建用户 grid
  • 更新用户 oracle 的组
  • 初始化 sdb 磁盘以用于 oracle 二进制文件,将其挂载为 /u01
  • 设置主节点 (collabn1) 从节点 (collabn2) 的 DNS 设置
  • 为 grid 用户设置 ulimit,用于角色分离

默认用户和密码

[edit | edit source]
  • 用户 root,密码 root
  • 用户 grid,密码 grid
  • 用户 oracle,密码 oracle

连接到虚拟机

[edit | edit source]

现在,您可以通过两种方式连接到虚拟机。

  • vagrant ssh collabn1,然后 sudo su - 成为 root 用户。
You can became grid   user as  sudo su - grid from vagrant
You can became oracle user as  sudo su - oracle from vagrant
  • 使用 ssh/putty 连接到 IP 地址。

您的笔记本电脑已连接到两个网络,LAN 192.168.78 和 priv 172.16.100.51。

因此,您可以直接使用 ssh 连接到机器。

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52

collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51

恭喜

[edit | edit source]

此时,您已拥有一个 2 节点集群,所有准备就绪。

这意味着我们 100% 符合 RAC Attack 12cR1 架构,恭喜您。

RAC Attack 12c architecture

下一步

[edit | edit source]

将您下载的 oracle 二进制文件 zip 文件放在 racattack12cR1/12cR1 中。


12cR1/linuxamd64_12c_grid_1of2.zip
12cR1/linuxamd64_12c_grid_2of2.zip 
12cR1/linuxamd64_12c_database_1of2.zip
12cR1/linuxamd64_12c_database_2of2.zip

配置 VNC 会话,或使用 X11,方法如下:RAC_Attack_12c/VNC_Server_Setup

使用 oracle 帐户配置 VNC 服务器(密码不会显示)。

[root@collabn1 ~]# su - oracle
[oracle@collabn1 ~]$ vncserver :1

You will require a password to access your desktops.

Password: racattack
Verify: racattack
xauth:  creating new authority file /home/oracle/.Xauthority

New 'collabn1.racattack:1 (oracle)' desktop is collabn1.racattack:1

Creating default startup script /home/oracle/.vnc/xstartup
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/collabn1.racattack:1.log

在您的笔记本电脑上打开 vncviewer,并填写 collabn1 的 IP 地址,后跟  :1


RA-VNCViewer-Connect form

出现提示时输入密码 racattack

RA-VNCViewer-Password form

图形界面已准备好进行网格基础设施安装。

RA-VNCViewer-Connected


当您进行到网格基础设施的接口设置时,请记住,由于 Vagrant 的要求,接口与 12cR1 手册中的接口不同。

准备好配置网络时,您需要执行以下操作

单击 识别网络接口...

检查是否设置了正确的地址

  • eth0 标记为 不使用
  • eth1 标记为 公共
  • eth2 标记为 专用

单击 确定 关闭 识别网络接口 窗口。

最后,单击 下一步

现在,您可以参考 RAC Attack 12cR1 手册,并从 RAC_Attack_12c/Prepare_for_GI_install 开始。

更新基本框

[edit | edit source]

截至今天,racattack/oracle65 的版本为 14.03.29。

这是基本框,用于创建新的来宾机器的框。

当创建新的来宾机器时,即在您首次运行 vagrant up 或在运行 vagrant detroy 后想要重新创建系统时。

为了验证您是否使用的是最新版本,请使用命令 vagrant box outdated --global

alvaros-mini:racattack12cR1 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:racattack12cR1 alvarom$

这将检查已安装的基本框的版本。


当有新版本发布时,更新基本框的命令为 vagrant box update

示例输出

alvaros-mini:racattack12cR1 alvarom$ vagrant box update
==> default: Checking for updates to 'racattack/oracle65'
default: Version constraints: >= 0
default: Provider: virtualbox
==> default: Box 'racattack/oracle65' (v14.03.29) is running the latest version.

更新操作系统

[edit | edit source]

如果您需要更新来宾机器的操作系统,这些机器配置为使用 Oracle 的 public-yum

这意味着您可以通过执行 yum update 来更新。

有关 yum 的更多信息,请访问 http://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_yum.html

RAC Attack 自动化/高级使用


RAC_Attack_12c

华夏公益教科书