Erstellen Sie mit Ansible ein GlusterFS-Volume und hängen Sie es ein

16

Ich verwende GlusterFS, um Volumes auf 4 Computern zu erstellen und zu mounten. Nehmen wir zum Beispiel die Maschinen genannt machine1, machine2, machine3und machine4.

Meine Kollegen wurden bereits erfolgreich untersucht.

Ich habe den folgenden Befehl verwendet, um mein Volume zu erstellen:

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

Ich starte die Lautstärke dann mit:

sudo gluster volume start ssl

Ich habe das Verzeichnis /myproject/sslmit dem folgenden Befehl gemountet :

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

Wenn auf jedem Computer bereitgestellt, funktioniert alles wie erwartet und das /myproject/sslVerzeichnis verfügt über Daten, die von allen Computern gemeinsam genutzt werden.

Die Frage ist, wie um alles in der Welt mache ich das auf Ansible-Weise?

Hier sind meine Versuche, diese beiden Befehle auf Ansible-Weise auszuführen:

- 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

Obwohl ein Peer-Probe bereits bei einer vorherigen Aufgabe erfolgreich zurückgegeben wurde, Configure Gluster volumeschlägt die Aufgabe fehl mit:

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"}

Wenn ich diese Ansible-Task durch den ersten von mir vorgeschlagenen Shell-Befehl ersetze, funktioniert alles einwandfrei, aber dann Ensure Gluster volume is mountedschlägt das fehl mit:

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"}

Die relevante Protokollausgabe ist:

[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

Das Volume wird also nicht von der Ansible-Task gestartet.

Meine Frage ist im Wesentlichen, wie ich ein Volume auf die gleiche Weise wie mit den oben genannten drei Befehlen (Ansible-Methode) erstelle, einbinde und starte.

Karim Tabet
quelle
6
Ich bin mir nicht sicher, ob du das jemals herausgefunden hast oder nicht, aber ich wollte eine meiner Ansible-Rollen für GlusterFS teilen, die dich in die richtige Richtung führen könnte. github.com/mrlesmithjr/ansible-glusterfs
mrlesmithjr

Antworten:

2

Sie sollten die Lautstärke starten mit 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
quelle