N個のアレイホストから利用可能な空きメモリが最大で空き容量が最も少ないホストを見つけ、VMを最も空きが少ないメモリホストから最大のメモリホストに移行したいと考えています。現在、私のスクリプトは3つのホストだけで動作していますが、動的なホスト数のスクリプトが必要です。あなたは誰でもスクリプトの論理について私を助けてくれますか?前もって感謝します。N個のホストから大容量で空きメモリが少ないホストを見つけるにはどうすればよいですか?
#!/usr/bin/bash
array_host=($(xe host-list params=uuid | cut -c 17-))
#Loop throguh each xen server node
for i in ${array_host[@]};
do
host_name+=($(xe host-list params=name-label uuid=$i| cut -c 23-))
free_mem1=$(xe host-data-source-query data-source=memory_free_kib uuid=$i)
mem_int=(${free_mem1/\.*})
mem_mb=$(($mem_int/1024))
free_mem+=($mem_mb)
total_mem+=($(xe host-data-source-query data-source=memory_total_kib uuid=$i))
load_avg+=($(xe host-data-source-query data-source=loadavg uuid=$i))
cpu_avg+=($(xe host-data-source-query data-source=cpu_avg uuid=$i))
no_vms+=$(xe vm-list resident-on=$i | grep -c running)
done
if ((${free_mem[2]} < ${free_mem[1]} && ${free_mem[2]} < ${free_mem[0]}));
then
vm_list=($(xe vm-list params=uuid is-control-domain=false resident-on=${array_host[2]} | cut -c 17-))
for vm in ${vm_list[@]};
do
if ((${free_mem[1]} < ${free_mem[0]})); then
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[0]} --live
echo ${vm_list[0]} has been migrated from xen-node2 to xen-node3
else
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[1]} --live
echo ${vm_list[0]} has been migrated from xen-node2 to xen-node1
fi
done
fi
if ((${free_mem[1]} < ${free_mem[2]} && ${free_mem[1]} < ${free_mem[0]}));
then
vm_list=($(xe vm-list params=uuid is-control-domain=false resident-on=${array_host[1]} | cut -c 17-))
for vm in ${vm_list[@]};
do
if ((${free_mem[2]} < ${free_mem[0]})); then
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[0]} --live
echo ${vm_list[0]} has been migrated from xen-node1 to xen-node3
else
vm_list=($(xe vm-list params=uuid is-control-domain=false resident-on=${array_host[1]} | cut -c 17-))
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[2]} --live
echo ${vm_list[0]} has been migrated from xen-node1 to xen-node2
fi
done
fi
if ((${free_mem[0]} < ${free_mem[1]} && ${free_mem[0]} < ${free_mem[2]}));
then
vm_list=($(xe vm-list params=uuid is-control-domain=false resident-on=${array_host[0]} | cut -c 17-))
for vm in {vm_list[@]};
do
if ((${free_mem[1]} < ${free_mem[2]})); then
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[2]} --live
echo ${vm_list[0]} has been migrated from xen-node3 to xen-node2
else
xe vm-migrate uuid=${vm_list[0]} host-uuid=${array_host[1]} --live
echo ${vm_list[0]} has been migrated from xen-node3 to xen-node1
fi
done
fi
ありがとうございました!私がそれをするのは難しいようです。サンプルスクリプトが利用可能であれば素晴らしいことでしょう。ありがとう。 – rmstmg
私はオフィスに戻った時に提供します、心配はありません;)1〜2時間で期待して、あなたは気にしないでください。 – campovski
問題はありません!ありがとう。 :) – rmstmg