使用CentOS8实现Nginx负载均衡反向代理与安装MySQL数据库(涉及CentOS8、Nginx、MySQL、Flask)

文章目录

此文章使用的主机为MacBook M1芯片

推荐一个很好的nginx反向代理与负载均衡教程,建议观看完这个视频再阅读下面的配置文章: https://www.bilibili.com/video/BV1Bx411Z7Do

1. 安装并配置CentOS8虚拟机

CentOS8虚拟机镜像 链接: https://pan.baidu.com/s/1l4_2mcg-BES95E2IsabGGg?pwd=p9ye 提取码: p9ye

1.1 安装

1)打开VMware Fushion,点击新建虚拟机,并将镜像拖入弹出框内,点击“继续”:
在这里插入图片描述
选择任意一个操作系统即可,镜像内部已经设置过了:
请添加图片描述
2)可点击“自定设置”给虚拟机修改名称,也可以直接点击“完成”:请添加图片描述
3)点击中间的“播放”按钮,启动虚拟机,选择Install CentOS Linux 8,回车,然后需要等待一会:
在这里插入图片描述

请添加图片描述

4)选择语言,这里我们选择中文,确认后点击“继续”:
请添加图片描述

5)在如下图三个报警项中点击设置:
在这里插入图片描述
其中:
系统安装目的地设置,不做调整,直接点击“完成”即可:
在这里插入图片描述
设置ROOT账号的密码,注意要点击两遍“完成”进行确认:
在这里插入图片描述
如果你需要再创建一个用户,在“创建用户”直接创建即可,不需要则跳过:
在这里插入图片描述
6)确认完成后,点击“开始安装”进行安装:
在这里插入图片描述
7)安装完成后,点击“重启系统”重启:
在这里插入图片描述

8)重启后,勾选“许可证协议”
点击“完成”:
在这里插入图片描述
在这里插入图片描述
点击“结束配置”:
在这里插入图片描述
9)点击“前进”
在这里插入图片描述
10)设置创建主目录的信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
11)打开“设置,点击“网络”,将网络打开
在这里插入图片描述
点击设置齿轮,勾选“自动连接”:
在这里插入图片描述

注意我这里的虚拟机网络模式为NAT模式:
在这里插入图片描述
12)打开自带的火狐浏览器可以正常上网
在这里插入图片描述

13)打开终端,输入ip a或者ip addr或者ifconfig,可查看ip
注:在终端输入su -可以切换到root用户

在这里插入图片描述
至此,CentOS虚拟机就安装完成。

1.2 设置静态IP(看需求不一定要设置)

看需求是否要设置静态IP,不一定要设置。这里只展示下设置的方式,实际实验未进行设置静态IP

在终端中做如下操作:
1)修改网卡配置文件,注意这里的ens160是你的网卡名

vim /etc/sysconfig/network-scripts/ifcfg-ens160

注:点击“设置”,点击“网络”,再点击设置图标,点击“身份”可以知道网卡名,如下两张图:
在这里插入图片描述
在这里插入图片描述
2)在文件中添加以下内容:

BOOTPROTO=static
IPADDR=<静态IP地址>
NETMASK=<子网掩码>
GATEWAY=<网关地址>
DNS1=<DNS服务器1地址>
DNS2=<DNS服务器2地址>

注意,将<静态IP地址>、<子网掩码>、<网关地址>、<DNS服务器1地址>和<DNS服务器2地址>替换为你的实际值。

例子,如下图:
在这里插入图片描述

3)重启网卡
执行service network restart会报错, 这是因为centos8不支持该指令,我们使用如下指令重启,注意这里要使用root账号执行,否则会报错无权限,使用su -指令切换到root账户:

nmcli c reload

这个配置后不会马上生效,使用下面两行命令将连接重启下,或者直接重启虚拟机:

nmcli connection down ens160
nmcli connection up ens160

查询ip,发现配置的ip已经出现:

ip addr

1.3 开启SSH\开启关闭端口\关闭开启防火墙

通过ssh服务,我们可以使用ssh指令来远程操作虚拟机,非常的方便

centos8默认安装ssh服务,该服务通过22端口传输,所以需要开启22端口或者关闭防火墙。但在生产环境中不允许关闭防火墙

