簡體   English   中英

同一主機上2個vmware工作站之間的文件傳輸

[英]File transfer between 2 vmware workstations on same host

我需要將文件從aProcess1工作站內的VM1上的aProcess1傳輸到同一主機上同一VmWare工作站虛擬機管理程序內的另一個VM2 ,以便計算這兩個虛擬機之間的數據傳輸率

  1. 要么寫一個FTP服務器的客戶端服務器程序,然后如何計算時間..?

  2. 以及如何在編寫服務器客戶端程序時管理虛擬機中的端口(比如說Ubuntu都在工作)。

您需要做的事情並不簡單,您必須付出一些努力。 首先,您需要在兩個虛擬機之間創建一個網橋,並使每個虛擬機在該網橋上具有一個Tap接口。

我下面有一個腳本,您可以作為示例-它創建了一些屏幕會話(您將需要一個基本的.screenrc),並且我在每個屏幕選項卡中啟動了一個VM。 確實,您應該只感興趣的一點是網橋設置以及如何啟動qemu。

您需要靜態路由的網絡設置-以下是我的示例,其中eth0是用戶網絡接口,而eth1是連接到對等VM的接口。 您可以擺脫eth0。 對等VM路由是此鏡像

sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto eth0
  iface eth0 inet dhcp
  up route add default gw 10.0.2.2 eth0
auto eth1
iface eth1 inet static
  address 20.0.0.1
  netmask 255.255.255.0
  network 20.0.0.0
  broadcast 20.0.0.255
  gateway 20.0.0.2
  up route add -host 21.0.0.1  gw 20.0.0.2 dev eth1
  up route add -host 21.0.0.2  gw 20.0.0.2 dev eth1
  up route del default gw 20.0.0.2 eth1

# You want it like this:
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
default         20.0.0.2        0.0.0.0         UG    0      0        0 eth1
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
20.0.0.0        *               255.255.255.0   U     0      0        0 eth1
link-local      *               255.255.0.0     U     1000   0        0 eth0

# on the peer
default         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
default         21.0.0.2        0.0.0.0         UG    0      0        0 eth1
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
21.0.0.0        *               255.255.255.0   U     0      0        0 eth1
link-local      *               255.255.0.0     U     1000   0        0 eth0

一旦啟動了虛擬機並在每個虛擬機上配置了靜態路由,就可以將iperf的一端用作接收器,將另一端用作源,例如:

iperf -s
iperf -c 20.0.0.1 -t 10 -i 1

橋接腳本設置:

#
# Settings
#
INCLUDE_QEMU_AS_SCREEN=
A_TELNET_1=6661
A_NAME="A-VM"
A_MEMORY=1G

B_TELNET_1=6665
B_NAME="B-VM"
B_MEMORY=1G

A_DISK_IMAGE=.A.disk.img
B_DISK_IMAGE=.B.disk.img

A_PID=.A.pid
B_PID=.B.pid

A_CMD_1=.A.cmd.1
B_CMD_1=.B.cmd.1

#
# Run QEMU in background or foreground
#
if [ "$INCLUDE_QEMU_AS_SCREEN" != "" ]
then
    SCREEN_QEMU_A='screen -t "A-qemu"'
    SCREEN_QEMU_B='screen -t "B-qemu"'
else
    SCREEN_QEMU_A='bg'
    SCREEN_QEMU_B='bg'
fi

#
# Store logs locally and use the date to avoid losing old logs
#
LOG_DATE=`date "+%a_%b_%d_at_%H_%M"`
HOME=$(eval echo ~${SUDO_USER})
LOG_DIR=logs/$LOG_DATE
mkdir -p $LOG_DIR
if [ $? -ne 0 ]; then
    LOG_DIR=/tmp/$LOGNAME/logs/$LOG_DATE
    mkdir -p $LOG_DIR
    if [ $? -ne 0 ]; then
        LOG_DIR=.
    fi
fi

LOG_DIR_TEST=$LOG_DIR
mkdir -p $LOG_DIR_TEST

#
# create the tap
#
echo
echo ================ create taps ================
sudo tunctl -b -u $LOGNAME -t $LOGNAME-tap1
sudo tunctl -b -u $LOGNAME -t $LOGNAME-tap2

#
# bring up the tap
#
echo
echo =============== bring up taps ===============
sudo ifconfig $LOGNAME-tap1 up
sudo ifconfig $LOGNAME-tap2 up

#
# show the tap
#
echo
echo =================== tap 1 ===================
ifconfig $LOGNAME-tap1
echo
echo =================== tap 4 ===================
ifconfig $LOGNAME-tap2

#
# create the bridge
#
sudo brctl addbr $LOGNAME-br1

