สร้างและต่อเชื่อมวอลุ่ม GlusterFS ด้วย Ansible


16

ฉันใช้ GlusterFS เพื่อสร้างและติดตั้งไดรฟ์ข้อมูลใน 4 เครื่อง พูดเช่นเครื่องจะเรียกว่าmachine1, machine2, และmachine3machine4

เพื่อนของฉันได้รับการตรวจสอบเรียบร้อยแล้ว

ฉันใช้คำสั่งต่อไปนี้เพื่อสร้างวอลลุ่มของฉัน:

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

จากนั้นฉันก็เริ่มโวลุ่มด้วย:

sudo gluster volume start ssl

ฉันได้ติดตั้งไดเรกทอรี/myproject/sslโดยใช้คำสั่งต่อไปนี้:

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

เมื่อติดตั้งในแต่ละเครื่องทุกอย่างทำงานได้ตามที่คาดหวังและ/myproject/sslไดเรกทอรีมีข้อมูลที่ใช้ร่วมกันในทุกเครื่อง

คำถามคือฉันจะทำสิ่งนี้ได้อย่างไรบนโลกใบนี้

นี่คือความพยายามของฉันในการทำทั้งสองคำสั่งด้วยวิธีที่เข้าใจได้

- 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

แม้ว่าโพรบแบบเพียร์จะกลับมาประสบความสำเร็จในงานก่อนหน้า แต่Configure Gluster volumeงานล้มเหลวด้วย:

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

หากฉันแทนที่งาน Ansible นี้ด้วยคำสั่ง shell แรกที่ฉันแนะนำทุกอย่างทำงานได้ดี แต่แล้วEnsure Gluster volume is mountedล้มเหลวด้วย:

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

ผลลัพธ์ของบันทึกที่เกี่ยวข้องคือ:

[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

ดังนั้นปริมาณจึงไม่เริ่มต้นโดยงาน Ansible

คำถามของฉันคือโดยพื้นฐานแล้วฉันจะสร้างเมานต์และเริ่มวอลลุ่มในแบบเดียวกับที่ฉันทำกับ 3 คำสั่งที่ได้กล่าวไว้ข้างต้น


6
ไม่แน่ใจว่าคุณเคยคิดเรื่องนี้มาก่อนหรือไม่ แต่ต้องการแบ่งปันบทบาท Ansible ของฉันให้กับ GlusterFS ที่อาจทำให้คุณไปในทิศทางที่ถูกต้อง github.com/mrlesmithjr/ansible-glusterfs
mrlesmithjr

คำตอบ:


2

คุณควรเริ่มเสียงด้วย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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.