文章目录
- 1. 安装并配置CentOS8虚拟机
- 2. 如何在CentOS 8安装Python
- 3. 解决错误:为 repo 'appstream' 下载元数据失败
- 4. 安装Nginx
- 5. CentOS8安装MySQL8.0.22
- 5.1 首先用Termius远程连接到CentOS8服务器
- 5.2 卸载之前安装过的MySQL
- 5.3 卸载完成后,使用以下命令
- 5.4 检查数据源
- 5.5 禁用CentOS8自带mysql模块
- 5.6 安装mysql命令
- 5.7 启动mysql
- 5.8 显示mysql的随机密码
- 5.7 登录并修改mysql密码
- 5.8 在CentOS 8中开放MySQL 8.0.22的远程访问
- 5.9 重启mysql数据库
- 5.10 补充: [MySQL查看或显示数据库(SHOW DATABASES语句)](http://c.biancheng.net/view/2419.html)
- 5.11 在本机(macbook)上使用Navicat远程连接CentOS8 MySQL数据库
- 6. 实战使用Nginx实现负载均衡反向代理
此文章使用的主机为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]”分别表示以下内容:
-
“= /a”:表示精确匹配以“/a”为请求路径的URL。例如,请求路径为“/a”的URL会被匹配,而请求路径为“/a/b”、“/ab”等其他以“/a”开头的URL则不会被匹配。
-
“^~ /a”:表示以“/a”为请求路径的URL前缀匹配,其中“^~”表示在所有正则表达式和普通字符串匹配中优先匹配该表达式。例如,请求路径为“/a”、“/a/b”、“/a/b/c”等以“/a”开头的URL都会被匹配,而请求路径为“/ab”等其他以“/a”开头的URL则不会被匹配。
-
“^~ /a/b”:表示以“/a/b”为请求路径的URL前缀匹配,其中“^~”表示在所有正则表达式和普通字符串匹配中优先匹配该表达式。例如,请求路径为“/a/b”、“/a/b/c”等以“/a/b”开头的URL都会被匹配,而请求路径为“/a”、“/ab”等其他以“/a”开头但不以“/a/b”开头的URL则不会被匹配。
-
“~ ^/\w”:表示正则表达式匹配以斜杠“/”开头,后面跟一个或多个字母数字或下划线的字符串的URL。其中“~”表示使用正则表达式匹配,“^/”表示以斜杠“/”开头,“\w”表示匹配任意一个字母数字或下划线字符。例如,请求路径为“/abc123”、“/test_01”、“/hello_world”等以斜杠“/”开头,后面跟一个或多个字母数字或下划线的URL都会被匹配,而请求路径为“/ab/c”、“/hello-world”等其他不符合要求的URL则不会被匹配。
-
“~ ^/[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负载均衡反向代理