我目前有5台服务器,1台上传服务器(ftp.example.com)和4台存储服务器(fs#.example.com)。我目前正在寻找一种将文件从我的上传服务器随机发送到其中一个存储服务器的方法。
上传 file.txt、file2.txt 和 file3.txt 到 ftp.example.com
file.txt -> fs1.example.com
file2.txt -> fs4.example.com
file3.txt -> fs2.example.com
我一直在研究 rsync、rclone 和 scp,但我找不到一个选项,它可以从数组或 .txt 文件等中选择服务器的登录详细信息。我想知道是否有人可以建议一种方法这 ?理想情况下,这将通过一个文本文件来完成,我可以根据容量等使用其他服务器更新或删除服务器。
您需要某种 bash 脚本才能读取文件并从中随机选择存储服务器。不过,为了尽量减少人为干预,我建议为所有服务器设置SSH 密钥,然后在主机上编辑
~/.ssh/config
文件以包含所有服务器的条目。例如:
Host storage_server_1
HostName fs1.example.com
User admin
IdentityFile ~/.ssh/id_rsa.pub
Host storage_server_2
HostName fs2.example.com
User john
IdentityFile ~/.ssh/id_rsa.pub
...
我会在输入文件的每一行上写下每个服务器的“主机”值,而不是主机名。然后,如果您使用的是 bash 4.0,则可以使用类似以下的内容:
storage_server_list=/path/to/storage/server/file.txt
# Read the list of servers into an array (assuming there's one server per line)
readarray -t server_list ${storage_server_list}
num_servers=${#server_list[@]}
random_server_idx=$(( $RANDOM % ${num_servers} ))
# Pick a random server from the array
random_server=${server_list[${random_server_idx}]}
scp some_file ${random_server}
if [ $? -eq 0 ]; then
echo "scp failed" > /dev/stderr
else
echo "scp succeeded"
fi