摘要:以及自動(dòng)剔除因故障負(fù)載均衡列表中宕機(jī)的服務(wù)器。這兩天折騰了一下的安裝配置,并通過(guò)模擬出在多服務(wù)器提供服務(wù)的狀態(tài)下的負(fù)載均衡。修改好配置文件后,使用重新載入配置。
(一) 系統(tǒng)環(huán)境原文發(fā)表于我的博客,轉(zhuǎn)載請(qǐng)注明出處
一直聽(tīng)說(shuō)Nginx的強(qiáng)大,它不僅可以作為Web服務(wù)器,按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁(yè)面的分離;還可以作為反向代理服務(wù)器,構(gòu)建服務(wù)集群,按輪詢、權(quán)重等多種方式對(duì)后端服務(wù)器做負(fù)載均衡。以及自動(dòng)剔除因故障負(fù)載均衡列表中宕機(jī)的服務(wù)器。這兩天折騰了一下Nginx的安裝、配置,并通過(guò)Docker模擬出Nginx在多服務(wù)器提供服務(wù)的狀態(tài)下的負(fù)載均衡。
操作系統(tǒng) | Docker | Nginx |
---|---|---|
Ubuntu 16 | 1.12.1 | 1.8.0 |
使用Docker這種容器技術(shù),可以很方便地將所需要的環(huán)境打包和快速部署。所以我將Nginx的環(huán)境做成Docker鏡像,當(dāng)需要多個(gè)Nginx服務(wù)時(shí),只需要通過(guò)鏡像啟動(dòng)多個(gè)容器。
鏡像已經(jīng)PUSH到Docker Hub上,如果需要,可以直接在Docker拉取配置好nginx環(huán)境的鏡像docker pull raomengnan/ubuntu:nginx-1.8.0
raomengnan/ubuntu:nginx-1.8.0 包含的基礎(chǔ)環(huán)境: nginx,zsh,vim,ssh,python
Dockerfile# Ubuntu with Nginx # Author raomengnan FROM raomengnan/ubuntu-base MAINTAINER raomengnan # 安裝升級(jí)gcc RUN rm -rf /var/lib/apt/lists/* RUN apt-get update # 添加相關(guān)的src RUN apt-get -y install build-essential RUN apt-get -y install supervisor RUN mkdir -p /usr/local/temp COPY supervisor.conf /etc/supervisor/conf.d/supervisord.conf RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz && tar -zxvf nginx-1.8.0.tar.gz -C /usr/local/temp RUN wget http://zlib.net/zlib-1.2.8.tar.gz && tar -zxvf zlib-1.2.8.tar.gz -C /usr/local/temp RUN wget http://www.openssl.org/source/openssl-1.0.1q.tar.gz && tar -zxvf openssl-1.0.1q.tar.gz -C /usr/local/temp RUN wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz && tar -zxvf pcre-8.37.tar.gz -C /usr/local/temp RUN rm *.tar.gz # 安裝 RUN ls /usr/local/temp/nginx-1.8.0 RUN cd /usr/local/temp/nginx-1.8.0 && ./configure --sbin-path=/usr/local/nginx-1.8.0/nginx --conf-path=/usr/local/nginx-1.8.0/nginx.conf --pid-path=/usr/local/nginx-1.8.0/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/temp/pcre-8.37 --with-zlib=/usr/local/temp/zlib-1.2.8 --with-openssl=/usr/local/temp/openssl-1.0.1q && make && make install # 設(shè)置nginx是非daemon啟動(dòng),否則nginx無(wú)法啟動(dòng) RUN echo " daemon off;" >> /usr/local/nginx-1.8.0/nginx.conf RUN echo "master_process off;" >> /usr/local/nginx-1.8.0/nginx.conf RUN echo "error_log logs/error.log;" >> /usr/local/nginx-1.8.0/nginx.conf RUN rm -rf /usr/local/temp/* ENV NGINX_HOME /usr/local/nginx-1.8.0 # 將nginx添加到command update-alternatives --install /usr/bin/nginx nginx /usr/local/nginx-1.8.0/nginx 300 EXPOSE 80 # 使用supervisor來(lái)管理多個(gè)進(jìn)程同時(shí)啟動(dòng) # 若不想使用supervisor,可以使用: # CMD nginx $/NGINX_HOME/nginx.conf # 或者進(jìn)入容器手動(dòng)啟動(dòng)nginx CMD ["/usr/bin/supervisord"]supervisor.conf
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:nginx] command=/usr/local/nginx-1.8.0/nginx -c /usr/local/nginx-1.8.0/nginx.conf(三) 啟動(dòng)Nginx服務(wù)
啟動(dòng)nginx時(shí),可以提供Nginx的welcome頁(yè)面的訪問(wèn)服務(wù),可以通過(guò)這個(gè)頁(yè)面簡(jiǎn)單地嘗試nginx提供的負(fù)載均衡。
通過(guò)鏡像啟動(dòng)三個(gè)nginx服務(wù)docker run --name ser1 -p 8881:80 raomengnan/ubuntu:nginx-1.8.0 docker run --name ser2 -p 8882:80 raomengnan/ubuntu:nginx-1.8.0 docker run --name ser3 -p 8883:80 raomengnan/ubuntu:nginx-1.8.0
-p參數(shù)將容器的80端口映射到宿主機(jī)的888×端口上
以ser1作為主服務(wù)器,進(jìn)入容器內(nèi)修改nginx配置文件使用docker inspect ser1便可以看到容器的詳細(xì)信息,其中注意NetworkSetting下的這一段信息就可以知道容器的網(wǎng)關(guān)和ip地址
"Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3",
docker exec -it ser1 bash進(jìn)入容器內(nèi)部
nginx安裝目錄在"/usr/local/nginx-1.8.0"下,vim /usr/local/nginx-1.8.0/nginx.conf編輯配置文件:
#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_header_buffer_size 1k; large_client_header_buffers 4 4k; # 配置負(fù)載均衡,weight代表權(quán)重,權(quán)重越高,分配到的可能就越搭 upstream 172.17.0.2 { server 172.17.0.2:8888 weight=5; server 172.17.0.3:80 weight=4; server 172.17.0.4:80 weight=3; } # 配置反向代理 server { listen 80; server_name 172.17.0.2; location /{ # 反向代理的主機(jī)頭 proxy_pass http://172.17.0.2; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 偵聽(tīng)本地8888端口,以便為反向代理到本地的請(qǐng)求提供服務(wù) server { listen 8888; server_name localhost; # 如過(guò)沒(méi)有對(duì)代理的鏈接形式有特殊要求,可以直接將root和index寫在server中 location / { root /home/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/html; } } }
在ser1這個(gè)容器中配置反向代理,要關(guān)注server 172.17.0.2:8888 weight=5;這一行,之所以反向代理到本機(jī)的8888端口,很好理解,因?yàn)槿粼俅未淼?0端口,永遠(yuǎn)不能代理到本機(jī)的服務(wù)中,陷入死循環(huán)。
以ser×作為服務(wù)器#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_header_buffer_size 1k; large_client_header_buffers 4 4k; server { listen 80; server_name 172.17.0.2; # 如過(guò)沒(méi)有對(duì)代理的鏈接形式有特殊要求,可以直接將root和index寫在server中 location / { root /home/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/html; } } }
serx和ser1的區(qū)別就在于http的設(shè)置,沒(méi)有upstream,server_name 為要負(fù)載的服務(wù)器的ip。修改好配置文件后,使用nginx -s reload重新載入配置。
(四) 刷新網(wǎng)頁(yè)測(cè)試修改三個(gè)ser中的index.html,方便觀察
在瀏覽器中打開(kāi) localhost:8881 或者 172.17.0.2,刷新網(wǎng)頁(yè)
不斷刷新,可以看到會(huì)打開(kāi)不同容器中的index頁(yè)面,說(shuō)明服務(wù)被Nginx均衡地分配到不同的service上,這就是Nginx的負(fù)載均衡的作用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39389.html
摘要:以及自動(dòng)剔除因故障負(fù)載均衡列表中宕機(jī)的服務(wù)器。這兩天折騰了一下的安裝配置,并通過(guò)模擬出在多服務(wù)器提供服務(wù)的狀態(tài)下的負(fù)載均衡。修改好配置文件后,使用重新載入配置。 原文發(fā)表于我的博客,轉(zhuǎn)載請(qǐng)注明出處 一直聽(tīng)說(shuō)Nginx的強(qiáng)大,它不僅可以作為Web服務(wù)器,按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁(yè)面的分離;還可以作為反向代理服務(wù)器,構(gòu)建服務(wù)集群,按輪詢、權(quán)重等多種方式對(duì)后端服務(wù)器做負(fù)載均衡。以及自動(dòng)剔...
摘要:部署只是一種規(guī)則,控制器組件會(huì)將這一規(guī)則應(yīng)用于實(shí)際負(fù)載均衡器中。原因是功能僅允許將端口用于路由,負(fù)載均衡器和則可作為全局啟動(dòng)。負(fù)載均衡的限制提供了功能豐富的負(fù)載均衡器支持詳細(xì)介紹在此。截至目前,我們暫時(shí)無(wú)法使用工具將負(fù)載均衡器配置從轉(zhuǎn)換為。 如果您的應(yīng)用程序是面向大量用戶、會(huì)吸引大量流量,那么一個(gè)不變的目標(biāo)一定是在高效滿足用戶需求的同時(shí)、不讓用戶感知到任何類似于服務(wù)器繁忙!的情況。這一...
閱讀 3095·2021-11-25 09:43
閱讀 2269·2021-09-07 10:28
閱讀 3621·2021-08-11 11:14
閱讀 2791·2019-08-30 13:49
閱讀 3559·2019-08-29 18:41
閱讀 1176·2019-08-29 11:26
閱讀 1986·2019-08-26 13:23
閱讀 3385·2019-08-26 10:43