Linux

Linux

一、Linux概述

1、Linux的概述

​ Linux是基于Unix的。Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机,诞生于1991年10 月5 日。是由芬兰赫尔辛基大学学生Linus Torvalds和后来加入的众多爱好者共同开发完成。

Linux_第1张图片

Linux_第2张图片
Linux_第3张图片

2、Linux的历史

​ Linux最初是由芬兰赫尔辛基大学学生Linus Torvalds(林纳斯·托瓦兹)由于自己不满意教学中使用的MINIX操作系统, 所以在1991年底由于个人爱好设计出了LINUX系统核心。后来发布于芬兰最大的ftp服务器上,用户可以免费下载,所以它的周边的程序越来越多,Linux本身也逐渐发展壮大起来,之后Linux在不到三年的时间里成为了一个功能完善,稳定可靠的操作系统

3、Linux系统的应用

  • ​ 服务器系统Web应用服务器、数据库服务器、接口服务器、DNS、FTP等等;

    ​ 嵌入式系统路由器、防火墙、手机、PDA、IP 分享器、交换器、家电用品的微电脑控制器等等,

    ​ 高性能运算、计算密集型应用Linux有强大的运算能力。

    ​ 桌面应用系统

    ​ 移动手持系统

    4、 Linux的版本

Linux的版本分为两种:内核版本和发行版本;内核版本是指在Linus领导下的内核小组开发维护的系统内核的版本号

Linux的主流版本

Linux_第4张图片

二、Linux网络连接三种模式

1、查看当前ip

ip addr  查看当前linux的ip地址

Linux_第5张图片

2、网络连接模式

​ 在VMware 中有三种网络设置方式
Linux_第6张图片

  • 桥接模式

    桥接模式是指与物理机(安装了VMware的电脑),使用同一个物理网卡,和物理主机使用同一个段的ip

  • NAT(地址转换模式)

    在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。那么我们会觉得很奇怪,为什么需要虚拟网卡VMware Network Adapter VMnet8呢?原来我们的VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信

Linux_第7张图片

  • 仅主机模式

    仅主机模式是出于安全考虑,将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。如果要使得虚拟机能联网,我们可以将主机网卡共享给VMware Network Adapter VMnet1网卡,从而达到虚拟机联网的目的

三、Linux目录结构

1、linux学习注意事项

  • linux中严格区分大小写
  • linux中所有内容以文件的形式保存,包括硬件(硬盘文件是:/dev/sd[a-p]),光盘文件是/dev/sr0 等
  • linux不靠扩展名区分文件类型(压缩包:.gz,.bz2,.tar.bz2,.tgz等),二进制软件包:.rpm,网页文件:.html,脚本文件:.sh,配置文件:.config
  • linux下所有的存储设备都要挂载后用户才能使用,包括硬盘、U盘
  • windows下的程序不能在linux下安装和运行

2、linux目录结构

Linux_第8张图片

四、Linux常用命令

1、列出文件列表:ls ll【记】

ls(list)是一个非常有用的命令,用来显示当前目录下的内容。配合参数的使用,能以不同的方式显示目录内容

格式:ls[参数] [路径或文件名]

常用:在linux中以 . 开头的文件都是隐藏的文件

  • ls -a 显示所有文件或目录(包含隐藏的文件)
  • ls -l 缩写成ll 显示所有文件或目录的详细信息
  • ls -d 显示当前目录,点表示当前目录,将目录像文件一样显示,而不是显示目录下的文件
  • ls -h 智能显示

**案例:显示当前路径下的所有文件(包括隐藏文件)
Linux_第9张图片

案例:显示当前路径下的所有文件的详细信息
Linux_第10张图片

2、清屏命令clear

当我们输了多次命令后屏幕就被占满了,如果我们还要输入其他命令就要往下拖动窗口,可以使用清屏命令让窗口自动往下滚一屏

在这里插入图片描述

清屏除了可以使用clear命令还可以使用ctrl+l快捷键

3、切换目录命令cd【记】

linux中的切换目录命令和windows中的命令一样也是使用cd

案例:使用cd切换到root帐号的home目录

在这里插入图片描述

cd命令其他用法:

  • 切换到上一层目录cd /

  • 切换到系统根目录cd ~

4、查看当前目录所在目录命令pwd

​ pwd命令是用来查看当前目录的路径

在这里插入图片描述

五、操作目录命令【记】

1、创建目录mkdir

