Estoy usando GlusterFS para crear y montar volúmenes en 4 máquinas. Digamos por ejemplo, las máquinas se llaman machine1
, machine2
, machine3
y 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/ssl
usando 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/ssl
directorio 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 volume
tarea 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 mounted
falla 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?
Respuestas:
Debe comenzar el volumen con
state: started
:fuente