云计算
2025-11-07 20:28:55 0 举报
AI智能生成
云计算运维
作者其他创作
大纲/内容
Linux
系统启动流程
1.BIOS/UEFI初始化(硬件自检)阶段
检测CPU、内存、硬盘、显卡等核心硬件是否正常
确认启动设备,如硬盘、光盘,并将控制器交给该设备的引导程序
2.引导加载器(GRUB)阶段
他是硬盘的第一个扇区
读取并解析配置文件,显示系统选择菜单
加载Linux内核和初始化内存盘到内存
然后将控制权交给内核
然后将控制权交给内核
3.内核初始化阶段
检测并初始化所有硬件设备,加载对应驱动程序
挂载根文件系统,并启动系统第一个进程,init进程,systemd(PID=1)
4.init进程初始化阶段(系统服务启动)
init进程(systemd)是所有进程的父进程,负责启动系统服务
按预设的运行级别,如多用户模式3,图形界面模式5,启动服务,比如网络服务,ssh服务,防火墙
完成用户环境初始化,创建终端或图形界面会话
5. 用户登录
命令
文档类命令
增
touch file{1..3}.txt
vim file.txrt
echo 'hello' > file.txt
mkdir -p /xxx/sss
删
rm -rf /xxx
rmdir 删除空目录
改
mv
chmod
chown
sed
n
抑制默认输出
r
启用正则
[flag]
g
全局
p
打印匹配内容
d
删除
i
插入
a
追加
s
替换
查
ll
cat
n
显示行号
find
name
size
-200
200小于200M
+200
大于200M
type
f
文件
d
目录
l
链接
mtime
-7
七天内修改的
7
正好七天
+7
七天前修改的
pwd
grep
i
忽略大小写
E
扩展正则
v
取反
awk
F
指定分隔符,可使用正则
用户/权限管理
增
useradd
groupadd
删
userdel
groupdel
改
usermod
passwd
gpasswd
查
id
whoami
who(查询当前系统登录的用户)
系统管理
增
systemctl start xxx
systemctl enable xxx
删
systemctl stop
systemctl disable
yum/dnf remove
改
systemctl restart
systemctl reload
hostnamectl set-hostname
查
systemctl status
uname -a(查看系统信息)
df -h(查看磁盘空间)
top(查看系统负载)
网络管理
增
ifconfig ens33 up(启用网卡)
route add(添加路由)
nc -l(监听端口)
删
ifconfig ens33 down(禁用网卡)
route del(删除路由)
iptables -D(删除防火墙)
改
ipconfig ens33 IP(临时设置IP)
nmcli(永久修改网络配置)
nmcli conn mod ens33 [+|-]ipv4.address 192.168.142.131
nmcli conn mod up ens33
nmtui
iptables -A(添加防火墙规则)
查
ping
ifconfig/ip a
netstat/ss
curl/wget
tcpdump网络抓包
tcpdump -S -tttt -nn -i ens33 host 192.168.146.130 and port 80
-S 让ack以绝对方式显示ack信息,可以正常显示上一个seq+1
-tttt 输出能让人看的完整时间信息
-nn 显示IP和port,不将ip解析为域名
-i 指定抓包的接口,linux一般为以太网接口名
后面为过滤条件,监听146.130的80端口
进程管理
增
nohup(后台启动进程)
screen(创建会话启动进程)
删
kill
pkill
改
renice(修改进程优先级)
fg/bg(切换进程前台/后台)
查
ps -ef(查看所有进程)
top(实时查看系统资源占用)
pgrep(按进程名查询pid)
文件传输与下载
scp
r: 传目录使用
rsync
a
归档,保留文件各种权限和格式
v
显示详细进度与信息
z
传输时压缩数据
P
同步进度,显示百分比,且保留未完成的临时文件,断网后下次还能继续传
curl
o
可以从网页上拉去数据到本地,可以指定目录和文件名
k
仅测试网络连通性
wget
O
可以从网页上拉去数据到本地,可以指定目录和文件名
磁盘管理
增
fdisk(<2T)
/dev/xxx 创建磁盘分区
p
列出磁盘信息
n
new 新建分区
w
写入
l 列出所有磁盘与分区信息
gdisk(>2T)
parted
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart xfs primary 50% 100%
删
umount /dev/sdb1 卸载设备
fdisk /dev/sdb1
p
d 删除分区,然后选择分区
w
改
/etc/fstab 永久挂载
/dev/disk01 /mnt xfs defaults 0 0
设备路径/UUID 挂载点 文件系统 挂载选项 是否备份 是否开机自检,0表示否
挂载选项可选:
rw可读写
suid 允许设置特殊权限
dev 设备识别文件
exec 允许执行程序
auto 开机自动挂载
nouser 禁止普通用户挂载
mount -a 测试永久挂载文件格式是否正确
mount 临时挂载
a 测试fstab格式
partprobe
刷新磁盘分区信息,省得重启,后面可指定设备路径,不指定就刷新全部分区
查
df -Th
显示磁盘空间大小
du -h
显示文件或目录的大小
lsblk
查看设备信息
blkid
查看设备ID
LVM逻辑卷管理
增
pvcreate
vgcreate
lvcreate
删
pvremove
vgremove
lvremove
改
lvreduce
xfs文件系统不能在线缩容,ext4可以
vgreduce
vgreduce myvg /dev/sdb1 ,从vg中移除pv
vgextend
lvextend
lvextend -L +5G -r /dev/rl/root 扩容后刷新磁盘信息
查
pvdisplay
vgdisplay
lvdisplay
pvs
vgs
lvs
在给已有的lv扩容时,要在他上面的vg扩容才能对lv扩容
理论知识
RAID磁盘阵列
RAID 0
数据存储逻辑:条带式
特点:2倍性能,磁盘空间利用率100%
但是不安全,无法实现高可用
但是不安全,无法实现高可用
RAID 1
数据存储逻辑:镜像式
特点:性能一般,磁盘空间利用率50%
一份数据写两个盘,有备份,数据比较安全,允许坏一半的盘
一份数据写两个盘,有备份,数据比较安全,允许坏一半的盘
RAID 5
数据存储逻辑:条带式+信息校验
校验信息会分布式在所有盘上
校验信息会分布式在所有盘上
特点:兼顾性能与安全,性能为N-1倍,空间利用率为(N-1)/N * 100%
N为磁盘数量
N为磁盘数量
RAID 10
为RAID 1和RAID 0的组合,先组成RAID 1 在将多组RAID 1组成RAID 0
RAID 50
和上面原理类似,结合了RAID 5 的安全性和RAID 0 的性能,性能N-M, 空间利用率(N-M)/N * 100%
N为磁盘数,M为RAID 5 的组数
N为磁盘数,M为RAID 5 的组数
在组成磁盘阵列时,尽量用容量相同的磁盘,如果磁盘容量不同,系统会按照最低容量的来
系统密码重置
1. 按E进入内核页面,然后按上下键到linux打头的那行,按ctrl+e到行尾
2. 一直删除到ro处,保留一个空格,然后添加rd.break, 然后按ctrl+x引导启动
3. 重新挂载 mount -o remount,rw /sysroot
4. 切换目录 chroot /sysroot
子主题
6. 重构selinux信息 touch /.autorelabel
7. 然后两次exit就好了
网络与vm虚拟机
IP地址
A类
网络号8位,主机号24位,IP范围1.0.0.0~127.255.255.255(首段二进制以0打头),在实际网络中,127.x.x.x无法配置,这作为网络回环口,可以用来检查网卡是否正常;10.x.x.x作为私网地址
B类
网络号16位,主机号16位,IP范围128.0.0.0~191.255.255.255(首段二进制以10打头),172.0.0.0~172.31.255.255作为私网IP
C类
网络号24位,主机号8位,IP范围192.0.0.0~223.255.255.255(首段二进制以110打头),192.168.x.x作为私网IP
vm的三种网络模式
桥接
虚拟机和宿主机共享电脑的物理网卡,在同一局域网内的其他电脑也可以访问虚拟机。可以理解成虚拟机和宿主机地位相等
NAT地址转换
虚拟机通过宿主机的地址转换才能访问外网,且只有宿主机能访问虚拟机。可以理解成虚拟机的地位没宿主机高
仅主机
虚拟机无法访问外网,只能与宿主机通信
网络模型
OSI七层网络模型
应用层
http、tftp、ftp、nfs、wais、smtp、https
为计算机用户提供服务
表示层
telnet、rlogin、snmp、gopher
数据处理
会话层
smtp、dns
管理应用程序之间会话
传输层
tcp、udp
为两台进程之间的通信提供通用的数据传输服务
网络层
ip、icmp、rarp、akp、uucp
路由和寻址
数据层
fddi、ethernet、arpanet、pdn、sup、ppp
帧编码和误差纠正控制
物理层
ieee 802.1A、ieee 802.11
透明的传送比特流传输
TCP/IP协议模型
应用层
传输层
数据段
网络层
数据包
链路层
数据帧
TCP协议的三次握手(发送),四次挥手(断开)
三次握手
client像server发起链接请求号seq=x,server确认后发送ack=x+1表示自己收到,并且发送seq=y让对方确认,client回复ack=y+1确认收到,最终建立链接。也就是说,双方都需要确认自己发送的消息被确认才能建立链接
四次挥手
client对server发送结束请求FIN=M,告诉server我想要的数据就这些了,server收到后回复ack=M+1,表示知道了,然后server开始准备数据并发送,等发送完,server告诉client发完了,请求断开FIN=N,client收到后确认回复ack=N+1,然后才断开
ACK和ack不是一个意思,
大写的ACK是tcp首部的标志位,用于标志tcp包是否对上一个包进行了确认操作,如果确认了,则把ack标志位设为1
小写的ack代表的是头部的确认号Acknowledge number,是对上一个包的序号seq进行确认的号,ack=seq+1
大写的ACK是tcp首部的标志位,用于标志tcp包是否对上一个包进行了确认操作,如果确认了,则把ack标志位设为1
小写的ack代表的是头部的确认号Acknowledge number,是对上一个包的序号seq进行确认的号,ack=seq+1
DataBase
关系型数据库
mysql
创建用户远程登录
create user 'lcj'@'%' identified by 'lechaoju' ;%代表所有主机可访问
grant all on *.* to 'lcj'@'%';
flush privileges;
远程访问:要有mysql,mysql -h 192.168.146.130 -ulcj -p
忘记mysql密码重置
1.在/etc/my.cnf中添加 skip-grant-tables, 表示跳过验证
2. 然后重启mysql, systemctl restart mysql, 重新登录,直接回车就能进去
3. 清空密码 update mysql.user set authentication_string='' where user='root';
4. 刷新 flush privileges; 然后退出,将配置文件新加的那一行注释,并stop mysqld,然后重新start
5. 重新登录,也不用输密码,直接回车
6. 先查看root的权限是本地的还是可远程,select * from mysql.user where user='root'\G;
\G是将排班格式化,不然会很乱
\G是将排班格式化,不然会很乱
7. 修改密码 alter user 'root'@'localhost' identified by '123456'
8. 刷新 flush privileges;
日志
错误日志,记录mysql的错误信息的日志 show variables like '%log_error%'; 路径一般在/var/log/mysqld.log
二进制日志, 记录增删改的语句和数据信息,查看该日志可以恢复数据
show variables '%log_bin%',路径一般在/var/lib/mysql/binlog.000001数字越大,时间越新
statement
记录sql语句,日志小,部分函数可能主从不一致
row
记录数据行的变更,准确新高,性能消耗大,日志大
mixed
两者的结合,默认为statement,当语句中有函数时会使用row
想要修改二进制日志的格式有两种方法
临时修改: set global binlog_format=mixed
永久修改:在配置文件/etc/my.cnf中添加
查询日志
默认关闭,记录查询语句的信息,show variables like '%general%';
想要开启的话需要在配置文件中添加general_log=1 #0为关闭
慢查询日志
记录耗时较长的查询语句信息,耗时可自定义 long_query_time=2
常见的完整配置如下
索引 index
介绍
可以增加查询速度,但在增删改的操作比重较高的数据库少用,会增加读写能耗和磁盘空间
比如专门存放日志的数据库,平时不怎么查询,这个就不需要建立索引
比如专门存放日志的数据库,平时不怎么查询,这个就不需要建立索引
索引要建立在经常出现在where后的字段,如果有多个经常出现在where后的字段,就使用联合
索引
索引
唯一索引和主键的区别:唯一索引允许字段为空,且一张表可以有多个,主键不允许为空且一张表只能有一个
类别
普通索引
唯一索引 unique
联合索引
操作
添加/创建索引
普通索引 create index idx_name on emp(name);
唯一索引 create unique index idx_name on emp(name);
联合索引 create index idx_name_id on emp(id,name);
删除索引
drop index idx_name on emp;
查询索引
show index from emp;
在实际操作过程中,若要判断查询是否走了索引,可以在select前加explain来查看,查询出的key字段如果不为null
就代表走了索引
就代表走了索引
explain字段解释
GTID主从复制
mysql支持一台主库同时向多台备库复制,从库也可以作为其他服务器的主库
优点
主库出现问题,从库可以快速顶上
实现读写分离,降低主库压力
可以在从库中执行备份,避免备份期间 影响主库服务
操作步骤
主库:192.168.146.130
备库:192.168.146.133
mysql版本 8x,3306端口互通
备库:192.168.146.133
mysql版本 8x,3306端口互通
主库
1.在配置文件中开启gtid复制(主库),然后重启mysqld
2.在主库中创建用户并开放权限
3.在linux终端执行,导出主库数据,并传给从库
mysqldump -uroot -p --all-databases --routines --events --set-gtid-purged=on --lock-all-tables > /root/db.sql
导出后要cat查看一下有没有数据,否则后期在start replica后sql_running起不来
mysqldump -uroot -p --all-databases --routines --events --set-gtid-purged=on --lock-all-tables > /root/db.sql
导出后要cat查看一下有没有数据,否则后期在start replica后sql_running起不来
从库
4.从库配置gtid,并重启mysqld
5.然后将db的sql文件导入mysql
mysql -uroot -p < db.sql
mysql -uroot -p < db.sql
6.编写从库从主库自动拉取二进制日志,实现主从同步
7.启动 start replica;
8.查看状态 show replica status\G;
要确保replica_IO_Running=yes,Replica_SQL_Running=yes,auto_position=1
最终测试,在主库上创建一个数据库和表,并插入测试数据,然后在从库中查询,如果能查,就对了、
语句执行顺序
from
where
group by
having
select
order by
limit
非关系型数据库
redis
SQL语言四大类
DDL:Data Definition Language
数据定义语言,定义数据库对象(数据库,表,字段)
DML:Data Manipulation Language
数据操作语言,增删改
DQL: Data Query Language
数据查询语言
查询
DCL: Data Control Language
数据控制语言,用来创建数据库用公户,控制数据库访问权限
对于运维来说相对更重要
对于运维来说相对更重要
Nginx
初期
下载和安装
dnf install -y nginx
配置文件
将hexo搭建到nginx上
1.创建一个目录,将权限设为nginx的
2.将hexo打包到该目录下
3.在/etc/nginx/conf.d下创建conf文件,并指定root目录与index文件
主配置文件中有几大块
全局块
worker_processes 工作进程数,通常为cpu核心数
events块
worker_connection 最好为10240
use epoll 指定事件驱动模型
http块
server块
location块
sendfile零拷贝
keepalive
tcp_nopush
tcp_nodelay 不延迟
子配置文件
listen
server_name
root
location
rewrite
redirect 301临时重定向
permanent 302永久重定向
break 匹配到后停止匹配,并在当前location处理
last 匹配到后停止匹配并将匹配到的交给其他location处理
匹配优先级(从高到低)
‘=’精确匹配,一般用于登录页面
‘^~’前缀 匹配
‘~ / ~*’正则匹配,前者区分大小写,后者不区分
‘/’通用匹配,根匹配
nginx的特点
多进程+非阻塞IO多路复用
高并发
高负载
代理与负载均衡
代理
关键字:proxy_pass
正向代理与反向代理
正向代理:替客户端发送请求
反向代理:替服务端接收请求
负载均衡(LB)
关键字:upstream aaa;proxy_pass aaa;
动静分离
配置请求头proxy_set_header
主机名:Host $http_host
IP:X-Real-IP $remote_addr
代理链路:X-Forwarded-For $proxy_add_X_Forwarded_For
协议:X-Forwarded-Proto $scheme
Nginx优化方案
1.基础优化
使用最新稳定版nginx,参数调优
2.性能优化
开启sendfile,keepalive,增加缓存
3.反向代理优化
限流,开启gzip压缩
4.负载均衡优化
使用合适的方法
轮询
加权轮询
IP_Hash
5.日志与监控优化
6.安全优化
关闭版本号
限制请求方法
项目实战
部署前端项目
yudaoui-vue-admin
1.从gitee上clone源码到本地目录
2.安装nodejs,pnpm@8.15.5
3.配置国内镜像源
4.进入项目目录下,运行pnpm install安装相关依赖
5.编写nginx配置文件,指向源码下的dist目录(编译后创建)
6.编译运行源码:npm run build:proc -- --debug, 以生产环境运行
部署后端项目
ruoyi-vue-pro
整体流程
1.先git将ruoyi-vue-pro源码clone下来
2.然后安装各种服务到对应服务器,mysql,redis,jdk1.8,maven
3.配置mysql密码,创建用户并开放远程权限,导入源码的sql文件
4.redis配置密码,开放权限
5.后端yaml配置文件修改并打包
6. 前端三个配置文件并构建
7.nginx配置
8.运行jar包,浏览器访问
构建机build 146.133
1.git clone https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
2.安装jdk和maven
jdk:
maven:
3.配置环境变量
vim /etc/profile
#java env var
export JAVA_HOME/opt/jdk1.8.0_202
export JRE_HOME$JAVA_HOME/jre
export CLASSPATH$JAVA_HOME/lib:$JRE_HOME/lib
export PATH$PATH$JAVA_HOME/bin:$JRE_HOME/bin
#maven env var
export MAVEN_HOME/opt/apache-maven-3.9.10
export PATH$PATH$MAVEN_HOME/bin
export JAVA_HOME/opt/jdk1.8.0_202
export JRE_HOME$JAVA_HOME/jre
export CLASSPATH$JAVA_HOME/lib:$JRE_HOME/lib
export PATH$PATH$JAVA_HOME/bin:$JRE_HOME/bin
#maven env var
export MAVEN_HOME/opt/apache-maven-3.9.10
export PATH$PATH$MAVEN_HOME/bin
4. 进入项目下在ruoyi-vue-pro/yudao
server/src/main/resources下,找到application-local.yml文件
server/src/main/resources下,找到application-local.yml文件
修改里面jdbc的mysql主机名和数据库名为ruoyi_vue_pro
还有下面的用户名和密码
下面还有redis的数据库也改下对应的主机名和密码
还有下面的用户名和密码
下面还有redis的数据库也改下对应的主机名和密码
5. 这个时候就可以打包了
mvn clean install package ‘-Dmaven.test.skip=trueʼ
test.skip是跳过测试步骤
mvn clean install package ‘-Dmaven.test.skip=trueʼ
test.skip是跳过测试步骤
在上/var/www/yudaoui-vued得项目编译运行npm run build:prod,完成后
会在项目根目录下创建一个dist-prod的文件夹,将它压缩tar cvzf dist-prod.tar.gz dist-prod/,然后scp到java后端server
会在项目根目录下创建一个dist-prod的文件夹,将它压缩tar cvzf dist-prod.tar.gz dist-prod/,然后scp到java后端server
6.这个时候会在项目的根目录下yudao-server生成一个target目录,里面有一个jar包
可以先测试这个jar包有没有问题,看数据库连接是否完成
可以先测试这个jar包有没有问题,看数据库连接是否完成
java -jar ./yudao-server/target/yudao-server.jar
如果终端打印的信息没有error信息,或者没有明显的报错信息,
就代表配置没错,那么接下来就是传到java后端运行和运行前端
就代表配置没错,那么接下来就是传到java后端运行和运行前端
后端java 146.136:48080
接收到构建机的jar包后就可以直接java -jar运行了
可以直接网页IP:port访问,如果出现了页面,代表就可以了,下一步就是配置前端nginx了
mysql server 146.130:3306
安装mysql
编写脚本进行安装
脚本路径:~/deploy_mysql.sh
主要安装https://repo.mysql.com//下对应版本的rpm仓库配置包和mysql-community-server
脚本路径:~/deploy_mysql.sh
主要安装https://repo.mysql.com//下对应版本的rpm仓库配置包和mysql-community-server
然后 mysql -uroot -p进入mysql,脚本里可以配置修改密码,我改为了lechaoju
然后创建DB,create database ruoyi_vue_pro
将构建机上的源码中sql/mysql传过来,里面有打包好的sql文件
然后导入 mysql -uroot -p ruoyi_vue_pro < xxxx.sql
需要开放其他主机访问权限,mysql 8版本
1.创建用户:create user 'root'@'%' identified by '123456' ;#百分号代表所有主机
2.开放权限:grant all privileges on *.* to 'root'@'%' with grant option;
3. 刷新:flush privileges
redis server 146.130:6379
1.也是编写安装脚本,路径在~/deploy_redis.sh
2. 然后修改配置文件/etc/redis.conf中bind 0.0.0.0;
代表所有主机可访问
代表所有主机可访问
nginx server 146.134:80
接收到dist-prod包后解压
配置nginx配置文件,进行前后端分离,后端转到java后端,配置对应的请求头
配置前端的配置文件,让他与后端连接起来
在前端代码根目录下有一个vite.config.ts文件
还有两个隐藏文件.env.local和.env.prod,修改为java server地址
遇到的问题
mysql
因为我的脚本程序中少敲了一行,没有安装mysql server,导致起不来,然后我手动dnf安装Mysql-community-server,后也起不来,进不去
首先是/etc/my.cnf文件,里面的配置第一行要[mysqld]打头,然后指定mysql文件,datadir=/var/lib/msql和日志文件
log-error=/var/log/mysqld.log,这个日志文件用来存放mysql初始化信息,然后确认这些目录的所属组和所属主为mysql,运行mysqld --initialize --user=mysql初始化,如果不行,就执行rm -rf /var/lib/mysql/*
log-error=/var/log/mysqld.log,这个日志文件用来存放mysql初始化信息,然后确认这些目录的所属组和所属主为mysql,运行mysqld --initialize --user=mysql初始化,如果不行,就执行rm -rf /var/lib/mysql/*
1.ecs检查端口是否放行,2.前端配置文件的地址是否正确
思路 Tinking
20251107 前后端项目梳理与心得
1.梳理前后端整体流程
从前端代码部署到后端部署
在到前后端合体
从前端代码部署到后端部署
在到前后端合体
2.在实际做项目中遇到报错该如何分析和解决
前端
nginx和它的配置文件,前端源码本身不需要做修改
网页无法访问要么是nginx配置文件出错或者端口没放行,防火墙或者selinux的问题
网页无法访问要么是nginx配置文件出错或者端口没放行,防火墙或者selinux的问题
在链接后端的三个配置文件没有配对
后端
配置mysql,redis,java的yaml文件
看报错,看关键字,只找sql,redis,3306,6379等我们做项目中所有的配置项和服务的相关关键字即可
结合
点击登录登录不了
前端无法访问后端,如果后端的jar包可以运行并且可以在网页上显示数据,那问题就在前端的配置文件或者是前端无法访问后端
总结
还是需要多错,并总结错误,理清错误的前因后果
知道逻辑,下次遇到类似的问题就知道怎么解决了
知道逻辑,下次遇到类似的问题就知道怎么解决了
0 条评论
下一页