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.