#
# bring up the bridge
#
sudo ifconfig $LOGNAME-br1 1.1.1.1 up

#
# show my bridge
#
echo
echo =================== bridge 1 ===================
ifconfig $LOGNAME-br1
brctl show $LOGNAME-br1
brctl showmacs $LOGNAME-br1

#
# attach tap interface to bridge
#
sudo brctl addif $LOGNAME-br1 $LOGNAME-tap1
sudo brctl addif $LOGNAME-br1 $LOGNAME-tap2

SCRIPT_START="echo Starting..."
SCRIPT_EXIT="echo Exiting...; sleep 3"

cat >$A_CMD_1 <<%%%
$SCRIPT_START
script -f $LOG_DIR_TEST/VM-A -f -c 'telnet localhost $A_TELNET_1'
$SCRIPT_EXIT
%%%

cat >$B_CMD_1 <<%%%
$SCRIPT_START
script -f $LOG_DIR_TEST/VM-B -f -c 'telnet localhost $B_TELNET_1'
$SCRIPT_EXIT
%%%

chmod +x $A_CMD_1
chmod +x $B_CMD_1

run_qemu_in_screen_or_background()
{
    SCREEN=$1
    shift

    if [ "$SCREEN" = "bg" ]
    then
        $* &
    else
        $SCREEN $*
    fi
}

echo
echo
echo
echo "##########################################################"
echo "#                   Starting QEMU                        #"
echo "##########################################################"
echo
echo
echo

run_qemu_in_screen_or_background \
    $SCREEN_QEMU_A \
        qemu-system-x86_64 -nographic \
            -m $A_MEMORY \
            -enable-kvm \
            -drive file=$A_DISK_IMAGE,if=virtio,media=disk \
            -serial telnet:localhost:$A_TELNET_1,nowait,server \
            -net nic,model=e1000,vlan=21,macaddr=10:16:3e:00:01:12 \
            -net tap,ifname=$LOGNAME-tap1,vlan=21,script=no \
            -boot c \
            -pidfile $A_PID

run_qemu_in_screen_or_background \
    $SCREEN_QEMU_B \
        qemu-system-x86_64 -nographic \
            -m $B_MEMORY \
            -enable-kvm \
            -drive file=$B_DISK_IMAGE,if=virtio,media=disk \
            -serial telnet:localhost:$B_TELNET_1,nowait,server \
            -net nic,model=e1000,vlan=21,macaddr=30:16:3e:00:03:14 \
            -net tap,ifname=$LOGNAME-tap2,vlan=21,script=no \
            -boot c \
            -pidfile $B_PID

sleep 1

screen -t "$A_NAME"   sh -c "sh $A_CMD_1"
screen -t "$B_NAME"   sh -c "sh $B_CMD_1"

sleep 5

echo
echo
echo
echo "##########################################################"
echo "#                   Hit enter to quit                    #"
echo "##########################################################"
echo
echo
echo

read xx

cat $A_PID 2>/dev/null | xargs kill -9 2>/dev/null
rm -f $A_PID 2>/dev/null
cat $B_PID 2>/dev/null | xargs kill -9 2>/dev/null
rm -f $B_PID 2>/dev/null

rm -f $A_CMD_1 2>/dev/null
rm -f $B_CMD_1 2>/dev/null

sudo brctl delif $LOGNAME-br1 $LOGNAME-tap1
sudo brctl delif $LOGNAME-br1 $LOGNAME-tap2

sudo ifconfig $LOGNAME-br1 down

sudo brctl delbr $LOGNAME-br1

sudo ifconfig $LOGNAME-tap1 down
sudo ifconfig $LOGNAME-tap2 down

sudo tunctl -d $LOGNAME-tap1
sudo tunctl -d $LOGNAME-tap2

假設您的VM1VM2具有一些活動的ISO-OSI-L2 / L3連接,因此存在一些可用的傳輸,那么設置進程間通信的一種更好的方法是使用一些行業認可的消息傳遞框架,而不是花費時間。建立另一個ftp-c / s。

對於發送/接收任何內容(包括類似整個文件的BLOB),請嘗試ZeroMQnanomsg庫,因為它們是無代理框架,具有與許多編程語言的綁定,並且具有真正的性能/低延遲。

任何分布式的流程到流程系統項目都將從早期采用和使用這種方法中受益。

請訪問http://zguide.zeromq.org/c:fileio3,以獲得有關其他附加好處的更多見解,例如負載平衡,故障恢復等。

按照您的Q1:FTP服務器本身報告文件傳輸時間。 在ZeroMQ中,您可以以實用的方式衡量在文件傳輸上花費的時間,作為兩個時間戳之間的距離

根據您的第二季度:對於ZeroMQ,請使用Ubuntu中允許的任何端口(不受限制)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM