日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16-多机器通信

發布時間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16-多机器通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

16-多機器通信

回顧上節課的思考題。

flask-redis 想訪問 redis,該如何通信?

創建另外一臺linux虛擬機

  • 直接拷貝Vagrantfile文件創建一個 centos 虛擬機

    我們創建一個centos7-2文件夾,然后創建虛擬機

    vagrant up

    創建的過程中提示選擇網絡接口,如果你是wifi選擇類似wlp5s0的選項,如果是網線選擇類似eth0。具體選擇哪個,可以通過ip a查看哪一個接口被分配了實際ip地址則選擇哪一個。

  • 進入虛擬機

    vagrant ssh

    查看ip

    ip a

    看到 eth1 的地址為 192.168.2.78

  • 查看之前的虛擬機ip是多少

    在打開一個終端窗口

    vagrant up vagrant ssh ip a

    我們看到 eth1 的地址為 192.168.2.32

    這時這兩個ip是可以相互訪問的,這個ip地址是由路由器分配的。

  • 在centos7-2安裝docker

    教程參照 docker 安裝 這一節。

  • 如何讓兩臺主機中的docker通信

    我們講一下可以通信的過程

  • 圖中的 flask-redis 把要訪問 redis 容器的源ip和目標ip以及數據打包存放在http層,也就是在ip層之上。
  • 發送這個包到另外一臺 redis 的主機上
  • 然后這臺主機解包,會得到目標ip是redis容器的ip,這時就會把攜帶的數據發送到這個redis容器中,返回的時候一樣。
  • 這個過程不需要詳細了解,我們把這種通信方式叫 隧道(tunnel) ,具體在 docker中這種隧道是使用 VXLAN 實現的。關于 VXLAN 我們不做詳細介紹。

    想了解關于VXLAN詳細信息,可以查看這篇文章 What is VXLAN and how it works?
    也可以查看這篇文章 Understanding VXLANs

    我們只簡單講一下 VXLAN 的數據包組成。

    從這個 VXLAN 數據包組成可以看到,它在 UDP 上層又增加了 EthernetIPv4TCP,這里其實就是我們docker與docker之間要訪問的數據包。而 VXLAN 把它打包在一個數據包內了,一般在網路領域我們把 VXLAN 下面的所有層叫做 underlay。上面的所有層叫 overlay

    之前我們講了docker有 bridge host none 網絡,其他docker還有另外一種網絡叫 overlay,就是和 VXLANJ技術有關。

    通過overlay 我們就可以讓分布在兩臺linux主機上的容器可以通信。那么實現這種方式需要一個第三方的工具,這個工具和分布式存儲有關。

    關于分布式存儲工具有很多,這里我們使用一個開源免費的 etcd。那接下來我們就通過 etcd 來實現分布在兩臺linux主機上的容器通信。

    安裝etcd并配置

  • 下載etcd

    sudo yum install wget wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz

    下載地址查看。

    如果下載太慢,我們可以在主機中先下載好,然后通過scp發送到虛擬機中。

    scp etcd-v3.3.12-linux-amd64.tar.gz vagrant@192.168.2.32:~

    第二太虛擬機同樣把 etcd 安裝包下載下來。

    如果不能scp 注意用戶名是 vagrant,并且不需要加端口號,而且需要修改ssh配置,可以查看 0-安裝Vagrant和使用 節。

  • 解壓運行

    第一臺 虛擬機中執行

    解壓

    tar zxvf etcd-v3.3.12-linux-amd64.tar.gz

    運行

    cd etcd-v3.3.12-linux-amd64 nohup ./etcd --name docker-node1 --initial-advertise-peer-urls \ http://192.168.2.32:2380 \ --listen-peer-urls http://192.168.2.32:2380 \ --listen-client-urls http://192.168.2.32:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://192.168.2.32:2379 \ --initial-cluster-token etcd-cluster \ --initial-cluster docker-node1=http://192.168.2.32:2380,docker-node2=http://192.168.2.78:2380 \ --initial-cluster-state new &

    192.168.2.32 為第一臺虛擬機的ip地址,192.168.2.78 為第二臺虛擬機的ip地址。

    nohup 命令可以讓命令在后臺運行,并且關閉終端也不會終止進程,而 & 會。

    第二臺 虛擬機中執行

    解壓

    tar zxvf etcd-v3.3.12-linux-amd64.tar.gz

    運行

    cd etcd-v3.3.12-linux-amd64nohup ./etcd --name docker-node2 --initial-advertise-peer-urls \ http://192.168.2.78:2380 \ --listen-peer-urls http://192.168.2.78:2380 \ --listen-client-urls http://192.168.2.78:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://192.168.2.78:2379 \ --initial-cluster-token etcd-cluster \ --initial-cluster docker-node1=http://192.168.2.32:2380,docker-node2=http://192.168.2.78:2380 \ --initial-cluster-state new &
  • 檢查狀態

    在第一臺虛擬機中執行下面命令,注意必須在 etcd-v3.3.12-linux-amd64 文件夾下執行,否則找不到命令。

    [vagrant@10 etcd-v3.3.12-linux-amd64]$ ./etcdctl cluster-health member a639ee0bdcf9ca8c is healthy: got healthy result from http://192.168.2.78:2379 member e8b07a1a0cffdc97 is healthy: got healthy result from http://192.168.2.32:2379 cluster is healthy

    再到第二臺虛擬機中執行一次

    [vagrant@10 etcd-v3.3.12-linux-amd64]$ ./etcdctl cluster-health member a639ee0bdcf9ca8c is healthy: got healthy result from http://192.168.2.78:2379 member e8b07a1a0cffdc97 is healthy: got healthy result from http://192.168.2.32:2379 cluster is healthy

    我們可以看到 etcd 運行正常,這時我們就搭建好了 分部署存儲的 etcd 服務。

  • docker與etcd連接配置

  • 停止運行docker

    sudo service docker stop

    查看docker是否已經停止

    [vagrant@10 etcd-v3.3.12-linux-amd64]$ docker version Client:Version: 18.09.1API version: 1.39Go version: go1.10.6Git commit: 4c52b90Built: Wed Jan 9 19:35:01 2019OS/Arch: linux/amd64Experimental: false Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    如果只有client說明docker已經停掉

  • 啟動docker的cluster

    第一臺虛擬機中執行

    sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.2.32:2379 --cluster-advertise=192.168.2.32:2375 &

    查看dockerd是否啟動了

    docker version Client:Version: 18.09.1API version: 1.39Go version: go1.10.6Git commit: 4c52b90Built: Wed Jan 9 19:35:01 2019OS/Arch: linux/amd64Experimental: falseServer: Docker Engine - CommunityEngine:Version: 18.09.1API version: 1.39 (minimum version 1.12)Go version: go1.10.6Git commit: 4c52b90Built: Wed Jan 9 19:06:30 2019OS/Arch: linux/amd64Experimental: false

    我們可以看到server已經啟動,說明工作正常。

    第二臺虛擬機中停止docker執行

    sudo service docker stop sudo dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --cluster-store=etcd://192.168.2.78:2379 --cluster-advertise=192.168.2.78:2375 &

    注意參數修改為這臺虛擬機的ip地址

    查看 docker 是否啟動

    docker version

    可以看到server已經起來了。

  • 創建docker overlay

  • 創建一個demo的overlay

    在第一臺虛擬機中創建

    docker network create -d overlay demo

    -d 為選擇driver

  • 查看docker 網絡

    查看第一臺虛擬機

    $: docker network ls b048c448196c demo overlay global

    查看第二臺虛擬機

    $: docker network ls b048c448196c demo overlay global

    這個demo的overlay已經成功創建了,這時連接到此網絡上的容器就可以相互通信了。相互能夠連接就是通過 etcd 實現的。

  • 創建測試容器

    在第一臺虛擬機中執行

    docker run -d --name test1 --net demo busybox /bin/sh -c "while true; do sleep 3600; done"

    在第二臺虛擬機中執行

    docker run -d --name test1 --net demo busybox /bin/sh -c "while true; do sleep 3600; done"

    這時會報錯,這是因為 test1 會被當做 key 存儲在 etcd 中,創建的時候 etcd 會發現有兩個相同的key,不允許創建。那么我們更改名字為 test2

    docker run -d --name test2 --net demo busybox /bin/sh -c "while true; do sleep 3600; done"
  • 查看兩個容器是否連接到 demo的overlay網絡上

    docker network inspect demo "Containers": {"214e805562087e57aa643bd855237ea30282afee1c86e14f357838c553558fe8": {"Name": "test1","EndpointID": "79c482ff74e03eca583f2534555d4c2dd257087b4b266557e381932712b2c438","MacAddress": "02:42:0a:00:00:02","IPv4Address": "10.0.0.2/24","IPv6Address": ""},"ep-796a17e471b63ef8af64ff4d67a5dd63be731708e3c57f1cdbd072ea5acd0c76": {"Name": "test2","EndpointID": "796a17e471b63ef8af64ff4d67a5dd63be731708e3c57f1cdbd072ea5acd0c76","MacAddress": "02:42:0a:00:00:03","IPv4Address": "10.0.0.3/24","IPv6Address": ""} }

    我們可以看到 test1test2 已經連接到 demo 網絡上了,根據之前的知識,我們可以了解到,test1test2 現在可以互相連接了。

  • 測試容器互聯

    進入 test1 容器,并ping test2

    docker exec -it test1 ping test2

    進入 test2 容器,并ping test1

    docker exec -it test1 ping test2

    是可以連接的。

  • 到此我們就解決了分布在兩臺linux主機上的docker通信。解決的方式就是借助 分布式存儲工具 etcd 和 docker 的overlay 網絡。

    總結

    以上是生活随笔為你收集整理的16-多机器通信的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 狐狸视频污 | 最好看的中文字幕国语电影mv | 一区二区毛片 | 午夜激情国产 | 91人妻一区二区 | 涩涩屋视频 | 亚洲精品成人在线 | 亚洲男人天堂2017 | 美女国产一区 | 久久香蕉网站 | ,一级淫片a看免费 | 夜夜狠狠擅视频 | 亚洲GV成人无码久久精品 | 国产sm调教视频 | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 爱爱视频网站 | 日韩av麻豆| 影音先锋成人网 | 国产白丝一区二区三区 | 亚洲无码久久久久 | 美女撒尿无遮挡网站 | 三级91 | 国产精品国产 | 国产在线小视频 | 日本三级中国三级99人妇网站 | 另类小说一区二区 | 波多野结衣免费在线视频 | 国产sm主人调教女m视频 | 国产精品黄色在线观看 | 深夜小视频在线观看 | 亚洲精品久久久久久一区二区 | 男女激情久久 | 色wwwwww| 不卡中文字幕在线观看 | 中文字幕日本在线观看 | 日本人妻熟妇久久久久久 | 成人欧美性 | 九九热这里都是精品 | 亚洲av人无码激艳猛片服务器 | 四虎一区二区 | 尹人在线视频 | 蜜桃av噜噜一区二区三区小说 | 天天射干 | 国产乱国产乱老熟300部视频 | 日本中文字幕在线 | 男人草女人 | 娇妻被老王脔到高潮失禁视频 | 国产精品偷伦视频免费观看了 | 日日夜夜骑 | 在线观看黄色网页 | 99夜色| 成人免费看片网站 | 韩毛片| 污污网址在线观看 | 四虎影音先锋 | 国产主播福利在线 | 欧美xxxx免费虐 | 国产专区精品 | 美女一级视频 | 亚洲精品久久久久久动漫器材一区 | 日本不卡在线观看 | 99re8在线精品视频免费播放 | 中国久久 | 超碰综合网| 国产免费片 | 午夜免费体验区 | 国内外成人在线视频 | 成人h动漫精品一区二 | 99ri视频| 搡老熟女老女人一区二区 | 无码少妇一区二区三区 | 久久久96人妻无码精品 | 一级特黄aaa | 911国产 | 日韩一级在线观看视频 | 456亚洲影视 | 久久精品牌麻豆国产大山 | 美女一级黄 | 国产99在线 | 精品人妻一区二区三区在线视频 | 中文字幕在线观看一区 | 中文字幕1区 | 亚洲国产一区二区在线观看 | 久久天天躁狠狠躁夜夜躁 | 在线免费观看视频黄 | 一本色道久久综合亚洲二区三区 | 激情网站在线观看 | 69影院少妇在线观看 | 哪里可以看免费毛片 | 亚洲精品乱码久久久久久久 | 久久网国产 | 一区二区三区 欧美 | 57pao国产精品一区 | 国产一二三在线 | 亚洲蜜臀av| 国产精久久久久久 | 色播视频在线播放 | 国产女主播在线观看 | 精品免费在线观看 |