day09搭建均衡负载和搭建BBS博客系统
day09搭建均衡负载和搭建BBS博客系统
搭建BBS博客系统
本次搭建bbs用到的技术
需要用到的:
1、Nginx+Django
2、Django+MySQL
环境准备
主机 | IP | 身份 |
---|---|---|
db01 | 172.16.1.51 | 数据库 |
web02 | 172.16.1.8 | web服务端 |
web03 | 172.16.1.9 | web服务端 |
1、安装MySQL数据库
1)、安装mariadb所有的依赖包
[root@db01 ~]# yum install mariadb* -y
[root@db01 ~]# systemctl restart mariadb # 启动mariadb,mariadb也是数据库
[root@db01 ~]# mysql # 测试成功
2)、创建远程链接用户
# 修改密码
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by '123456';
# 刷新权限
MariaDB [(none)]> FLUSH PRIVILEGES;
3)、 创建一个数据库,打开数据库软件并连接
[root@db01 ~]# mysql -uroot -h172.16.1.51 # 连接数据库
MariaDB [(none)]> create database django; # 创建名为django数据库
4)、查看数据库
MariaDB [(none)]> show databases;
拓展:删除数据库(但是不要执行)
MariaDB [(none)]> drop database django;
2、配置Django + 数据库
1)、上传代码
上传BBS18_day01代码包
2)、修改配置
[root@web03 opt]# mv BBS18_day01 bbs # 修改名字
[root@web03 bbs]# pwd
/opt/bbs
[root@web03 bbs]# vim BBS18_day01/settings.py # 修改配置
-----------------------------------------------------------------------------------------------------
# 如果加*,只能本地访问
ALLOWED_HOSTS = ['*'] # 加上*号
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django', # 数据库名称
'HOST': '172.16.1.51', # 数据库IP
'PORT': 3306, # 端口
'USER': 'root', # 用户
'PASSWORD': '123456', # 密码 :这里要加上单引号''
'CHARSET': 'utf8'
}
}
-----------------------------------------------------------------------------------------------------
3)、数据库迁移
1. 安装对应数据库操作包
[root@web03 bbs]# pwd
/opt/bbs
[root@web03 bbs]# pip3 install pymysql -i https://pypi.douban.com/simple/
[root@web03 bbs]# pip3 install --upgrade pip
[root@web03 bbs]# pip3 install pillow -i https://pypi.douban.com/simple/
[root@web03 bbs]# pip3 install bs4
2. 创建数据库迁移文件
[root@web03 bbs]# python3 manage.py makemigrations
3. 使用数据库迁移文件迁移数据库
[root@web03 bbs]# python3 manage.py migrate
[root@web03 bbs]# python3 manage.py runserver 0.0.0.0:8000 # 测试是否开启
4. 添加一个默认页面
[root@web03 bbs]# pwd
/opt/bbs
[root@web03 bbs]# vim BBS18_day01/urls.py # 添加一行
url('', views.home),
[root@web03 bbs]# python3 manage.py runserver 0.0.0.0:8000 # 重新启动
3、Nginx 代理 Django
1)、配置uwsgi
[root@web03 ~]# cd /opt/bbs
[root@web03 bbs]# cp /opt/linux/myweb_uwsgi.ini /opt/bbs/ # 复制过来
[root@web03 bbs]# vim myweb_uwsgi.ini
-----------------------------------------------------------------------------------------------------
[uwsgi]
# 端口号
socket = :8000
# 指定项目的目录
chdir = /opt/bbs
# wsgi文件路径
wsgi-file = BBS18_day01/wsgi.py
# 模块wsgi路径
module = BBS18_day01.wsgi
# 是否开启master进程
master = true
# 工作进程的最大数目
processes = 4
# 结束后是否清理文件
vacuum = true
-----------------------------------------------------------------------------------------------------
[root@web03 bbs]# uwsgi -d --ini myweb_uwsgi.ini # 后台运行
[root@web03 bbs]# ps -ef | grep uwsgi # 查看一下
[root@web03 conf.d]# netstat -nutlp # 查看下端口
2)、配置Nginx + uwsgi
[root@web03 conf.d]# cd /etc/nginx/conf.d/
[root@web03 conf.d]# cp python.conf bbs.conf # 复制配置文件并改名
[root@web03 conf.d]# vim bbs.conf # 编写bbs的配置文件
[root@web03 conf.d]# nginx -t
[root@web03 conf.d]# systemctl restart nginx
-----------------------------------------------------------------------------------------------------
# 配置一个网站
server {
# 监听端口
listen 80;
# 配置域名
server_name bbs.test.com;
# 配置域名路径
location / {
# 加载nginx代理uwsgi的配置项
include uwsgi_params;
# 指定uwsgi的访问地址
uwsgi_pass 127.0.0.1:8000;
# uwsgi的超时时间
uwsgi_read_timeout 2;
# 自定义uwsgi代理项目的路径以及配置项
uwsgi_param UWSGI_SCRIPT BBS18_day01.wsgi;
# 指定Python项目的路径
uwsgi_param UWSGI_CHDIR /opt/bbs:;
# 索引文件
index index.html index.htm;
# 客户端上传文件的最大值
client_max_body_size 35m;
}
}
-----------------------------------------------------------------------------------------------------
3)、在c盘域名解析添加
192.168.15.9 bbs.test.com
部署负载均衡
简介
1、什么是负载均衡
将请求平均的分配给后端服务器
2、为什么要使用负载均衡
当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾
往往我们接触的最多的是SLB(Server Load Balance)负载均衡,实现最多的也是SLB、那么SLB它的调度节点和服务节点通常是在一个地域里面。那么它在这个小的逻辑地域里面决定了他对部分服务的实时性、响应性是非常好的。
所以说当海量用户请求过来以后,它同样是请求调度节点,调度节点将用户的请求转发给后端对应的服务节点,服务节点处理完请求后在转发给调度节点,调度节点最后响应给用户节点。这样也能实现一个均衡的作用,那么Nginx则是一个典型的SLB
3、负载均衡的叫法
1.负载均衡
2.负载
3.LB
4.Load Balance
4、公有云常见的负载均衡
1.SLB #阿里云产品
2.LB #青云产品
3.CLB #腾讯云产品
4.ULB #Ucloud产品
5、负载均衡的软件
1.nginx
2.Haproxy
3.LVS
负载均衡类型
1.四层负载均衡
所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载均衡,那么它的好处是性能非常快、只需要底层进行应用处理,而不需要进行一些复杂的逻辑
2.七层负载均衡
七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,比如我们说的http应用的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则,所以在应用层的服务里面,我们可以做的内容就更多,那么Nginx则是一个典型的七层负载均衡SLB
3.四层和七层负载均衡的区别
四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发、由此可以看出,七层负载均衡效率没有四负载均衡高。
但七层负载均衡更贴近于服务,如:http协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配、head头改写等等,这些是四层负载均衡无法实现的。
# 注意:四层负载均衡不识别域名,七层负载均衡识别域名
# 结论:一般使用七层负载均衡来负载web服务。
环境准备
主机 | IP | 身份 |
---|---|---|
lb01 | 172.16.1.5 | 负载均衡 |
web01 | 172.16.1.7 | web服务端 |
web03 | 172.16.1.9 | web服务端 |
部署负载均衡
1、安装Nginx
[root@lb01 ~]# yum install nginx -y
2、简化nginx.conf文件
[root@lb01 ~]# vim /etc/nginx/nginx.conf
---------------------------------------------------------------------------------------------------
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
---------------------------------------------------------------------------------------------------
3、配置负载均衡
[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim mqq.conf
[root@lb01 conf.d]# nginx -t
[root@lb01 conf.d]# systemctl restart nginx
---------------------------------------------------------------------------------------------------
upstream mqq {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
server_name mqq.test.com;
listen 80;
location / {
proxy_pass http://mqq;
}
}
---------------------------------------------------------------------------------------------------
4、测试
[root@web01 ~]# tail -f /var/log/nginx/error.log
[root@web02 conf.d]# tail -f /var/log/nginx/error.log # 如果两个都有日志的话,代表负载均衡搭建完毕
配置详解
1、创建一个IP连接池(存放web服务器的IP的)
upstream
只能配置在:http
格式:
upstream [连接池的名称] {
[存放的IP]
server [ip1];
server [ip2];
}
2、往IP连接池中丢请求。
proxy_pass http://[连接池的名称];
day09搭建均衡负载和搭建BBS博客系统的更多相关文章
- 用 node.js 的 hexo 框架搭建一个支持 markdown 的静态博客系统
1,Hexo如何在线可视化写博客: 可以试试这款插件 hexo-admin. 2,马克飞象: 一个非常好的 markdown 编辑器. 3,Hexo博客文章设置密码的方法: 首先,在Hexo中 ...
- 搭建BBS博客系统
目录 一:搭建BBS项目 1.部署数据库 2.启动数据库 3.进入数据库 4.远程连接MySQL数据 5.pycham连接Mysql 二:开始部署BBS 1.上传代码 2.数据库迁移 3.删除文件 4 ...
- 讲解开源项目:5分钟搭建私人Java博客系统
本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...
- 基于开源博客系统(jpress)搭建网站
基于开源博客系统(jpress)搭建网站 JPress 使用 Java8 开发,基于流行的JFinal和Jboot框架. 目前JPress已经内置的文章和页面其实是两个模块,可以移除和新增其他模块,因 ...
- 基于开源博客系统(mblog)搭建网站
基于开源博客系统(mblog)搭建网站 上一章讲了基于jpress部署的博客系统,这一章了解一下 mblog这个开源的基于springboot的博客系统,相比与jpress 的热度fork数量要少一些 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件
一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
前言 从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...
- 使用Jekyll搭建免费的Github Pages个人博客
一.Git 1.Git概述 Git is a free and open source distributed version control system designed to handle ev ...
- 【干货】利用MVC5+EF6搭建博客系统(四)(上)前后台页面布局页面实现,介绍使用的UI框架以及JS组件
一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...
随机推荐
- linux下uptime命令
https://man.linuxde.net/uptime uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间 ...
- 像素反转 牛客网 程序员面试金典 C++ Python
像素反转 牛客网 程序员面试金典 题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定 ...
- poj 3041 Asteroids(最小点覆盖)
题意: N*N的矩阵,有K个敌人,坐标分别是(C1,C1),.....,(Rk,Ck). 有一个武器,每发射一次,可消掉某行或某列上的所有的敌人. 问消灭所有敌人最少需要多少发. 思路: 二分建图:左 ...
- redis 的单机安装
redis 单机安装 参考文档地址:https://www.cnblogs.com/withfeel/p/10655994.html 1,下载redis,下载地址http://download.red ...
- Mysql教程:(五)多表查询
多表查询 select name,student.class,student.number,maths,chinese,english from student,score where student ...
- Go语言核心36讲(Go语言实战与应用一)--学习笔记
23 | 测试的基本规则和流程 (上) 在接下来的日子里,我将带你去学习在 Go 语言编程进阶的道路上,必须掌握的附加知识,比如:Go 程序测试.程序监测,以及 Go 语言标准库中各种常用代码包的正确 ...
- Python知识整理(三)
三.函数式编程与模块 1.函数式编程 1.高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 1.map/reduce map()函数接收两个参数,一个是函 ...
- Windows应用开发中程序窗口中的各种图标尺寸规划
为了让你的图标在各个视图模式下都能有合适的尺寸,需要制作4种尺寸16x16.32x32.48x48.256x256 在Windows系统中,几乎所有窗口都是ListView,其中的图标都按照指定的尺寸 ...
- MySQL基础语句(查询)
students表 id class_id name gender score 1 1 小明 M 90 2 1 小红 F 95 3 1 小军 M 88 4 1 小米 F 73 5 2 小白 F 81 ...
- 关于Cefsharp无法拖动Dom元素的解决方法
如图所显示,Cefsharp在嵌入网页,页面有对Dom元素的拖动的操作,独立在浏览器上对网页元素的拖动是没有问题的,但是嵌入到Cefsharp上显示禁用的图标.排查了H5的代码,没有写入禁用拖动的操作 ...