Otra vez voy a usar el repositorio de oravirt, que hizo un gran laburo y tiene varios repos con distintas configurationes, reusando la mayor parte del código.
Incluyo en este artículo todos los ajustes que tuve que hacer por usarlo en Windows 10.
Seguramente no sean necesarios si tratan de hacer esta misma instalación en un host linux.
Actualicé todas las versiones en mi PC desde el post anterior al usar RAC.
Ahora tengo:
Microsoft Windows [Version 10.0.16299.192]
(c) 2017 Microsoft Corporation. All rights reserved.
D:\GitHub> git --version
git version 2.11.0.windows.3
D:\GitHub> VBoxManage --version
5.2.6r120293
D:\GitHub> vagrant --version
Vagrant 2.0.1
Pasos a seguir:
1) Instalar el repositorio
oravirt tiene varios repositorios preconfigurados para distintos escenarios.
Me interesa crear Oracle single instance usando ASM, para luego configurar dataguard con dos máquinas. Así que el repo indicado es vagrant-vbox-si-asm.
Para instalarlo:
D:\github> git clone --recursive https://github.com/oravirt/vagrant-vbox-si-asm
Cloning into 'vagrant-vbox-si-asm'...
remote: Counting objects: 87, done.
remote: Total 87 (delta 0), reused 0 (delta 0), pack-reused 87
Unpacking objects: 100% (87/87), done.
Submodule 'extra-provision/ansible-oracle' (https://github.com/oravirt/ansible-oracle.git) registered for path 'extra-provision/ansible-oracle'
Cloning into 'D:/GitHub/vagrant-vbox-si-asm/extra-provision/ansible-oracle'...
remote: Counting objects: 2464, done.
remote: Total 2464 (delta 0), reused 0 (delta 0), pack-reused 2464
Receiving objects: 100% (2464/2464), 581.92 KiB | 320.00 KiB/s, done.
Resolving deltas: 100% (1210/1210), done.
Submodule path 'extra-provision/ansible-oracle': checked out '852ca12ad5f8025761529c19315b4e7198250740'
2) Ajustes a los archivos de configuracion
Se necesitan ajustes menores a la configuración por defecto de este repo para crear un entorno standby: queremos dos VMs y connectividad entre ellas.
Siempre hay que poner las versiones de Oracle y OS que queremos usar.
En este ejemplo me interesa probar Oracle 12.1.0.2 y Oracle Enterprise Linux 6.8
Los archivos y código a modificar son:
- \vagrant-vbox-si-asm\hosts.yml
basename_vm: ora12c-si-asm-oel68
num_vm: 2
base_priv_ip: 172.16.56.30 # (esto es una IP arbiraria)
- \vagrant-vbox-si-asm\extra-provision\ansible-oracle\group_vars
oracle_install_version_gi: 12.1.0.2
oracle_version_db: 12.1.0.2
Esto es todo lo necesario para mi prueba.
Se pueden cambiar más cosas, como por ejemplo: nombre y cantidad de diskgroups, IPs, claves de usuarios root y oracle, etc.
Todo está muy bien documentado en el repositorio, tanto en el readme como en cada archivo de configuración.
3) Copiar archivos de instalación de Oracle
En el directorio \vagrant-vbox-si-asm\swrepo se deben copiar los archivos de instalación de Oracle para la versión que queremos instalar.
Estos archivos se bajan de OTN, previo registro gratuito.
D:\GitHub\vagrant-vbox-si-asm\swrepo>dir
Volume in drive D is externo
Volume Serial Number is 88CD-FFE4
Directory of D:\GitHub\vagrant-vbox-si-asm\swrepo
01/20/2018 09:36 PM.
01/20/2018 09:36 PM..
01/20/2018 09:36 PM 0 .keep
01/20/2018 07:07 PM 1,151,304,589 p13390677_112040_Linux-x86-64_2of7.zip
01/20/2018 07:08 PM 1,205,251,894 p13390677_112040_Linux-x86-64_3of7.zip
01/20/2018 07:07 PM 1,395,582,860 p13390677_112040_Linux-x86-64_1of7.zip
07/29/2016 09:48 PM 1,747,021,273 linuxamd64_12102_grid_1of2.zip
07/29/2016 11:28 PM 646,969,279 linuxamd64_12102_grid_2of2.zip
07/29/2016 09:35 PM 1,673,519,571 linuxamd64_12102_database_1of2.zip
07/29/2016 09:27 PM 1,014,527,110 linuxamd64_12102_database_2of2.zip
8 File(s) 8,834,176,576 bytes
2 Dir(s) 378,020,823,040 bytes free
Como ven tengo Oracle 11.2.0.4 y 12.1.0.2, pero en este artículo vamos a usar sólo los archivos de 12.1.0.2.
4) Ajustes para prevenir errores
Los problemas que siguen me dieron al intentar ejecutar el paso 5.
Acá me estoy adelantando y les digo como resolverlos, así pueden hacer los ajustes antes de empezar y ahorrase problemas.
a) lvol.py
El primer intento de crear las VMs me dio este error:
TASK [orahost : filesystem | create lv] ****************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: SyntaxError: invalid syntax
fatal: [ora12c-si-asm-oel681]: FAILED! => {"failed": true, "msg": "Unexpected failure during module execution.", "stdout": ""}
to retry, use: --limit @/vagrant/ansible-oracle/vbox-si-asm-install.retry
PLAY RECAP *********************************************************************
ora12c-si-asm-oel681 : ok=13 changed=11 unreachable=0 failed=1
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
Reporté el problema y tuve pronta respuesta de Mickael, el creador del repositorio. Pero el error no pudo ser reproducido usando versiones similares. Así que es posible que no le pase a todos.
Despues de investigar un poco, esto era causado por el archivo lvol.py incluido en el directorio library de este repo.
La solución en mi caso fue borrar el archivo \vagrant-vbox-si-asm\extra-provision\ansible-oracle\library\lvol.py.
b) variables de ambiente
Otro problema fue que el paso de provisioning no se ejecutaba.
El comando 'vagrant up' terminaba sin instalar el software, y 'vagrant provision' tampoco hacía nada.
D:\GitHub\vagrant-vbox-si-asm> set setup=true
D:\GitHub\vagrant-vbox-si-asm> vagrant provision
==> ora12c-si-asm-oel681: Running provisioner: ansible_local...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.2.1.0).
Alternatively, the compatibility mode can be specified in your Vagrantfile:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode
ora12c-si-asm-oel681: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [ora12c-si-asm-oel681]
TASK [init : Install packages] *************************************************
ok: [ora12c-si-asm-oel681] => (item=[u'ntp', u'dnsmasq'])
TASK [init : Make sure ntp is running] *****************************************
ok: [ora12c-si-asm-oel681]
TASK [init : Generate /etc/hosts] **********************************************
ok: [ora12c-si-asm-oel681]
TASK [init : Generate /etc/resolv.conf] ****************************************
ok: [ora12c-si-asm-oel681]
TASK [init : Generate dnsmasq config] ******************************************
ok: [ora12c-si-asm-oel681]
TASK [init : Start and enable dnsmasq] *****************************************
ok: [ora12c-si-asm-oel681]
PLAY RECAP *********************************************************************
ora12c-si-asm-oel681 : ok=7 changed=0 unreachable=0 failed=0
D:\GitHub\vagrant-vbox-si-asm>
El problema es con Vagrant usando variables de ambiente en Windows 10, ya que en otras versiones de Windows se ha probado y funciona bien.
Este error me dio con Powershell y cmd.
Lo arreglé comentado el código que valida la variable para decidir si ejecutar el provisionamiento, así lo ejecute siempre.
Hay que tener este cambio presente si volvemos a ejecutar y no queremos que haga provisioning. No es nuestro caso, yo siempre que tuve problemas borre y empecé de nuevo, así que siempre lo necesité.
Estas son las dos líneas a modificar en el archivo Vagrantfile (notar el agregado del # al principio para comentar el código):
(line 166) # if provisioning and ENV['setup'] == 'true'
...
(line 190) # end # end provisioning
5) Ahora sí, creando nuestro ambiente
Luego de los dos cambios anteriores, un solo comando crea las VM, las configura e instala el software:
D:\github\vagrant-vbox-si-asm> vagrant up
Bringing machine 'ora12c-si-asm-oel681' up with 'virtualbox' provider...
==> ora12c-si-asm-oel681: Box 'oravirt/ol68' could not be found. Attempting to find and install...
ora12c-si-asm-oel681: Box Provider: virtualbox
ora12c-si-asm-oel681: Box Version: >= 0
==> ora12c-si-asm-oel681: Loading metadata for box 'oravirt/ol68'
ora12c-si-asm-oel681: URL: https://vagrantcloud.com/oravirt/ol68
==> ora12c-si-asm-oel681: Adding box 'oravirt/ol68' (v20170418) for provider: virtualbox
ora12c-si-asm-oel681: Downloading: https://vagrantcloud.com/oravirt/boxes/ol68/versions/20170418/providers/virtualbox.box
ora12c-si-asm-oel681:
==> ora12c-si-asm-oel681: Successfully added box 'oravirt/ol68' (v20170418) for 'virtualbox'!
==> ora12c-si-asm-oel681: Importing base box 'oravirt/ol68'...
...
Notar que la primera ejecución descarga la imagen del SO a usar, de 968Mb.
El tamaño cmabia según la versión de SO que hayan elegido.
Si tenemos que ejecutar el mismo comando (luego de corregir algún error) sólo se valida que la imagen ya exista y se reusa.
D:\GitHub\vagrant-vbox-si-asm> vagrant up
Bringing machine 'ora12c-si-asm-oel681' up with 'virtualbox' provider...
==> ora12c-si-asm-oel681: Importing base box 'oravirt/ol68'...
Volviendo a la ejecución original: tomó un par de horas completar la instalación en mi máquina (Intel i7, 16Gb RAM, HD 1Tb). Este tiempo varía si usan un disco SSD.
El output es largo, así son las líneas finales si anduvo todo bien:
...
PLAY RECAP *********************************************************************
ora12c-si-asm-oel681 : ok=109 changed=77 unreachable=0 failed=0
ora12c-si-asm-oel682 : ok=109 changed=77 unreachable=0 failed=0
6) Conectando a las VM
Esta es la parte fácil, si todo anduvo bien las VM estan corriendo y con el software instalado:
D:\GitHub\vagrant-vbox-si-asm> vagrant box list
kikitux/oracle6-racattack (virtualbox, 16.01.01)
oravirt/ol68 (virtualbox, 20170418)
D:\GitHub\vagrant-vbox-si-asm> vagrant ssh ora12c-si-asm-oel681
Last login: Wed Jan 24 15:56:58 2018 from 192.168.9.70
----------------------------------------
Welcome to ora12c-si-asm-oel681
OracleLinux 6.8 x86_64
FQDN: ora12c-si-asm-oel681.internal.lab
IP: 10.0.2.15
Processor: Intel(R) Core(TM) i7-4600M CPU @ 2.90GHz
#CPU's: 1
Memory: 3254 MB
Kernel: 4.1.12-37.4.1.el6uek.x86_64
----------------------------------------
[vagrant@ora12c-si-asm-oel681 ~]$ ps -eaf | grep pmon
oracle 15488 1 0 15:46 ? 00:00:04 ora_pmon_orclcdb
oracle 24473 1 0 14:03 ? 00:00:04 asm_pmon_+ASM
vagrant 27939 27921 0 21:22 pts/0 00:00:00 grep pmon
En caso de necesitar recrear el ambiente para hacer ajustes en los scripts, se pueden borrar cada VM con un comando:
D:\github\vagrant-vbox-si-asm> vagrant destroy ora12c-si-asm-oel681
ora12c-si-asm-oel681: Are you sure you want to destroy the 'ora12c-si-asm-oel681' VM? [y/N] y
==> ora12c-si-asm-oel681: Destroying VM and associated drives...
7) Configurar la base standby
Este paso lo hice manual, ya que ambas VMs quedaron configuradas iguales con una base Oracle corriendo de nombre orcldb, y no hay repositorios todavía con un playbook de ansible para hacer esta configuración.
Son varios pasos extra, así que lo dejo para el próximo post para mantener ambos de fácil referencia
Resumen
Si no necesitan instalar distintas versiones de forma frecuente, y ya saben como instalar todo de forma manual, hacer todo este proceso la primera vez les puede llevar el mismo tiempo.
El valor de este procedimiento es que hace todo con un solo comando, y una vez que estamos familiarizados con la configuración, crear ambientes a medida es muy simple, libre de errores, y rápido.
No hay comentarios.:
Publicar un comentario