1、如果未开启ssh服务,可以通过以下指令开启

service sshd start
# 重启sshd
service sshd restart
# 关闭sshd
service sshd stop

如果上述方式不管用,可以尝试这种方式重启ssh:

systemctl restart sshd

2、开启22端口

# 查询22端口是否开放
firewall-cmd --query-port=22/tcp
#查询所有已开放的端口
netstat -anp
# 开启端口
firewall-cmd --add-port=22/tcp --permanent
# 开启后重新加载
firewall-cmd --reload

若以后要关闭22端口,则使用关闭端口指令:

# 关闭指定端口
firewall-cmd --permanent --remove-port=22/tcp

如需关闭/开启防火墙,操作如下:

查看防火墙状态 systemctl status firewalld.service
打开防火墙防火墙 systemctl start firewalld.service
关闭防火墙 systemctl stop firewalld.service
开启防火墙 systemctl enable firewalld.service
禁用防火墙 systemctl disable firewalld.service

注:上面是CentOS8 关闭防火墙,禁用防火墙命令, 另附CentOS 7 防火墙配置,添加规则,删除规则,查看规则

1.4 虚拟机与本机互相复制粘贴、传输文件

1)先开启ssh,如上所示
2)下载Termius软件,通过该软件管理操作虚拟机

Mac M1 Termius软件安装包:链接: https://pan.baidu.com/s/1mIAZyi-jl4UV3_5CvxsRgg?pwd=qygj 提取码: qygj

此时Centos8虚拟机IP是:192.168.178.130

在这里插入图片描述
在这里插入图片描述
请添加图片描述

也可以通过SFTP实现文件互相传递,点击要复制的文件拖拽即可:
在这里插入图片描述

2. 如何在CentOS 8安装Python

教程链接

3. 解决错误:为 repo ‘appstream’ 下载元数据失败

执行sudo dnf install python3,出现错误:错误:为 repo ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist。

原因:
在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。
CentOS 8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

解决方法:
如果你仍然需要运行CentOS 8,你可以在/etc/yum.repos.d中更新一下源。使用vault.centos.org代替mirror.centos.org。

执行一下两行代码进行修改:

sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*

例子,如下图:
在这里插入图片描述

4. 安装Nginx

4.1 关于OpenResty

OpenResty就是Nginx,集成了很多方便的插件

在这里插入图片描述

4.2 在 CentOS 8 上通过 dnf 安装 OpenResty

1) 安装标准的 wget 包

root用户下,安装标准的 wget 包:

dnf -y install wget

在这里插入图片描述

2) 使用 wget 下载 openresty.repo 文件

wget 'https://openresty.org/package/centos/openresty.repo'

在这里插入图片描述

3) 把这个文件移到 yum 仓库的配置目录中

sudo mv openresty.repo /etc/yum.repos.d/

在这里插入图片描述

4) 更新 yum 索引数据库

sudo dnf check-update

5) 安装主 RPM 包,openresty

sudo dnf -y install openresty

6) 检查 openresty 可执行文件是否可用

这个openresty 可执行文件只是一个符号链接

which openresty

file `which openresty`

在这里插入图片描述

7) 检查其版本

openresty -V

在这里插入图片描述

8) 启动默认的 openresty 服务器

sudo systemctl start openresty

9) 检查 nginx 进程是否启动并运行

ps aux|grep nginx

在这里插入图片描述

10) 测试默认主页

在CentOS8里面自带的浏览器输入: http://localhost/
默认是80端口
请添加图片描述
或者在主机上输入CentOS8虚拟机的ip:
请添加图片描述

4.3 CentOS 8 启动、停止、重启、检错Nginx命令

CentOS 8 操纵nginx的一些命令:
ps 我的安装在/usr/local/openresty/nginx 目录
–启动
/usr/local/openresty/nginx/sbin/nginx
–停止
/usr/local/openresty/nginx/sbin/nginx -s stop
–重启
/usr/local/openresty/nginx/sbin/nginx -s reload
–检验nginx配置是否正确
/usr/local/openresty/nginx/sbin/nginx -t

