负载均衡其实就是把其中一个服务器用作反向代理, 而后经过访问这个服务器实现负载均衡.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 #启停全部的任务