操作場景
海量文件服務適用于共享訪問的場景,當業務中需要使用多臺云主機訪問同一文件系統時,您可以通過我們提供的腳本,填寫配置文件、執行腳本命令,實現多臺云主機批量掛載同一文件系統,減少操作時間,提高工作效率。
注意
- 執行批量掛載的云主機實例需要與文件系統歸屬于同一資源池的同一VPC下。
- 目前僅支持Linux操作系統的云主機,請參考操作系統限制。
- 僅支持root賬戶進行批量掛載操作。
- 務必按照本文中要求的固定格式填寫需要執行批量掛載的云主機的相關信息。
- 請保證本文中創建的inventory、auto_batch_mount.sh文件與mount_nfs.yml文件在同一目錄下,否則會導致掛載失敗。
文件存儲的服務端口為:111、139、2049、20048、445、11002、11003、10141,設置安全組時不要禁止,以防無法訪問文件服務。
操作步驟
登錄天翼云控制中心,單擊管理控制臺左上角的
,選擇地域。選擇“計算>彈性云主機”,進入彈性云主機控制臺頁面,找到即將執行批量掛載操作的任何一臺云主機。
以root用戶登錄該彈性云主機,登錄方法參考登錄Linux彈性云主機。
創建并填寫配置文件inventory。
1)在Linux vi命令行工具中依次執行以下命令創建配置文件inventory并打開。
touch inventoryvi inventory2)將按照下述格式填寫的內容復制到配置文件inventory中,保存并退出。需要將各參數替換成相應的實際值,各參數說明見下方表格。配置文件內容可在Windows記事本中或者Linux vi命令實現編輯,供后續使用。復制完成后輸入
:wq保存并退出。[all:vars] share_path=掛載地址 [target_host] 彈性IP passwd=root用戶密碼 local_path=本地掛載路徑 彈性IP passwd=root用戶密碼 local_path=本地掛載路徑 彈性IP passwd=root用戶密碼 local_path=本地掛載路徑 ……參數 說明 云主機彈性IP 在云主機詳情頁中“彈性IP”頁簽獲取該云主機公網IP的IP地址。 root用戶密碼 root用戶密碼。 本地掛載路徑 本地掛載路徑為云主機上用于掛載文件系統的本地路徑,本操作中將通過腳本自動創建,無須額外創建。 掛載地址 可在文件系統詳情頁獲取。 創建批量掛載腳本auto_batch_mount.sh。
1)創建腳本文件,并打開:
touch auto_batch_mount.shvi auto_batch_mount.sh2)將下列內容復制到掛載腳本中,保存退出
(:wq):#!/bin/bash # configure password-free function ssf_free_login() { success_install_expect=0 # Check if expect is installed type expect &>/dev/null if [ $? -eq 0 ]; then echo "Expect is already installed." success_install_expect=1 else echo "Expect is not installed. Install now..." # Install expect if file exists if type yum &>/dev/null; then yum install -y expect elif type apt-get &>/dev/null; then apt install expect || ( apt update apt install expect -y ) else echo "Unsupported operating system." exit 1 fi success_install_expect=1 fi if [ $success_install_expect -eq 0 ]; then echo "Expect installation failed." exit 1 fi [ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa # conf file config_file="inventory" target_hosts=$(awk '/^\[target_host\]/{flag=1;next}/^\[/{flag=0}flag' "$config_file") while read line; do # export ip ip=$(echo "$line" | awk '{print $1}') # export password pass_word=$(echo "$line" | awk -F 'passwd=' '{print $2}' | awk '{print $1}') expect <<eof spawn="" ssh-copy-id="" $ip="" expect="" {="" "yes="" no"="" send="" "yes\n";exp_continue="" }="" "password"="" "$pass_word\n";exp_continue="" eof="" done="" <<<"$target_hosts"="" #="" check="" if="" ansible="" is="" installed="" function="" install_ansible()="" command="" -v="">/dev/null 2>&1 || { if [ -f /etc/redhat-release ]; then echo "Install ansible now......" sudo yum install -y ansible elif [ -f /etc/lsb-release ]; then echo "Install ansible now......" apt install -y ansible else echo "Unsupported operating system." exit 1 fi } } ssf_free_login install_ansible # Run Ansible playbook if [ -f inventory ] && [ -f mount_nfs.yml ]; then ansible-playbook -i inventory mount_nfs.yml else echo "One or both files are missing." exit 1 fi創建ansible腳本執行的yml文件:mount_nfs.yml。
1)創建yml文件,并打開:touch mount_nfs.ymlvi mount_nfs.yml2)復制下述內容到yml文件中,保存退出
(:wq):說明
可根據實際需求修改mount_nfs.yml末尾處tasks中掛載命令的參數,參數說明請參考掛載NFS文件系統到彈性云主機 (Linux)。
--- - name: Test Connectivity hosts: all gather_facts: false tasks: - name: "Check whether node is reachable" action: ping ignore_errors: false tags: sfs_ping - name: Install NFS Client hosts: all gather_facts: yes tasks: - name: Install NFS Client on CentOS yum: name: nfs-utils state: present when: ansible_distribution == 'CentOS' ignore_errors: yes - name: Install NFS Client on Ubuntu apt: name: nfs-common state: present when: ansible_distribution == 'Ubuntu' ignore_errors: yes - name: Creat local path hosts: all gather_facts: false tasks: - name: "Create local mount path" file: path: "{{local_path}}" state: directory - name: Check if local_path is mounted hosts: target_host gather_facts: yes tasks: - name: Check if local_path is mounted command: "mountpoint {{ local_path }}" ignore_errors: yes register: mountpoint_check failed_when: false - name: Fail if local_path is mounted on any host assert: that: "not mountpoint_check.rc == 0" success_msg: "local_path is not mounted on any host." fail_msg: "local_path is mounted on at least one host." - name: Mount NFS Filesystems hosts: target_host gather_facts: yes tasks: - name: Mount NFS Share mount: src: "{{share_path}}" path: "{{local_path}}" fstype: nfs opts: "vers=3,proto=tcp,async,nolock,noatime,nodiratime,wsize=1048576,rsize=1048576,timeo=600" state: mounted become: yes執行批量掛載腳本。執行時注意不同操作系統執行命令不同。
CentOS操作系統
sh auto_batch_mount.shUbuntu操作系統
bash auto_batch_mount.sh執行成功結果可參考下圖。
也可執行
df -h命令,查看當前云主機是否已經當前掛載文件系統,參考下圖。