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://[连接池的名称];
上一篇:C++学习Day09


下一篇:JAVA基础复习day09(面向对象的特性)封装、继承、多态(抽象)