Python sao chép tập tin giữa các máy chủ
Làm cách nào để sao chép tệp giữa các máy chủ từ xa trong Ansible?. là mục đích đằng sau bài viết này. Bài viết nào tôi cũng đọc và góp ý cho tôi nhưng không có gì thiết thực. Tôi chỉ đơn giản là muốn tạo rsync ansible. Tôi muốn thực thi Show
Vì vậy, đây là bài viết định hướng ví dụ. Trong bài đăng này, chúng ta sẽ thảo luận về hai tùy chọn chính có sẵn để sao chép các tệp giữa các máy chủ từ xa hoặc từ xa đến xa Nói chung, khi chúng tôi muốn sao chép các tệp từ máy chủ này sang máy chủ khác, điều đầu tiên xuất hiện trong đầu chúng tôi là SCP và ansible có một mô-đun dành riêng cho cùng tên Nếu bạn muốn sao chép tệp từ Ansible Control Master sang máy chủ từ xa, mô-đun COPY (scp) sẽ ổn. Nhưng chúng tôi cần một cái gì đó nhiều hơn khi chúng tôi muốn sao chép các tệp giữa các máy chủ từ xa hoặc sao chép các tệp giữa điều khiển từ xa với điều khiển từ xa Chúng tôi sẽ sử dụng một số mô-đun ansible như sao chép, tìm nạp, đồng bộ hóa để thực hiện yêu cầu sao chép tệp giữa các máy chủ trong ansible Mặc dù chúng tôi đã biết mô-đun Ansible Copy được sử dụng để làm gì Đây là phần giới thiệu đơn giản về Ansible Fetch và Ansible Synchronize
Mục lục Các Chỉ mục
Kế hoạch Plan / Yêu cầuĐể bắt đầu, chúng ta hãy tự xác định một số yêu cầu để chúng ta có thể liên hệ và thống nhất với nhau Chúng tôi có hai máy chủ được đặt tên như sau
Yêu cầu là copy 1 file từ mwiapp01 sang mwiapp02. Trước khi chúng tôi tiếp tục, Đây là sơ đồ cơ sở hạ tầng thiết lập của chúng tôi
Phương thức 1. Sao chép từ app01 sang app02 bằng cách sử dụng mô-đun tìm nạp moduleKHÔNG cần xác thực SSH giữa các nút từ xa cho phương pháp này Đây là tùy chọn tốt nhất và dễ dàng nhất để truyền tệp giữa các nút từ xa Khi bạn không bật Xác thực dựa trên khóa SSH giữa các nút từ xa. Mặc dù vậy, đó không phải là (hoặc) con đường ngắn nhất. Nó hoạt động tốt khi trọng tâm chính của chúng tôi là hoàn thành công việc cho dù phương pháp có thể là gì đó là một quá trình gồm hai bước khi nói đến phương pháp này Bước 1. Tìm nạp tệp từ máy chủ từ xa (nguồn) về chủ ansible Bước 2. Đẩy (Sao chép) tệp từ máy chủ ansible sang máy chủ từ xa (đích) Ở đây, chủ hoạt động như một bộ đệm nơi các tệp được lưu trữ tạm thời và sau đó được chuyển Hãy xem xét vở kịch sau đây thực hiện cả hai nhiệm vụ nêu trên --- - hosts: app tasks: - name: Fetch the file from the mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}" - name: Copy the file from master to mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}" ở đây chúng tôi sử dụng
Về cơ bản, chúng tôi đang hướng dẫn Ansible chỉ thực thi tác vụ Tìm nạp trên máy chủ --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"0 là máy chủ thực thi từ xa hiện tại
Phương pháp 2. Sao chép từ ứng dụng01 sang ứng dụng02 bằng mô-đun đồng bộ hóa moduleXác thực dựa trên khóa SSH phải được bật giữa các máy chủ từ xa Để mô-đun Đồng bộ hóa hoạt động dễ dàng, xác thực dựa trên Khóa SSH phải được bật giữa các nút từ xa. nếu không, tác vụ đồng bộ hóa sẽ bị kẹt và trò chơi Ansible của bạn cũng vậy Nói cách khác, các nút từ xa sẽ có thể đăng nhập vào nhau mà không cần phải nhập mật khẩu theo cách thủ công. Chúng tôi đạt được điều này chủ yếu nhờ sự trợ giúp của khóa SSH Như đã nói trước đó. Đồng bộ hóa Ansible giống Ansible RSYNC hơn. tính năng Để biết cách bật Xác thực dựa trên khóa chỉ trong vài giây, hãy tham khảo bài viết sau
Khi chúng tôi đã sẵn sàng với xác thực dựa trên Khóa SSH. Chúng tôi đã sẵn sàng để chơi vở kịch. (vở kịch) Có hai phương pháp để sao chép tệp bằng mô-đun Đồng bộ hóa
Xem xét các playbook sau sao chép tệp từ --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"0 bằng cả phương pháp Đồng bộ hóa Kéo và Đồng bộ hóa Đẩy
Đồng bộ hóa KéoNhắm mục tiêu đến. Máy chủ nguồn (mwiapp01) Được ủy quyền và thực hiện trên. Máy chủ đích (mwiapp02) Giải trình. Vì nó đang được thực thi trong máy chủ đích nơi tệp phải đến. Nhiệm vụ là kéo tệp từ máy chủ nguồn gốc (hoặc)
Đây là playbook được thực thi trên máy chủ đích --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"0 với sự trợ giúp của ủy quyền và --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"5 tệp từ mwiapp01 đến mwiapp02 --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"
Bạn có thể nghĩ rằng playbook được thiết lập để thực thi trên máy chủ đầu tiên vì lệnh --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"6 đang nhắm mục tiêu vào máy chủ đầu tiên. --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"7 mwiapp01 Nhưng bạn phải lưu ý rằng chúng tôi thực sự đang thực hiện nhiệm vụ này trên máy chủ thứ hai --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"8 với sự trợ giúp của --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"9 Xem Bản ghi màn hình sau đây để hiểu rõ hơn về điều này
Đồng bộ hóa ĐẩyNhắm mục tiêu đến. Máy chủ đích (mwiapp02) Được ủy quyền và thực hiện trên. Máy chủ nguồn (mwiapp01) Giải trình. Vì nó đang được thực thi trong máy chủ nguồn nơi tệp đã có sẵn. Nhiệm vụ là đẩy tệp đến máy chủ đích Đây là playbook được thực thi trên máy chủ nguồn - name: Sync Push task - Executed on source host "{{groups['app'][0]}}" hosts: "{{groups['app'][1]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups['app'][0]}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"1 tệp từ 01 đến 02 - name: Sync Push task - Executed on source host "{{groups['app'][0]}}" hosts: "{{groups['app'][1]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups['app'][0]}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"
Bạn có thể nghĩ rằng playbook được thiết lập để thực thi trên máy chủ thứ hai vì lệnh --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"6 đang nhắm mục tiêu vào máy chủ đầu tiên. - name: Sync Push task - Executed on source host "{{groups['app'][0]}}" hosts: "{{groups['app'][1]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups['app'][0]}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"3 mwiapp02 Nhưng bạn phải lưu ý rằng chúng tôi thực sự đang thực hiện nhiệm vụ này trên máy chủ đầu tiên --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"9 Playbook được tạo thành từ hai danh sách nhiệm vụ dựa trên máy chủ. Lần chạy đầu tiên bằng cách sử dụng Đồng bộ hóa kéo sẽ chạy vào ngày --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"0và lần chạy thứ hai với Đồng bộ hóa đẩy sẽ chạy vào ngày mwiapp01 Mặc dù playbook là dễ hiểu (dễ hiểu). Tôi cảm thấy có một số dòng đặc biệt cần được giải thích thêm, chẳng hạn như - name: Sync Push task - Executed on source host "{{groups['app'][0]}}" hosts: "{{groups['app'][1]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups['app'][0]}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"8 Nó đại diện cho phần tử đầu tiên (hoặc) máy chủ của nhóm máy chủ có tên là “ứng dụng” giống như một mảng Hy vọng hình ảnh sau đây sẽ làm cho nó rõ ràng Hai dòng quan trọng khác trong tệp như sau
Hy vọng bạn có thể đã có nó bây giờ. --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"9 và --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"6 cùng với rsync 1 trong ansible-playbook, hoạt động cùng nhau để thực hiện (hoặc) sao chép từ xa giữa các nút từ xa
Đầu ra thực hiện Trong ảnh chụp màn hình trước, chúng tôi đã thực hiện 3 lệnh. Cái đầu tiên và cái cuối cùng là một lệnh đặc biệt của Ansible để kiểm tra tính khả dụng của tệp trong thư mục --- - name: Sync Pull task - Executed on the Destination host "{{groups['app'][1]}}" hosts: "{{groups['app'][0]}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups['app'][1]}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"0
chúng tôi đã sao chép thành công một tệp từ mwiapp01 sang mwiapp02 bằng cách sử dụng cả Tìm nạp và Đồng bộ hóa modules.
Phần kết luậnTrong bài đăng này, chúng tôi đã học và thực hiện thành công cách sao chép tệp giữa các máy chủ từ xa bằng cách sử dụng các mô-đun sao chép và tìm nạp ansible. Chúng tôi đã học được hai phương pháp để sao chép tệp giữa các máy chủ bằng cách sử dụng ansible Hy vọng bạn thấy bài viết này hữu ích
Tài liệu tham khảo và các bài viết liên quan khác
Hy vọng bài viết này sẽ giúp. Nếu bạn thích câu chuyện này xin hay chia sẻ nó
Thanks, Theo dõi chúng tôi trên Facebook hoặc Twitter Đăng ký nội dung độc quyền "chỉ dành cho người đăng ký" Tên* E-mail* Thêm từ Khoảng không quảng cáo phần mềm trung gian
|