Saya menggunakan GlusterFS untuk membuat dan me-mount volume di 4 mesin. Katakanlah misalnya, mesin disebut machine1
, machine2
, machine3
dan machine4
.
Rekan-rekan saya sudah berhasil diselidiki.
Saya telah menggunakan perintah berikut untuk membuat volume saya:
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
Saya kemudian mulai volume dengan:
sudo gluster volume start ssl
Saya telah memasang direktori /myproject/ssl
menggunakan perintah berikut:
sudo mount -t glusterfs machine1:/ssl /myproject/ssl
Ketika dipasang pada setiap mesin, semuanya berfungsi seperti yang diharapkan dan /myproject/ssl
direktori memiliki data yang dibagikan di semua mesin.
Pertanyaannya adalah, bagaimana bisa saya melakukan ini dengan cara Ansible?
Berikut ini adalah upaya saya dalam melakukan kedua perintah dengan cara 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
Meskipun penyelidikan rekan sudah kembali berhasil pada tugas sebelumnya, Configure Gluster volume
tugas gagal dengan:
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"}
Jika saya mengganti tugas Ansible ini dengan perintah shell pertama yang saya sarankan, semuanya berfungsi dengan baik, tetapi kemudian Ensure Gluster volume is mounted
gagal dengan:
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"}
Output log yang relevan adalah:
[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
Jadi, volume tidak dimulai oleh tugas Ansible.
Pertanyaan saya adalah, pada dasarnya, bagaimana cara saya membuat, me-mount dan memulai volume dengan cara yang sama saya lakukan dengan 3 perintah yang disebutkan di atas, cara Ansible?
Jawaban:
Anda harus memulai volume dengan
state: started
:sumber