4.4 必看Nginx入门视频

视频链接🔗

关于Nginx负载均衡反向代理的简易使用请看上述视频

注:
在Nginx的配置文件nginx.conf中,“= /a”、“^~ /a”、“^~ /a/b”、“~ ^/\w”、“~ ^/[a-z]”分别表示以下内容:

  1. “= /a”:表示精确匹配以“/a”为请求路径的URL。例如,请求路径为“/a”的URL会被匹配,而请求路径为“/a/b”、“/ab”等其他以“/a”开头的URL则不会被匹配。

  2. “^~ /a”:表示以“/a”为请求路径的URL前缀匹配,其中“^~”表示在所有正则表达式和普通字符串匹配中优先匹配该表达式。例如,请求路径为“/a”、“/a/b”、“/a/b/c”等以“/a”开头的URL都会被匹配,而请求路径为“/ab”等其他以“/a”开头的URL则不会被匹配。

  3. “^~ /a/b”:表示以“/a/b”为请求路径的URL前缀匹配,其中“^~”表示在所有正则表达式和普通字符串匹配中优先匹配该表达式。例如,请求路径为“/a/b”、“/a/b/c”等以“/a/b”开头的URL都会被匹配,而请求路径为“/a”、“/ab”等其他以“/a”开头但不以“/a/b”开头的URL则不会被匹配。

  4. “~ ^/\w”:表示正则表达式匹配以斜杠“/”开头,后面跟一个或多个字母数字或下划线的字符串的URL。其中“~”表示使用正则表达式匹配,“^/”表示以斜杠“/”开头,“\w”表示匹配任意一个字母数字或下划线字符。例如,请求路径为“/abc123”、“/test_01”、“/hello_world”等以斜杠“/”开头,后面跟一个或多个字母数字或下划线的URL都会被匹配,而请求路径为“/ab/c”、“/hello-world”等其他不符合要求的URL则不会被匹配。

  5. “~ ^/[a-z]”:表示正则表达式匹配以斜杠“/”开头,后面跟一个小写字母的URL。其中“~”表示使用正则表达式匹配,“^/”表示以斜杠“/”开头,“[a-z]”表示匹配任意一个小写字母。例如,请求路径为“/a”、“/b”、“/c”等以斜杠“/”开头,后面跟一个小写字母的URL都会被匹配,而请求路径为“/A”、“/1”等其他不符合要求的URL则不会被匹配。

5. CentOS8安装MySQL8.0.22

5.1 首先用Termius远程连接到CentOS8服务器

5.2 卸载之前安装过的MySQL

如果服务器之前安装过mysql请先卸载,我这里是用yum安装的,现在通过yum去卸载:

yum remove -y mysql
find / -name mysql  //找到残留的文件,再通过rm -rf去删除对应的文件

在这里插入图片描述

5.3 卸载完成后,使用以下命令

wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

yum install mysql80-community-release-el8-1.noarch.rpm

成功示意图如下:
在这里插入图片描述
在这里插入图片描述

5.4 检查数据源

查看mysql源是否安装成功:

yum repolist enabled | grep "mysql.*-community.*"

在这里插入图片描述

5.5 禁用CentOS8自带mysql模块

如果出现No match for argument: mysql-community-server,可执行 yum module disable mysql命令:

yum module disable mysql // 禁用命令

在这里插入图片描述

5.6 安装mysql命令

yum install mysql-community-server 这一步的时候可能很多人安装不上,
因为是yum安装库的问题,错误(Error: GPG check FAILED),可以将--nogpgcheck添加到后面:
yum install mysql-community-server --nogpgcheck

在这里插入图片描述
在这里插入图片描述

5.7 启动mysql

/bin/systemctl start mysqld.service //启动命令
service mysqld status

在这里插入图片描述

5.8 显示mysql的随机密码

grep 'temporary password' /var/log/mysqld.log

在这里插入图片描述

5.7 登录并修改mysql密码

mysql -u root -p //输入上面生成的随机密码

在这里插入图片描述

修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_21root'; 
//修改密码需要注意,这里密码先修改成 “Root_21root”,因为我们随便修改密码时,一般都不满足它的策略,会报以下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