mkdir(make directory)命令可用来创建目录

  语法:mkdir  目录名称   mkdir app app1 aap2

案例:在root根目录下创建woniu目录

Linux_第11张图片

注意:mkdir一次只能创建一个目录或同级多个目录

2、创建多级目录mkdir -p

 mkdir -p app/app1/app2

直接使用mkdir app/test会报错
在这里插入图片描述

创建多级目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWz1KF1V-1691065188988)(assets\image-20210831150352690.png)]

3、删除空目录rmdir

rmdir(remove directory)命令可用来删除“空”的目录

案例:删除root根目录中的woniu目录

Linux_第12张图片

六、文件命令

1、文件操作命令【记】

a、touch创建一个空文件

语法: touch a.txt

案例:在woniu目录中创建文件hello.txt

Linux_第13张图片

b、cp 文件拷贝

cp a.txt ./app1 将a.txt复制到app1目录中
cp a.txt b.txt    将a.txt复制为b.txt文件
cp a.txt ../    将a.txt文件复制到上一层目录中
cp a.txt ../app1/b.txt 将a.txt 拷贝到app1下改为b.txt

案例:将hello.txt拷贝到app目录中
Linux_第14张图片

除了可以将文件直接复制外,还可以在复制文件时修改文件的名称

案例:将install.log拷贝到microboom目录中并改名为linux.txt

Linux_第15张图片

c、mv 移动或者重命名

mv 移动或者重命名
	mv a.txt ../        将a.txt文件移动到上一层目录中
	mv a.txt b.txt      将a.txt文件重命名为b.txt
	mv a.txt ../b.txt   将a.txt文件移动到上一层目录中后文件名修改成b.txt

d、rm 删除文件或目录

用法: rm [选项]... 文件...
	rm a.txt   删除a.txt文件
    删除需要用户确认,y/n 
