實驗環境html
dockerhost01 192.168.10.150linux
dockerhost02 192.168.10.151nginx
vip 192.168.10.200docker
全新鏡像,神馬都沒有,連sshd都沒開,容我安裝下ubuntu
開啓SSH架構
sudo apt-get install openssh-client openssh-serverssh
sudo service ssh restartcurl
安裝dockeride
先卸載舊版本url
sudo apt-get remove docker docker-engine docker.io
設置repo
sudo apt-get update
容許package 使用repo over HTTPS
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
添加GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
驗證下指紋
sudo apt-key fingerprint 0EBFCD88
在repo中只使用stable版本
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
開始安裝最新版docker ce
sudo apt-get update
sudo apt-get install docker-ce
sudo docker run hello-world
安裝指定版本docker ce
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION>
下載nginx 鏡像
sudo docker pull nginx:1.7.6
mkdir -p /tmp/docker
sudo echo "<h2 >This is nginx container running on 192.168.10.150 </h2><br /> static files:/tmp/docker/index.html" > /tmp/docker/index.html
sudo docker run --name nginx_m --restart=always -v /tmp/docker:/usr/share/nginx/html:ro -p 80:80 -d nginx:1.7.6
sudo docker ps
宿主機器訪問下,2臺主機都正常啓動nginx了
安裝keepalived
sudo apt-get update
sudo apt-get install -y libssl-dev openssl libpopt-dev
sudo apt-get install -y keepalived
sudo cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
sudo vi /etc/keepalived/keepalived.conf
改這3個地方就行了
host01 中出現了10.200的vip
vip指向150,訪問正常
sudo service keepalived status -l
host02 從backup 變成了master
host01網卡停掉以後,vip跑到了host02上
訪問192.168.10.200的主機,顯示nginx跑在了10.151上
固然主從能夠設置weight 和nopreempt來設置是否奪權從新選舉
當兩個節點上的業務服務都處於啓動狀態,如httpd,那麼優先級變化會以下:
當master節點業務啓動,backup節點業務爲中止狀態,如,haproxy(由於haproxy沒有監聽的地址是沒法啓動的,其實不少業務都是兩個節點一啓一停的)
從架構來看,docker+nginx主從並不可以提供負載冗餘功能,由於始終後臺只有一臺,只可以提供高可用,這個與我當時想法有所出入,因此目測整個解決方案只適合輕量化訪問,可是輕量化的訪問又不值得搞這兩臺主機作主備,作單機麼又怕單點故障,因此整個解決方案比較尷尬
至於實驗,整個實驗和以前keepalived+nginx的實驗並無太大區別,只是nginx跑在了docker上而已,docker的優點並無發揮出來,新的架構容我三思