解决办法:
一定要先修改默认密码为: Root_21root 满足它的策略,再进行下面的操作:
SHOW VARIABLES LIKE 'validate_password%'; //查看密码策略

修改密码长度:
set global validate_password.length=1; //(长度)
修改密码等级:
set global validate_password.policy=0; //(等级)

设置成自己想要的密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

在这里插入图片描述

5.8 在CentOS 8中开放MySQL 8.0.22的远程访问

create user 'root'@'%' identified by '123456';

grant all privileges on *.* to 'root'@'%' with grant option;

FLUSH PRIVILEGES; //刷新权限

在这里插入图片描述

注1:对于创建用户SQL语句的解释:

# 创建用户
create user 'root'@'localhost' identified by '123456';
# 说明
#  root  用户名
# localhost  可访问IP (localhost 代表只能本机访问,想让全部IP都可以访问的话是 %) 
# 123456 密码 
Query OK, 0 rows affected (0.09 sec)

注2:
如何进行授权SQL语句的解释:

# 授权
# 报开头的错主要是版本问题
# mysql8.0之前
 grant all privileges on *.* to 'root'@'%' IDENTIFIED BY "mypassword";
# mysql8.0之后
 grant all privileges on *.* to 'root'@'%' with grant option;

关于授权语句的说明可以先看完说明再看语句:

GRANT privileges ON databasename.tablename TO 'username'@'host'
# 语句说明
# privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
# databasename:数据库名
# tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*

注3:
创建完成后执行以下语句,用于刷新数据库权限:

FLUSH PRIVILEGES;

5.9 重启mysql数据库

先在mysql命令行输入exit,再在root用户下输入sudo systemctl restart mysqld
在这里插入图片描述

5.10 补充: MySQL查看或显示数据库(SHOW DATABASES语句)

5.11 在本机(macbook)上使用Navicat远程连接CentOS8 MySQL数据库

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 实战使用Nginx实现负载均衡反向代理

6.1 简述

本部分使用Flask框架模拟搭建真实的Web网站。如下图,该架构使用Flask框架模拟了一个真实的Web网站,其中使用了nginx作为反向代理服务器,用于分摊负载。右侧的三个server代表三个不同的网站,这些网站都连接到同一个MySQL数据库,可以对该数据库进行增删改查等操作。为了简化实验,本文使用了两个学生信息管理系统网站,这些网站对外显示一个IP地址,但实际上用户访问、操作的是同一个网站。左侧的三个user代表访问网站的用户,他们在访问同一个网站的时候,会被nginx分摊到不同的server网站上去,从而实现负载均衡。这意味着,当有多个用户同时访问网站时,nginx会将请求分配到不同的服务器上,以确保服务器不会过载并能够更好地处理流量。

使用的Flask网站源码请自行寻找一个便可。

在这里插入图片描述

6.2 在Navicat中运行sql文件

在这里插入图片描述
右键点击选择“运行SQL文件”,运行网站所用的sql文件:
请添加图片描述
在这里插入图片描述
在这里插入图片描述

6.3 采用测试的两个Flask网站

为了呈现实验效果,给网站首页分别加了“入口一”、“入口二”标识。实际使用过程中,应对访问用户显示出仿佛是同一个网站

6.3.1 网站1

Pycharm专业版中的配置信息:
在这里插入图片描述
在这里插入图片描述
页面截图:
在这里插入图片描述

6.3.2 网站2

Pycharm专业版中的配置信息:
在这里插入图片描述
在这里插入图片描述
页面截图:
在这里插入图片描述

6.3 在Nginx中配置上面两个网站的负载均衡和反向代理

务必看一下4.4中的视频

在CentOS8的命令行root用户下,输入一下命令,编辑Nginx配置文件:

修改配置文件conf:
cd /usr/local/openresty/nginx/conf
vim nginx.conf

配置信息如下:
在这里插入图片描述

重启nginx:

/usr/local/openresty/nginx/sbin/nginx -s reload

在本机浏览器上测试,刷新同一个ip,可以看出来被nginx分配到不同的Web服务器网站上:

用于文章使用CentOS8实现Nginx负载均衡反向代理

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值