Archivo
Introducción a Ansible III – Patrones en Ansible
Los patrones en Ansible se utilizan para decidir que nodos queremos gestionar. Esto implica a que nodos queremos aplicar las configuraciones.
Un patrón tiene la siguiente estructura
ansible <pattern_goes_here> -m <module_name> -a <arguments>
Por ejemplo, si queremos reiniciar el servicio http en el grupo definido previamente de webservers, ejecutaríamos el siguiente comando
ansible webservers -m service -a "name=httpd state=restarted"
Como patrón, o nodos a los que lanzar los comandos, podemos utilizar también los siguientes patrones
all #Todos los nodos * #Todos los nodos nodo1.dominio.com #Solo un nodo 192.168.0.20 #Solo un nodo webservers:dbservers #Que esté en cualquiera de los dos grupos (OR) webservers:!ntpservers #Que esté en webservers pero que no aparezcan en ntpservers webservers:&ntpservers #Que esté en webservers y que aparezcan en ntpservers
Introducción a Ansible II – Primera conexión desde el master a los servidores
Para realizar las conexiones a los servidores, Ansible utiliza por defecto claves ssh para realizar la conexión a los nodos, por eso primero tenemos que generar una clave en el servidor y exportarla a los nodos.
Creación de claves en el nodo master
root@master:~/ansible# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: e9:7f:f0:ea:25:6d:b0:8a:26:39:8d:09:bd:f6:9d:70 root@master The key's randomart image is: +---[RSA 2048]----+ | | | | | | | . | | . S . | | . . . .+ | | . *. E oo+ | | O o= + +o | | . =o +.+o | +-----------------+
Exportación de claves a los clientes.
root@master:~# ssh-copy-id 192.168.1.11 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.1.11's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.1.11'" and check to make sure that only the key(s) you wanted were added.
Una vez que tenemos las claves exportadas, podemos comprobar la conexión entre el master y los clientes, para eso vamos a utilizar un simple ping de momento.
# ansible all -m ping 192.168.1.11 | success >> { "changed": false, "ping": "pong" }
Si por el contrario no queremos exportar los certificados, podemos forzar a que Ansible nos pregunte la contraseña para realizar la conexión a los clientes, aunque para esto tendremos que instalar previamente la aplicación “sshpass”.
# apt-get install sshpass -y
# ansible all --ask-pass -m ping SSH password: 192.168.1.11 | success >> { "changed": false, "ping": "pong" }
También podemos forzar la conexión a los equipos remotos con un usuario diferente al que estamos utilizando.
# ansible all -m ping -u user --ask-pass
Por último, si nos autentificamos con un usuario específico es posible que queramos acceder a tareas administrativas, pasa eso podemos utilizar el flag “–sudo”
# ansible all -m ping -u user --ask-pass --sudo
Introducción a Ansible I – Configuración del Inventario
El inventario (inventory) es uan descripción de los nodos acesibles por Ansible. El inventario se define en un fichero de confirmación en formato INI, la ubicación predeterminada del fichero es /etc/ansible/hosts
El fichero puede tener definiciones de grupos [grupo], o simplemente definiciones de servidores.
Un grupo puede tener uno o más servidores.
[webservers] web1.dominio.com web2.dominio.com 192.168.1.2 [dbservers] db1.dominio.com db2.dominio.com
También se puede definir un rango de servidores
db[3:10].dominio.com
Instalación de Ansible en Debian/Ubuntu
Ansible es una aplicación para administrar conjuntos de nodos. La ventaja de esta aplicación radica en que es multiplataforma y los nodos administrados no requieren la instalación de ninguna aplicación.
La instalación del servidor de Ansible en Debian/Ubuntu se puede realizar de las siguientes maneras:
Instalación de Ansible desde github
$ sudo apt-get update $ sudo apt-get install python-pip python-dev git -y $ sudo pip install PyYAML jinja2 paramiko $ git clone https://github.com/ansible/ansible.git $ git submodule update --init --recursive $ cd ansible $ sudo make install $ sudo mkdir /etc/ansible $ sudo cp ~/ansible/examples/hosts /etc/ansible/
Instalación de Ansible desde repositorios
$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible
Test de velocidad de red con Iperf en linux
Para comprobar la velocidad de conexión entre dos servidores Linux, podemos utilizar la herramienta iperf.
En el siguiente enlace hay una documentación muy buena, de la cual recomiendo su lectura.
A continuación unas las pruebas que he echo yo para medir la velocidad de un bonding de dos tarjetas 10G.
Server
./iperf -s -f G
Client
for i in `seq 1 20`; do ./iperf -c 10.100.82.71 -t 60 -i 2 -f G & done
Salida de las pruebas.
# ./iperf -s -f G ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 0.00 GByte (default) ------------------------------------------------------------ [ 4] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56307 [ 5] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56308 [ 6] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56309 [ 7] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56310 [ 8] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56311 [ 9] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56312 [ 10] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56313 [ 11] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56314 [ 12] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56315 [ 13] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56316 [ 14] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56317 [ 15] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56318 [ 16] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56319 [ 17] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56320 [ 18] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56321 [ 19] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56322 [ 20] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56323 [ 21] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56324 [ 22] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56325 [ 23] local 10.100.82.71 port 5001 connected with 10.100.82.72 port 56326 [ 16] 0.0-60.0 sec 10.9 GBytes 0.18 GBytes/sec [ 4] 0.0-60.0 sec 7.94 GBytes 0.13 GBytes/sec [ 5] 0.0-60.0 sec 8.44 GBytes 0.14 GBytes/sec [ 6] 0.0-60.0 sec 3.06 GBytes 0.05 GBytes/sec [ 9] 0.0-60.0 sec 7.70 GBytes 0.13 GBytes/sec [ 14] 0.0-60.0 sec 2.80 GBytes 0.05 GBytes/sec [ 17] 0.0-60.0 sec 5.15 GBytes 0.09 GBytes/sec [ 18] 0.0-60.0 sec 11.4 GBytes 0.19 GBytes/sec [ 19] 0.0-60.0 sec 7.11 GBytes 0.12 GBytes/sec [ 21] 0.0-60.0 sec 6.28 GBytes 0.10 GBytes/sec [ 22] 0.0-60.0 sec 7.66 GBytes 0.13 GBytes/sec [ 23] 0.0-60.0 sec 12.2 GBytes 0.20 GBytes/sec [ 7] 0.0-60.0 sec 4.93 GBytes 0.08 GBytes/sec [ 10] 0.0-60.0 sec 2.93 GBytes 0.05 GBytes/sec [ 11] 0.0-60.0 sec 5.21 GBytes 0.09 GBytes/sec [ 13] 0.0-60.0 sec 5.66 GBytes 0.09 GBytes/sec [ 20] 0.0-60.0 sec 3.36 GBytes 0.06 GBytes/sec [ 8] 0.0-60.2 sec 9.97 GBytes 0.17 GBytes/sec [ 12] 0.0-60.2 sec 8.91 GBytes 0.15 GBytes/sec [ 15] 0.0-60.2 sec 6.32 GBytes 0.10 GBytes/sec [SUM] 0.0-60.2 sec 138 GBytes 2.29 GBytes/sec