負載均衡其實就是把其中一個服務器用作反向代理, 而後經過訪問這個服務器實現負載均衡.python
1.準備三臺虛擬機 192.168.81.130 192.168.81.131 192.168.81.132 2.分別配置這三臺機器 經過修改nginx,conf文件來實現: 130配置反向代理 131,132分別返回頁面 3.配置關鍵點以下: 130負載均衡配置修改nginx.conf: # 添加負載均衡地址池的參數 #默認是輪詢方式,兩臺服務器 upstream s18django { # 和server同一級別 upstream 是關鍵字 server 192.168.81.131; server 192.168.81.132; } # 添加反向代理參數以下 # 要寫在server裏面 location / { proxy_pass http://s18django # proxy_pass是關鍵字, 這個http後的參數就是upstream後面的參數 }
當訪問192.168.81.130這個負載均衡器的時候,他會找upstream中的地址池的ip,而後輪詢mysql
# 1.輪詢方式,你一次我一次 # 2.加權輪詢(權重大的機會大) upstream s18django { server 192.168.226.128 weight=2; server 192.168.226.130 weight=8; } # 3.ip_hash方式,對你訪問的ip進行hash,不能與加權公用 upstream s18django { server 192.168.226.128; server 192.168.226.130; ip_hash; }
# 必定要關閉防火牆,否則在你進行訪問的時候,會鏈接不上 iptables -F #清空規則 systemctl stop firewalld #關閉防火牆服務 systemctl disable firewalld #禁止開機自啓
django只是一個web邏輯框架,它經過python3 manage.py runserver命令啓動的socket服務端 是藉助python內置的wsgi框架 wsgiref框架實現的 它是一個單機模塊,單進程模塊,性能很低 # 所以在線上須要藉助經過C語言編寫的uwsgi這個web服務器軟件,啓動django python框架按照性能從高到底排序 1.sanic 2.tornado 3.flask 4.django
若是你報錯提示 找不到application ,就是由於uwsgi 找不到wsgi.py 解決: 要進入本身的項目(cd /opt/crm) # 而後在執行uwsgi --http :8088 --module Crm_Project.wsgi
nginx 能夠解決uwsgi的靜態文件問題,不用總去請求django,減輕壓力,而且支持高併發請求,還能限流,保障後臺服務器安全等等 uwsgi 由於uwsgi支持多進程, 多線程的方式,性能很高,啓動django性能更好,可是uwsgi不解析django的靜態文件 咱們之後會收集全部的django項目靜態文件,丟給nginx去處理
1.解決虛擬環境依賴的問題,也就是保障本地開發環境和線上一致性的問題, 在windows本地 經過 pip3 freeze > requirements.txt # 這樣就將python3解釋器中全部模塊導出到這個文件中 2.建立虛擬環境 mkvirtualenv nginx_crm 3.將這個 requirements.txt 文件傳輸到服務器上,進行安裝,就能夠自動解決全部模塊問題 pip3 install -r requirements.txt
# 必定要確保進入虛擬環境(nginx_crm) workon nginx_crm # 下載uwsgi pip3 install uwsgi
# 本身測試用 uwsgi支持熱加載的啓動方式命令以下 uwsgi --http :8000 --module Crm_Project.wsgi --py-autoreload=1 uwsgi --http :8088 --module Crm_Project.wsgi # 這個Crm_Project在第二層 --http指定http協議啓動在 8088端口 --module 找到項目第二層的目錄,裏面的wsgi.py文件 # 測試就用--http參數
# 若是結合了nginx反向代理就須要用的--socket, 爲了一勞永逸, 把他寫到項目下uwsgi.ini文件中去 1. cd 到項目下 cd /opt/Crm_Project 2.建立uwsgi.ini 3.把下述數據寫到uwsgi.ini中去:
啓動代碼nginx
uwsgi --ini uwsgi.ini
1. 在/opt下建立crmstatic文件夾 2.編輯項目中的settings.py ,寫入以下參數 STATIC_ROOT= '/opt/crmstatic' 3.收集crm全部的靜態文件 python3 manage.py collectstatic
#當用戶訪問 www.s18dnf.com的時候,就進入這個虛擬主機 location / { uwsgi_pass 0.0.0.0:8000; # 這個8000端口是由於uwsgi.ini裏面寫的是8000 include uwsgi_params; } #這個location是解決crm的靜態文件的問題的 location /static { #alias參數 就是將/static轉化爲/opt/crmstatic ,也就找到了咱們全部的靜態文件 alias /opt/crmstatic; }
!!! 注意要退出虛擬環境web
# 這個工具只能用python2下載 1.安裝easy_install # pip3是python3的軟件包 # easy_install是python2的軟件包 yum install python-setuptools 2.安裝supervisor easy_install supervisor 3.建立supervirsor的配置文件 echo_supervisord_conf > /etc/supervisor.conf 4.修改/etc/supervisor.conf的配置文件,添加啓動uwsgi的命令 # supervisor其實就是幫我們執行了,須要手動執行的命令而已 vim /etc/supervisor.conf # 寫入以下內容,在最底部寫 # command兩邊必須是絕對路徑 [program:s18crm] command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini stopasgroup=true killasgroup=true
!!! 測試用supervisor啓動uwsgi ,注意要確保此時uwsgi已經退出算法
supervisord -c /etc/supervisor.conf #這是啓動supervisor服務端命令 supervisorctl -c /etc/supervisor.conf #這是supervisor客戶端管理命令
# 下面這些命令須要在執行supervisorctl -c /etc/supervisor.conf 後執行 status s18crm #查看狀態 status後面的參數就是寫入到supervisor.conf中program後的參數 start s18crm #啓動任務 stop s18crm #中止任務 start all stop all #啓停全部的任務