rm  删除不询问
	rm -f a.txt  不询问,直接删除rm 删除目录
	rm -r a      递归删除,询问递归删除
	rm -rf  a    不询问递归删除
	rm -rf *     删除所有文件(慎用)
	rm -rf /*    自杀(慎用)

2、文件查看命令【记】

a、cat命令

cat用于显示文件的内容,格式:cat[参数]<文件名>

案例:显示world.txt文件的内容

在这里插入图片描述

b、more命令

more一般用于要显示的内容会超过一个画面长度的情况。按空格键显示下一个画面。回车显示下一行内容。

案例:显示hello.txt文件的内容

Linux_第16张图片

c、less命令

​ less用法和more类似,不同的是less可以通过PgUp、PgDn键来控制

用法同上

d、tail命令

tail命令是在实际使用过程中使用非常多的一个命令,它的功能是:用于显示文件后几行的内容。

用法:
    tail -10 /etc/passwd   查看后10行数据
    tail -f catalina.log   动态查看日志(*****)
    ctrl+c 结束查看

案例:显示hello.txt文件后1行的内容

Linux_第17张图片

案例:动态显示world.txt的内容

使用了-f后光标一直在等待而不会结束,当install.log文件发生变化时会直接将变化的内容显示。

Linux_第18张图片

修改world.txt的内容

Linux_第19张图片

自动显示已更新内容

Linux_第20张图片

七、Vi和vim编辑器

	vi编辑器是所有Unix及[Linux](http://www.2cto.com/os/linux/)系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。
	
	 vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计; 因为程序简单,编辑速度相当快速。 vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。
	 
	vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。
	vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。

vim的用法和vi一样。vim需要安装

vim安装命令:
	yum -y install vim*

1、vi编辑器【记】

在Linux下一般使用vi编辑器来编辑文件。vi既可以查看文件也可以编辑文件。三种模式:命令行、插入、底行模式。

vim和vi

案例:使用vim编辑器修改app/world.txt文件

使用vi打开world.txt,vim界面如下:

Linux_第21张图片

使用vi

在vi中按i键切换到插入模式编写内容
切换到插入模式:按 i 、o、a键;
    i 在当前位置前插入
    I 在当前行首插入
    a 在当前位置后插入
    A 在当前行尾插入
    o 在当前行之后插入一行
    O 在当前行之前插入一行

使用插入模式编写内容:

Linux_第22张图片

输入完成后需要切换回命令模式对文件进行保存

切换到命令行模式:在vi中按Esc键;

Linux_第23张图片

切换到底行模式:按 :(冒号)
:wq保存并退出
:q!不保存退出

Linux_第24张图片

2、ps系统管理命令

ps命令是用来管理linux系统中的进程。

ps 正在运行的某个进程的状态
ps –ef  查看所有进程
ps –ef | grep redis 查找某一进程
kill 2868  杀掉2868编号的进程
kill -9 2868  强制杀死进程

案例:搜索名为hald的进程

hald进程是linux的系统进程,用来加载计算机硬件的驱动。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vyvZsQSq-1691065188993)(assets\image-20210831171246130.png)]

案例:强制杀死编号为5821的进程

Linux_第25张图片

八、配置静态ip

修改ip前需要知道自己的网卡名称是什么

Linux_第26张图片

通过查看ip命令得知网卡名称为ens33

修改网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改如下内容
bootproto=static
在最后加上几行,IP地址、子网掩码、网关、dns服务器
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.2  #在vm中网关地址是2
DNS1=192.168.1.2
DNS2=192.168.1.2

Linux_第27张图片

重启网络服务

systemctl restart network

测试外网

ping www.baidu.com

九、tar打包与解压命令【记】

​ tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。

常用参数:
	-c:创建一个新tar文件
	-v:显示运行过程的信息
	-f:指定文件名
	-z:调用gzip压缩命令进行压缩
	-t:查看压缩文件的内容
	-x:解开tar文件

1、打包

打包:
	tar –cvf xxx.tar 要打包的文件
打包并且压缩:
	tar –zcvf xxx.tar.gz 要压缩的文件

案例:将app目录打包

Linux_第28张图片

案例:将microboom目录打包并压缩

Linux_第29张图片

2、解压

解压 
   tar –xvf xxx.tar  解压到当前目录中
   tar -zxvf xxx.tar.gz -C /usr/aaa 解压到user/aaa目录中

案例:将app.tar.gz解压到woniu目录

Linux_第30张图片

-C表示要将解压结果存放到哪个目录中

十、 Linux的权限命令

1、文件权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQ8KUZAB-1691065188995)(/assets/image-20210831172347184.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thFq5TrI-1691065188995)(/assets/1558404421952.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgnplruT-1691065188995)(/assets/image-20210831172440578.png)]

通过上图可以看出linux中的权限由四个部分一共10个字符组成

2、文件权限管理

chmod 变更文件或目录的权限。
示例:
	chmod 755 a.txt 
	chmod u=rwx,g=rx,o=rx a.txt

案例:将文件world.txt的权限修改为只读

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DqiwwjPX-1691065188995)(/assets/image-20210831173328911.png)]

使用vi编辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxoR37Xh-1691065188996)(/assets/image-20210831173428234.png)]

十一、Linux安装MySql

1、yum在线安装mysql

a、第一步:查看mysql是否安装

rpm -qa|grep mysql

b、第二步:卸载旧版mysql

如果mysql的版本不是想要的版本。需要把mysql卸载

[root@localhost ~]# yum remove mysql mysql-server mysql-libs mysql-common   
[root@localhost ~]# rm -rf /var/lib/mysql
[root@localhost ~]# rm /etc/my.cnf

c、上传mysql的yum源

Linux_第31张图片

d、安装yum源和mysql

安装yum源

yum localinstall mysql80-community-release-el7-7.noarch.rpm

安装mysql

yum -y install mysql-community-server

e、启动mysql

systemctl start mysqld.service

当安装一个服务软件时,默认是把服务启动文件放在 /etc/init.d/里面,新版mysql在该目录中没有启动文件
systemctl start mysqld.service 启动mysql
systemctl restart mysqld.service 重启mysql
systemctl status mysqld.service 查看msyql状态
systemctl stop mysqld.service 停止mysql

mysqld为mysql默认的服务名称。在linux中mysql的配置文件在/etc/my.cnf 中

f、查看mysql随机密码

cat /var/log/mysqld.log | grep password

Linux_第32张图片

g、用随机密码登录mysql

mysql -uroot -p

h、修改root管理员的密码

​ 使用随机密码登录到msyql后输入mysql的修入密码命令

//1、先按mysql密码策略修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root_123R';

//修改mysql密码复杂性策略
set global validate_password.policy=0;
//设置最低密码长度为1
set global validate_password.length=1;

//再将密码修改为自己想要的
alter user 'root'@'localhost' identified by '123456';

2、开启mysql远程访问权限


//1、进入到mysql数据库,
use mysql;
//2修改该库下user表的host列
update user set host='%' where user='root';
//3、执行两次下面的命令
grant all privileges on test.* to 'root'@'%';
//4、刷新数据库配置
flush privileges;

Linux_第33张图片

3、关闭linux防火墙

//临时关闭防火墙,系统重启后无效
systemctl stop  firewalld.service  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnaghZFk-1691065188997)(assets\image-20210901144703241.png)]

4、远程连接错误解决

如果使用mysql客户端连接linux上的mysql可能会报如下错误,该错误是因为mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password

Linux_第34张图片

解决步骤:
 //进入到mysql数据库
  use mysql;
//更改加密方式
 ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
 //修改密码
 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
//刷新数据库配置
flush privileges;

十二、脚本安装jdk(使用jdk压缩包方式)

1、上传jdk到linux

在linux中软件一般安装到/usr/local目录中

Linux_第35张图片

2、将jdk解压

解压命令:
tar -zxvf jdk-8u301-linux-x64.tar.gz

Linux_第36张图片

将解压后的jdk改名为jdk8

mv jdk1.8.0_301 jdk8

Linux_第37张图片

3、配置jdk环境变量

注意JAVA_HOME换成自己的地址

使用vi打开/etc/profile
在末尾行添加
	#set java environment
	JAVA_HOME=/ding/jdk1.8
	CLASSPATH=.:$JAVA_HOME/lib.tools.jar
	PATH=$JAVA_HOME/bin:$PATH
	export JAVA_HOME CLASSPATH PATH
保存退出

Linux_第38张图片

重新加载环境变量

source /etc/profile

查看jdk版本

java -version

Linux_第39张图片

十三、Nginx安装配置

1、安装

我的nginx 文件目录是/etc/nginx 用文件方式启动 ./nginx -c /etc/nginx/nginx.conf

 -- 升级yum
yum update 

 -- 安装nginx源
yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
 
 -- 安装nginx
 yum install nginx
 
 --查看版本号进入到/usr/sbin
 ./nginx -v
  
 --启动
 ./nginx -c /etc/nginx/nginx.conf

 --关闭
./nginx -s stop
 
 --重加载命令 (不是重启,修改文件后,文件重新加载)
 ./nginx -s reload

十四、安装Linux版redis

14.1、安装及测试

1:安装wget 环境

yum -y install wget

2:上传redis 压缩包

3:执行命令

yum install gcc
#yum install make
#yum -y install centos-release-scl
#yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#scl enable devtoolset-9 bash

4: 进入redis 根目录执行make

5: 启动redis(进入redis 目录里的src 中执行下面命令)

./redis-server ../redis.conf

14.2、Redis持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

redis提供两种持久化方式:

​ RDB:快照,通过从服务器保存和持久化

​ AOF:日志,操作生成相关日志,并通过日志来恢复数据。couchDB对于数据内容,不修改,只追加,则文件本身就是日志,不会丢失数据.

注意:redis默认开启了RDB持久化

firewall-cmd --query-port=6379/tcp
如果返回no则端口没有开启,yes代表开启

firewall-cmd --add-port=6379/tcp --permanent

查看防火墙状态

systemctl status firewalld

暂时关闭防火墙

systemctl stop firewalld

永久关闭防火墙

systemctl disable firewalld

使用redis.conf 文件启动

修改内存大小 配置文件设置maxmemory 1024mb 或者在客户端config set maxmemory 800mb

修改redis 淘汰策略 配置文件设置maxmemory-policy XXX 默认的策略是内存满了所有申请内存的指令都会报错

1、RDB全称redis database backup file(redis 数据备份文件)持久化

进入redis-cli

执行:save #有redis主线程同步执行RDB,会阻塞所有命令

​ bgsave #开启子线程异步执行RDB,避免主线程受影响

redis 停机自动执行一次RDB

​ 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

注:fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程,在每次redis服务器启动的时候,会自动把dump.rdb这个文件的键值对 全部读取到内存

步骤一:编辑redis.conf配置文件

RDB快照相关参数:
	save 900 1    #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
	save 300 10  #必须是300秒之后至少10个关键字发生变化。
	save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
	上面三个参数屏闭后,rdb方式就关闭了
	
	stop-writes-on-bgsave-error yes    #后台存储错误停止写。
	rdbcompression yes    #使用LZF压缩rdb文件。
	rdbchecksum yes    #存储和加载rdb文件时校验。
	dbfilename dump.rdb    #设置rdb文件名。
	dir ./    #设置工作目录,rdb文件会写入该目录。

步骤二:重启redis查看数据是否存在

  • 先删除dump.rdb

  • 使用客户端连接并添加数据

  • 杀掉redis进程

    pkill -9 redis
    
  • 启动redis查看数据是否存在

RDB的缺陷:在2个保存点之间断电,将会丢失1-N分钟的数据出于对持久化的更精细要求,redis增添了aof方式 append only file

2、AOF日志持久化

进入 redis-cli

config set appendonly yes
或者进入redis.conf 修改 appendonly = yes 默认是no

AOF日志原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nE1YR9Nk-1691065188998)(…/…/…/…/…/…/教学资料/第3阶段课程/7.5-自己教案/第三周/02.Redis进阶/文档/assets/image-20210906142933035.png)]

思想:内存每写一条,就备份一条,时间间隔是1秒钟,缺点:文件大,写操作频繁。

  • 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),

  • 只许追加文件但不可以改写文件,redis启动之初会读取该文件(aof文件)重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

  • aof保存的是appendonly.aof文件

AOF日志相关参数:
	appendonly no # 是否打开aof日志功能  no:不开启   yes:开启日志
	appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
				everysec # 折衷方案,每秒写1次
				no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快
	no-appendfsync-on-rewrite  no # 正在导出rdb快照的过程中,要不要停止同步aof

配置开启AOF日志

配置存储方案

打印日志文件内容

more /usr/local/bin/appendonly.aof

因为没有操作所以没有日志信息

启动redis服务端并启动客户端连接并创建key

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxzgREZO-1691065188998)(…/…/…/…/…/…/教学资料/第3阶段课程/7.5-自己教案/第三周/02.Redis进阶/文档/assets/image-20210906144557189.png)]

查看日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7mCOEux-1691065188998)(…/…/…/…/…/…/教学资料/第3阶段课程/7.5-自己教案/第三周/02.Redis进阶/文档/assets/image-20210906144620543.png)]

3、AOF重写

思考:如果对同一个key进行多次操作,在aof日志中怎样表现操作记录,一条还是n条?

案例 :创建age并改变五次值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYpgtRU2-1691065188998)(…/…/…/…/…/…/教学资料/第3阶段课程/7.5-自己教案/第三周/02.Redis进阶/文档/assets/image-20210906144752864.png)]

日志会将每一步操作都记录,如果要对一个key操作多次,在数据上的表现只有一个但在日志中会有n条记录。当数据丢失需要找回数据的时候怎样找到正确的值?

aof重写是将内存中的key和value逆化为redis命令重新保存到日志中,就好像是将所执行的操作做的总结。

aof重写相关参数:
	no-appendfsync-on-rewrite  no # 正在导出rdb快照的过程中,要不要停止同步aof
	auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
	auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

问: 在dump rdb过程中,aof如果停止同步,会不会丢失?

答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

问: aof重写是指什么?

答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决 aof日志过大的问题.

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?

答: aof

问: 2种是否可以同时用?

答: 可以,而且推荐这么做

问: 恢复时rdb和aof哪个恢复的快

答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

问题思考:在使用rdb做持久化时,我们关掉了redis服务,然后重新打开,保存的数据还在。但在做aof的时候我们将redis服务关闭后再打开数据就没有了。在上面不是配置过rdb持久化吗,为什么没起作用?
答:当rdb中有数据,并开启了AOF选项,重启redis服务后会产生一个空的aof文件,当rdb和aof文件都存在,会以aof文件来恢复数据。

4、持久化总结

官网建议

1)、RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储

2)、AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

3)、只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.

4)、同时开启两种持久化方式

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

5)、性能建议

因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。AOF好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一是带来了持续的IO,二是AOF rewrite是将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。如果不Enable AOF ,仅靠Master-Slave Replication实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。新浪微博就选用了这种架构

14.3、redis 集群配置

1、redis主从复制(Master/Slave)

a、集群结构

三个节点:一个主节点,二个从节点

b、准备实例和配置

在虚拟机开启3个redis 实例,来模拟主从集群模式,信息如下:

ip post 角色
127.0.0.1 7001 master
127.0.0.1 7002 slave
127.0.0.1 7003 slave

1,在redis 目录下建三个文件夹:

2,把redis.conf 分别复制到三个文件夹中:

 cp /redis/redis-6.0.6/redis.conf /redis/7001
 cp /redis/redis-6.0.6/redis.conf /redis/7002
 cp /redis/redis-6.0.6/redis.conf /redis/7003

3,修改文件中端口,RDB文件存放位子,redis实例声明的IP

例如7001实例:

dir ../../7001
port 7001

4,启动三个服务进入src 目录下

例如启动7001实例:

./redis-server ../../7001/redis.conf

5,连接redis客户端

例如连接7001实例:

./redis-cli -p 7001
c、开启主从关系

通过命令建立主从关系:

例如连接7002客户端,执行命令,便是7002 是7001的从节点

redis-cli -p 7002 快速的打开某个端口的客户端

SLAVEOF 127.0.0.1 7001
d、验证主从关系

进入7001 的客户端输入命令

info replication

主从同步原理

原理:从节点第一次发送请求带上自己的replid 和offset ,主节点判断和自己的replid 是否一致,传给从节点replid 和offset,从节点保存版本信息,主节点执行bgsave 生成RDB 文件,并同步给从节点,从节点加载RDB文件实现数据同步,这时如果主节点发生修改操作,会生成一个repl-baklog 日志。

2、哨兵模式(sentinel)

万一主节点宕机了怎么办?

监控:sentinel不断的检查您的master和slave 是否按预期执行

自动故障恢复:如果master故障,sentinel会将一个slave提升为master,当故障实例恢复后也已新的新的master为主

通知:sentinel充当redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给redis客户端

sentinel服务状态检测,每隔一秒向集群每个实例发送ping 命令

主观下线:如果某个sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线

客观下线:若超过执行数量(quornum)的sentinel都认为该实例下线,则该实例客观下线,(quornum数最好超过实例总数一半)

ip post 角色
127.0.0.1 27001 master
127.0.0.1 27002 slave
127.0.0.1 27003 slave

1,在redis 目录下建三个文件夹:

2,新建文件sentinel.conf

以27001为例:

port 27002
sentinel monitor mymaster 127.0.0.1 7001 2
sentinel down-after-milliseconds mymaster 50000
sentinel failover-timeout mymaster 180000
dir "/ding/s1"

3,启动,进入src 目录

redis-sentinel ../../s1/sentinel.conf

十五、关闭Linux防火墙相关命令

  • 查看防火墙状态

    systemctl status firewalld.service  绿的running表示防火墙开启
    
  • 关闭防火墙

    systemctl stop firewalld.service
    
  • 开机禁用防火墙

    systemctl disable firewalld.service
    
  • 启动防火墙

    systemctl start firewalld.service
    
  • 防火墙随系统启动

    systemctl enable firewalld.service
    

1、在防火墙中开启指定端口

在实际的使用中不会将防火墙关闭,而是配置防火墙的放行

contos7的防火墙配置文件为:vi /etc/init.d/firewall

修改/etc/init.d/firewall 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  //开放80端口
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  //开放22端口

配置完成后输入:/etc/init.d/firewall restar 重启防火墙

十五、部署项目到Linux

 部署前先将项目所需的数据库添加到linux的mysql中

1、部署jar包到linux

  • 修改项目pom文件

    将打包方式改为jar

    在pom中添加springboot插件

      <build>
            <plugins>
                 <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-resources-pluginartifactId>
                    <version>3.0.2version>
                plugin>
            plugins>
        build>
    
  • 将项目打包后上传到linux

​ 上传成功后切换到jar包所在的目录,执行:java -jar 项目jar包名称

防火墙

systemctl start firewalld.service
  • 防火墙随系统启动

    systemctl enable firewalld.service
    

1、在防火墙中开启指定端口

在实际的使用中不会将防火墙关闭,而是配置防火墙的放行

contos7的防火墙配置文件为:vi /etc/init.d/firewall

修改/etc/init.d/firewall 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  //开放80端口
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  //开放22端口

配置完成后输入:/etc/init.d/firewall restar 重启防火墙

十五、部署项目到Linux

 部署前先将项目所需的数据库添加到linux的mysql中

1、部署jar包到linux

  • 修改项目pom文件

    将打包方式改为jar

    在pom中添加springboot插件

      <build>
            <plugins>
                 <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-resources-pluginartifactId>
                    <version>3.0.2version>
                plugin>
            plugins>
        build>
    
  • 将项目打包后上传到linux

​ 上传成功后切换到jar包所在的目录,执行:java -jar 项目jar包名称

你可能感兴趣的:(linux)