Tôi đang sử dụng GlusterFS để tạo và gắn kết khối lượng trên 4 máy. Nói ví dụ, các máy này được gọi là machine1
, machine2
, machine3
và machine4
.
Đồng nghiệp của tôi đã được thăm dò thành công.
Tôi đã sử dụng lệnh sau để tạo âm lượng của mình:
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
Sau đó tôi bắt đầu âm lượng với:
sudo gluster volume start ssl
Tôi đã gắn thư mục /myproject/ssl
bằng lệnh sau:
sudo mount -t glusterfs machine1:/ssl /myproject/ssl
Khi được gắn trên mỗi máy, mọi thứ hoạt động như mong đợi và /myproject/ssl
thư mục có dữ liệu được chia sẻ trên tất cả các máy.
Câu hỏi là, làm thế nào trên trái đất tôi làm điều này theo cách Ansible?
Dưới đây là những nỗ lực của tôi trong việc thực hiện hai lệnh đó theo cách 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
Mặc dù một thăm dò ngang hàng đã trở lại thành công trong một nhiệm vụ trước đó, Configure Gluster volume
nhiệm vụ thất bại với:
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"}
Nếu tôi thay thế tác vụ Ansible này bằng lệnh shell đầu tiên tôi đề xuất, mọi thứ sẽ hoạt động tốt, nhưng sau đó đã Ensure Gluster volume is mounted
thất bại với:
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"}
Đầu ra nhật ký có liên quan là:
[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
Vì vậy, âm lượng không được bắt đầu bởi tác vụ Ansible.
Câu hỏi của tôi là, về cơ bản, làm thế nào để tôi tạo, gắn kết và bắt đầu một âm lượng giống như cách tôi đã làm với 3 lệnh được đề cập ở trên, cách Ansible?