Cree y monte el volumen GlusterFS con Ansible

16

Estoy usando GlusterFS para crear y montar volúmenes en 4 máquinas. Digamos por ejemplo, las máquinas se llaman machine1, machine2, machine3y machine4.

Mis compañeros ya han sido investigados con éxito.

He usado el siguiente comando para crear mi volumen:

sudo gluster volume create ssl replica 2 transport tcp machine1:/srv/gluster/ssl machine2:/srv/gluster/ssl machine3:/srv/gluster/ssl machine4:/srv/gluster/ssl force

Luego comienzo el volumen con:

sudo gluster volume start ssl

He montado el directorio /myproject/sslusando el siguiente comando:

sudo mount -t glusterfs machine1:/ssl /myproject/ssl

Cuando se monta en cada máquina, todo funciona como se esperaba y el /myproject/ssldirectorio tiene datos compartidos en todas las máquinas.

La pregunta es, ¿cómo diablos hago esto de la manera Ansible?

Aquí están mis intentos de hacer esos dos comandos de la manera Ansible:

- name: Configure Gluster volume.
  gluster_volume:
    state: present
    name: "{{ gluster.brick_name }}"
    brick: "{{ gluster.brick_dir }}"
    replicas: 2
    cluster: "{{ groups.glusterssl | join(',') }}"
    host: "{{ inventory_hostname }}"
    force: yes
  become: true
  become_user: root
  become_method: sudo
  run_once: true
  ignore_errors: true

- name: Ensure Gluster volume is mounted.
  mount:
    name: "{{ gluster.brick_name }}"
    src: "{{ inventory_hostname }}:/{{ gluster.brick_name }}"
    fstype: glusterfs
    opts: "defaults,_netdev"
    state: mounted
  become: true
  become_user: root
  become_method: sudo

A pesar de que una investigación entre pares ya regresó con éxito en una tarea anterior, la Configure Gluster volumetarea falla con:

fatal: [machine3]: FAILED! => 
  {"changed": false, 
   "failed": true, 
   "invocation": {
     "module_args": {
       "brick": "/srv/gluster/ssl",
       "bricks": "/srv/gluster/ssl", 
       "cluster": ["machine1", "machine2", "machine3", "machine4"],
       "directory": null, 
       "force": true, 
       "host": "machine3", 
       "name": "ssl", 
       "options": {}, 
       "quota": null, 
       "rebalance": false, 
       "replicas": 2, 
       "start_on_create": true, 
       "state": "present", 
       "stripes": null, 
       "transport": "tcp"}, 
     "module_name": "gluster_volume"}, 
   "msg": "failed to probe peer machine1 on machine3"}

Si reemplazo esta tarea Ansible con el primer comando de shell que sugerí, todo funciona bien, pero luego Ensure Gluster volume is mountedfalla con:

fatal: [machine3]: FAILED! => 
  {"changed": false, 
   "failed": true, 
   "invocation": {
     "module_args": {
       "dump": null, 
       "fstab": "/etc/fstab", 
       "fstype": "glusterfs", 
       "name": "ssl", "opts": 
       "defaults,_netdev", 
       "passno": null, "src": 
       "machine3:/ssl", 
       "state": "mounted"}, 
     "module_name": "mount"}, 
   "msg": "Error mounting ssl: Mount failed. Please check the log file for more details.\n"}

La salida de registro relevante es:

[2016-10-17 09:10:25.602431] E [MSGID: 114058] [client-handshake.c:1524:client_query_portmap
_cbk] 2-ssl-client-3: failed to get the port number for remote subvolume. Please run 'gluster volume status' on server to see if brick process is running.
[2016-10-17 09:10:25.602480] I [MSGID: 114018] [client.c:2042:client_rpc_notify] 2-ssl-client-3: disconnected from ssl-client-3. Client process will keep trying to connect to glusterd until brick's port is available
[2016-10-17 09:10:25.602500] E [MSGID: 108006] [afr-common.c:3880:afr_notify] 2-ssl-replicate-1: All subvolumes are down. Going offline until atleast one of them comes back up.
[2016-10-17 09:10:25.616402] I [fuse-bridge.c:5137:fuse_graph_setup] 0-fuse: switched to graph 2

Entonces, el volumen no comienza con la tarea Ansible.

Mi pregunta es, esencialmente, ¿cómo puedo crear, montar e iniciar un volumen de la misma manera que lo hice con los 3 comandos mencionados anteriormente, la forma Ansible?

Karim Tabet
fuente
66
No estoy seguro de si alguna vez descubriste esto o no, pero quisiste compartir un papel mío de Ansible para GlusterFS que podría llevarte en la dirección correcta. github.com/mrlesmithjr/ansible-glusterfs
mrlesmithjr

Respuestas:

2

Debe comenzar el volumen con state: started:

- name: Configure Gluster volume.
  gluster_volume:
    state: started
    name: "{{ gluster.brick_name }}"
    brick: "{{ gluster.brick_dir }}"
    replicas: 2
    cluster: "{{ groups.glusterssl | join(',') }}"
    host: "{{ inventory_hostname }}"
    force: yes
  become: true
  become_user: root
  become_method: sudo
  run_once: true
  ignore_errors: true
Élie Deloumeau-Prigent
fuente