概述
Linux开机启动过程
上电自检,引导装载程序,内核初始化,启动systemd所有进程之父。
真机-centos8.2,虚拟机-centos7.9
8.2支持podman
操作命令
lsblk | 查看分区情况 |
df -h | 查看挂载和使用情况 |
df -lh | 查看磁盘的使用情况 |
lscpu | 查看cpu |
Top 按M | 进行内存排序 |
Top 按P | 进行cpu排序 |
Free -h | 查看内存 |
Pstree -p | 列出对应的PID |
Ps -aux | 显示当前终端所有进程 |
Ps -elf | 显示系统内所有进程 |
Pgrep -lx / -Ux | 检索进程 //精确匹配 |
Grep -n | 列出所有的匹配行,显示行号 |
Grep -i | 搜索时,忽略大小写 |
Find -iname | 按文档名称查找,且不区分大小写 |
Find -atime | 访问时间 |
Find -ctime | 改变状态的时间 |
Find -mtime | 修改的时间 |
Crontab -e 【-u 用户名】 | 编辑计划任务,-u指定要设定计时器的用户名称 |
Crontab -l 【-u 用户名】 | 查看计划任务 |
Crontab -r 【-u 用户名】 | 清除计划任务 |
chmod | 修改权限 chmod [对谁操作][操作符][赋予的权限]文件名 |
chown | 修改所属组 chown [选项]... [所有者][:[组]] 文件... |
uname -r | 查看当前内核版本 |
Umask:是设置文件目录默认权限命令
目录 777-022=755
文件 666-022=644
Vim操作
G | 移动到文件的最后一行 |
nG | 移动到文件的第n行 |
gg | 移动到文件的第一行 |
:set nu | 现实行号 |
U | 恢复 |
进程和服务状态的命令
ps:查看进程
ps -aux | grep 服务名/进程号
pstree:查看进程树
top:实时动态刷新显示服务器状态信息
ss -antup | grep 服务名/进程号 查看服务、进程信息
natstat -antup | grep 服务名/进程号 查看服务、进程信息
systemctl 服务名 status 查看服务状态
日志
/var/log/messages | 系统日志(服务信息,报错) |
/var/log/secure | 系统登陆日志 |
/var/log/cron | 定时任务日志 |
/var/log/maillog | 邮件日志 |
/var/log/boot.log | 系统启动日志 |
/var/log/mysql.d | Mysql错误日志 |
/usr/local/nginx/logs/access.log | Nginx日志 |
查看日志软件:宝塔
内存占用爆满如何?
1.内存状态,内存数据占用过多资源导致爆满——阔扩展内存
服务软件异常——ps -aux 找到进程并杀死重启进程
查看日志查看具体原因
Cpu占用率过高如何
1.top -P查看cpu动态使用率,查看是什么程序导致的
2.查看系统日志文件是否存在恶意攻击
3.如果存在恶意攻击可通过防火墙设置ip禁用
链接
软连接
ln -s 源文件 目标文件
软连接可以理解为快捷方式,但当源文件被删除时,软连接(快捷方式)会失效,软连接可以跨分区/文件系统。
硬连接
ln 源文件 目标文件
硬链接相当于复制了一份源文件,但是不能跨分区/文件系统制作硬链接,源文件删除时,硬链接依旧有效。
分区
MBR:1.稳定性强;
2.MBR分区会生成引导分区用来加载系统启动项;
3.最大支持2TB磁盘;
4.能创建三个主分区和一个扩展分区。
GPT:1.磁盘最大支持18EB;(1EB=1048PB 1PB=1048TB)
2.可以分区128个分区。
压缩
在linux中可以识别常用的压缩文件:.zip .gz .bz2 .tar .tar.gz .tar.gz2等。
.tar格式
.tar格式:只是打包并不会压缩文件,.tar格式的打包和解打包都是使用tar命令,区别只是选项不同。
打包
命令:tar [选项] [-f压缩包名] 源文件或目录
[选项]: -c 打包
-f 指定压缩包的文件名
-v 显示打包文件过程
解打包
命令:tar [选项] 压缩包
[选项]: -x 解打包
-f 制定压缩包的文件名
-v 显示解打包文件过程
-t 测试,就是不解打包,只是查看包中有哪些文件
指定解打包路径
命令:tat [选项] 压缩包 -C 解打包路径
.zip格式
zip格式可以被windows和linux共同识别,zip命令所在目录是/usr/bin/zip,所用用户可以执行,用来压缩文件或目录。
命令:zip [选项] 压缩包名 源文件或源目录
[选项]:-r 压缩目录
zip对应的解压缩命令为unzip,命令所在目录为/usr/bin/unzip,所有用户可以执行。
命令:unzip [选项] 压缩包名
[选项]:-d 制定解压缩位置
.gz格式
命令:gzip [选项] 源文件
[选项]: -c 将压缩数据输出到标准输出中,可以用于保留源文件
-d 解压缩
-r 压缩目录
crontab 周期性计划任务的流程
利用crontab –e -u 用户名 进入指定计划任务编辑模式
分 时 日 月 周 执行的命令
查看:crontab -l -u 用户名
清除:crontab -r -u 用户名
Raid简述
Raid简称为独立冗余磁盘阵列,简单地说,raid是一种把多块独立的硬盘按不同方式组合起来形成一个硬盘组,从而提供比单个硬盘更高的存储性能和提供数据备份技术。组成磁盘阵列不同的方式称为raid级别。
Raid0
条带模式,最少两块磁盘,将数据切分分别存入到两块磁盘中,提高了读写效率但是一旦其中一块损害,会造成数据丢失。
raid1
镜像模式,最少两块磁盘.两块磁盘各存一份完整的数据,实现了数据冗余备份,但是不会提高数据的读写效率。
raid5
均衡模式,最少三块磁盘.将数据进行切分,分别存储在三块磁盘中,并在三块磁盘中存储校验值,谨防有一块故障时还可以通过校验数据恢复数据.在提高读写效率的同时还实现了数据的冗余。
raid10
镜像+条带模式:最少四块硬盘.数据先进行raid0分片存储分给两个raid1存储,raid1在进行镜像存储,可以2块磁盘发生故障,但是不能故障的是同一个raid1存储阵列,否则会造成数据不完整。
raid01
条带+镜像模式:最少四块硬盘.数据先进行raid1镜像存储分给两个raid0存储,raid0在进行分片存储。
逻辑卷
LVM:当文件系统容量觉得不够的时候,可以向逻辑卷增加新的分区来实现扩大容量的目的,而当文件系统过大有浪费的时候,可以选择取出一些基本没有用的磁盘分区来达到减少容量的目的。
PV物理卷
物理卷就是基本的硬盘分区,或者与硬盘具有相同功能的设备,例如RAID。
VG卷组
有多个物理卷组成,可在卷组上创建一个或者多个LV逻辑卷。
LV逻辑卷
逻辑卷是在卷组的基础上进行的再次划分,与在物理磁盘上继续划分分区是一样的道理。但是逻辑卷的大小必须是PE的整数倍。如果要增加容量,就增加PE;需要减少容量,就减少PE。
基本思路:1.准备至少一个空闲分区;
2.创建卷组:vgcreate 卷组名 空闲分区;
3.创建逻辑卷:lvcreate -L 大小 -n 名称 卷组名。
拓展卷组 | vgextend 卷组名 空闲分区 |
拓展逻辑卷 | lvextend -L 新大小 /dev/卷组名/逻辑卷名 |
修改卷组PE大小 | vgcreate -s PE大小 卷组名 空闲分区 |
指定PE个数创建逻辑卷 | lvcreate -l PE个数 -n 逻辑卷名 卷组名 |
Ceph
是一个分布式文件系统具有高扩展高可用高性能的特点,可以提供对象存储,块存储,文件系统存储,有存储空间大的优势。
分布式存储
分布式存储是指一种独特的系统架构他由一组网络进行通信各个计算节点协调完成任务费用廉价能完成普通计算机完成不了的存储任务。
什么是块存储
例如光盘,磁盘。ceph块设备也叫RDB集成在linux内核提供企业功能,快照cow技术。
Ceph组件
1.OSD 用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。
2.MSD 为Ceph文件提供元数据计算、缓存与同步。在Ceph中,元数据也是存储在osd节点中的
3.Monitior 监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性。
Ceph部署环境
需要至少三台虚拟机,配置主机名ip地址yum源,修改所有主机名,配置无密码ssh连接,配置NTP时间同步,创建虚拟机磁盘。
部署ceph集群
安装部署工具ceph-deploy,创建ceph集群,准备日志磁盘分区,创建OSD存储空间,查看ceph状态验证。
三剑客
Grep
命令: -c:只输出匹配行的计数。
-i:不区分大小写。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
^$:代表空行
格式: 查询a.txt包含root行数: grep root -n a.txt
过滤a.txt空行: grep -v ^$ a.txt
查找a.txt中s开头的行:grep ^s a.txt
查找a.txt中s结尾的行:grep n$ a.txt
sed
是一种流编辑器,一次处理一行内容。
Awk
Awk -F,{print $3}
- 什么是shell?
在linux内核与用户之间的解释器程序,通常是指/bin/bash,负责向内核翻译及传达用户/程序指令,相当于操作系统的“外壳。
- Shell的两种使用方式”:
1.交互式 ——命令行:人工干预、智能化程度高:逐条解释执行,效率低。
2.非交互式 ——脚本:需要提前设计,智能化难度大:批量执行效率高,方便在后台执行
- Bash的优点:
tab键、快捷键、历史命令、支持别名、管道、重定向。
Shell脚本:提前写好可执行语句,可以完成特定任务的文件,按顺序、批量化执行
- 如何使用shell脚本:
- 添加x权限,然后使用路径运行
- Bash 脚本文件路径
- Source 脚本文件路径
- 自定义shell变量时的注意事项:
可以包括数字、字母、下划线,不能以数字开头
赋值时等号两边不可以有空格
尽量不要使用关键字和特殊字符
给同一个变量多次赋值时,最后一次的赋值生效
- 局部变量:
仅在当前解释器进程中使用的变量
- 全局变量:
解释器产生的子进程中也可以使用的变量
- 运算:
使用expr命令,可以运算并输出结果
简述预定义变量$$,$?,$#,$*的作用
$$保存当前运行的进程号
$?保存执行命令结果的返回状态(0是成功,非0为失败)
$#保存位置变量的个数
$*保存所有位置变量的值
- 简述单引号,双引号,反撇号在变量赋值操作中的特点:
双引号:可以界定范围
单引号:可以界定范围,还可以屏蔽特殊符号,即便是$也视为普通字符
反撇号:可以获取命令的执行结果
- 运算:
使用$[ ]或者$(( ))运算【看结果要配合echo ,echo[2+1];echo[ A+B]】
使用let命令,专用于创建变量和bianliangdezijiazijian【let a=a+10àlet a+=10 变量a加10】
使用bc,进行小数计算【echo “10/3”|bc echo “scale=2;10/3”|bc】scale规定了小数点后几位
- 条件测试:
Test 表达式 (test a==a 要用echo $? 查看结果)
[表达式] ([a==a] 也用echo$? 查看结果)
Ps:”-z”----[-z $a]判断变量是否为空,为空则表示成功
[!-z $a]判断变量是否为空,非空则表示成功
- 逻辑组合:
条件 && 指令 条件成功才执行命令
条件 || 指令 条件失败才执行命令
A && B AB任务都成功才算成功
A || B AB任务有一个成功才算成功
- 数字对比:
-eq(是否相等)-ne(是否不等)-gt(是否大于)-lt(是否小于)
-ge(是否大于等于) -le(是否小于等于)
- If分支:
单分支
If 条件测试;then
执行的指令
Fi
双分支
If 条件测试;then
执行的指令A
Else
执行的指令B
Fi
多分支
If 条件测试;then
执行的指令A
elif 条件测试;then
执行的指令B
elif 条件测试;then
执行的指令C
else
执行的指令
Fi
- While循环:
While循环可以根据条件决定循环的次数,也可以实现无限循环
While条件测试:根据条的结果决定是否要执行任务,条件测试成功便执行如果失败立刻结束循环
While
Do
任务
Done
- Case分支(功能类似于if,但编写时语句比if精简)
case 调用的变量名 in
模式1)
指令;;
模式2)
指令;;
*)
指令
Exac
函数:
函数可以利用一个名称存储公共的语句块,实现精简脚本方便后期调用的目的
函数名(){
指令
}
- 循环控制:
exit 可以终止循环,但脚本也终止
break 可以终止循环,但继续循环后的任务
continue 可以终止当前循环,继续下一次循环
- 字符串处理:
1.字符串的截取:${变量名称:截取位置:截取长度(步长)}【位置的坐标从0开始计算】
2.字符串替换:${变量名/旧/新}
3.字符串的删除:${变量名#要删除的内容} 掐头
${变量名%要删除的内容} 去尾
- 字符串处理:
例àa=abcdabcd
echo${a#*c} 从左往右删除到第一个c
echo${a##*c} 从左往右删除到最后一个c
echo${a%b*} 从右往左删除到第一个b
echo${a%%b*} 从右往左删除到最后一个b
ps:定义变量初值:${变量名:-初值}
- 正则表达式:
grep ^root user //找以root开头的行
grep bash$ user //找以bash结尾的行
grep ^$ user //找空行
grep -v ^$ user //显示除了空行的内容
grep "[root]" user //找r、o、t任意一个字符
grep "[rot]" user //效果同上
grep "[^rot]" user //显示r或o或t以外的内容
grep "[0123456789]" user //找所有数字
grep "[0-9]" user //效果同上
grep "[ -9]" user //显示数字以外内容
grep "[a-z]" user //找所有小写字母
grep "[A-Z]" user //找所有大写字母
grep "[a-Z]" user //找所有字母
grep "[^0-9a-Z]" user //找所有符号
grep "." user //找任意单个字符,文档中每个字符都可
以理解为任意字符
grep "r..t" user //找rt之间有2个任意字符的行
grep "r.t" user //找rt之间有1个任意字符的行,没有匹
配内容,就无输出
grep "*" user //错误用法,*号是匹配前一个字符任意
次,不能单独使用
grep "ro*t" user //找rt,中间的o有没有都行,有几次都行
grep ".*" user //找任意,包括空行 .与*的组合在正则中相当
于通配符的效果
grep "ro{1,2}t" user //找rt,中间的o可以有1~2个
grep "ro{2,6}t" user //找rt,中间的o可以有2~6个
grep "ro{1,}t" user //找rt,中间的o可以有1个以及1个以上
grep "ro{3}t" user //找rt,中间的o必须只有有3个
以上命令均可以加-E选项并且去掉所有,改成扩展正则的用法,比如
grep "ro{1,}t" user可以改成 grep -E "ro{1,}t" user
或者egrep "ro{1,}t" user
grep "ro{1,}t" user //使用基本正则找o出现1次以及1次以上
egrep "ro{1,}t" user //使用扩展正则,效果同上,比较精简
egrep "ro+t" user //使用扩展正则,效果同上,最精简
grep "roo{0,1}t" user //使用基本正则找第二个o出现0~1次
egrep "roo{0,1}t" user //使用扩展正则,效果同上,比较精简
egrep "roo?t" user //使用扩展正则,效果同上,最精简
egrep "(0:){2}" user //找连续的2个0: 小括号的作用是将字符组合为一个整体
egrep "root|bin" user //找有root或者bin的行
egrep "theb" abc.txt //在abc.txt文件中找the,右边不允许出
现数字、字母、下划线
egrep "btheb" abc.txt //两边都不允许出现数字、字母、下划线
egrep "<the>" abc.txt //效果同上
- sed流式编辑器:
可以对文档进行非交互式的增删改查,逐行处理。
1,前置指令 | sed 选项 条件 指令
2,sed 选项 条件 指令 被处理文档
选项 -n 屏蔽默认输出 -r 支持扩展正则 -i 修改源文件
指令 p 输出 d 删除 s 替换
条件 行号 /字符串/
sed -n 'p' user //输出所有行
sed -n '1p' user //输出第1行
sed -n '2p' user //输出第2行
sed -n '3p' user //输出第3行
sed -n '2,4p' user //输出2~4行
sed -n '2p;4p' user //输出第2行与第4行
sed -n '3,+1p' user //输出第3行以及后面1行
sed -n '/^root/p' user //输出以root开头的行
sed -n '/root/p' user //输出包含root的行
sed -nr '/^root|^bin/p' user //输出以root开头的行
或bin开头的行,|是扩展正则,需要r选项
sed -n '1!p' user //输出除了第1行的内容,!是取反
sed -n '$p' user //输出最后一行
sed -n '=' user //输出行号,如果是$=就是最后一行的行号
以上操作,如果去掉-n,在将p指令改成d指令就是删除
输出所有行 sed -n 'p' abc.txt
输出第4行 sed -n '4p' abc.txt
输出第4~7行 sed -n '4,7p' abc.txt
输出以bin开头的行 sed -n '/^bin/p' abc.txt
输出文件的总行数 sed -n '$=' abc.txt
删除第3~5行 sed '3,5d' abc.txt
删除所有包含xml的行 sed '/xml/d' abc.txt
删除不包含xml的行 sed '/xml/!d' abc.txt
删除以install开头的行 sed '/^install/d' abc.txt
删除文件的最后一行 sed '$d' abc.txt
删除所有空行 sed '/^$/d' abc.txt
替换
sed 's/2017/6666/' shu.txt //把所有行的第1个2017替换成6666
sed 's/2017/6666/2' shu.txt //把所有行的第2个2017替换成6666
sed '1s/2017/6666/' shu.txt //把第1行的第1个2017替换成6666
sed '3s/2017/6666/3' shu.txt //把第3行的第3个2017替换成6666
sed 's/2017/6666/g' shu.txt //所有行的所有个2017都替换
sed '/2024/s/2017/6666/g' shu.txt //找含有2024的行,将里面的
所有2017替换成6666
如果想把 /bin/bash 替换成 /sbin/sh 怎么操作?
sed -i '1s/bin/sbin/' user //传统方法可以一个一个换,先换一个
sed -i '1s/bash/sh/' user //再换一个
如果想一起一步替换:
sed 's//bin/bash//sbin/sh/' user //直接替换,报错
sed 's//bin/bash//sbin/sh/' user //使用转义符号可以成功,但不方便
sed 's!/bin/bash!/sbin/sh!' user //最佳方案,更改s的替换符
sed 's(/bin/bash(/sbin/sh(' user //替换符号可以用所有数字键上的
Ansible
批量管理服务器的工具,基于ssh进行管理,不需要安装任何软件,通过各种模块进行操作的。
模块
ansible-doc | 模块手册,相当于shell的man帮助 |
ping模块 | 检测网络连通性,ping模块没有参数 |
command模块 | 默认模块,远程执行命令 |
shell模块 | 用法和command一样,区别是shell模块是通过/bin/bash进行执行命令,可以执行任意命令,但不能执行交互式的命令,如:vim top |
yum模块 | 使用yum包管理器来管理软件包 |
service模块 | 用来管理服务的模块 |
copy模块 | 复制文件或目录到远程主机 |
lineinfile模块 | 替换整行,类似于sed的一种行编辑替换模块 |
replace模块 | 替换关键字 |
setup模块 | 主要用于获取主机信息 |
Playbook
剧本中可由一个或者多个模块构成,由YAML标记语言编写完成。
playbook是由一个或者多个play组成的列表,主要功能是将task定义好的角色并为一组进行统一管理,也就是通过task调用Ansible的模块将多个paly组织在一个playbook中。playbook本身由以下各部分组成:
Tasks | 任务,即调用模块完成的某操作 |
Varibles | 变量 |
Templates | 模版 |
Handlers | 处理器,当某条件,满足时,触发的操作 |
Roles | 角色 |
Hosts | 运行执行任务(task)的目标主机 |
Lnmp搭建
(两个代理服务器+四台web服务器+五台ceph服务器+2台数据库服务器)
Linux+nginx+mysql+php架构,Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
原理:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
Zabbix监控
zabbix 是一款开源的功能强大的分布式监控系统,一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
Zabbix由zabbix server(监控端)zabbix agent(被监控端),zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供远程服务器/网络状态的监视。
主要功能:cpu负荷、内存使用、磁盘使用、网络状态、端口监视、日志监视。
Zabbix组件
1.zabbix server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行
2.zabbix database:用户存储所有配置信息,以及存储由zabbix server收集到的数据
3.zabbix web:zabbix的interface接口,通常与Server运行在同一台主机上
4.zabbix agent:部署在被监控主机上,负责收集本地数据发往server端或proxy端
5.zabbix proxy:常用于分布监控环境中,代理Server收集部分被监控的监控数据并统一发往Server端(通常大于500台主机才需要使用)
Zabbix原理
zabbix agent安装在被监控的主机上,负责定期收集被监控端的本地各项数据,并发送至zabbix server端,zabbix server收到数据,将数据存储到数据库( zabbix database)中,用户基于zabbix web的可视化界面可以看到前端数据图像。当zabbix监控某个具体的项目时,该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL 命令、Reboot、Restart、Install等)。
基于LNMP环境搭建zabbix监控
一、安装LNMP环境、源码安装Zabbix、安装监控端主机,修改基本配置、初始化Zabbix监控Web页面、修改PHP配置文件,满足Zabbix需求、安装被监控端主机,修改基本配置
二、安装LAMP环境、安装zabbix、初始化数据库、修改zabbix配置文件、登录zabbix /重启所有服务
1. 在agent端编写监控命令或监控脚本
2. 修改agent端的zabbix-agent的配置文件,将监控命令或监控脚本加进去。
3. 在server端添加新监控项。
创建自定义key
语法格式:
UserParameter=key,command
UserParameter=key[*],<command> $1
key里的所有参数,都会传递给后面命令的位置变量
注意:被监控端修改配置文件,注意要允许自定义key并设置Include!
配置 -> 主机 -> "客户端主机名“那一行的监控项 -> 创建监控项
保存后,出现新的监控项。
在 监控中 -> 最新数据 中可以筛选查看创建的监控项和图像。
zabbix 什么语言写的
C语言和PHP语言
zabbix 都监控哪些项
Mysql数据库的增删改查,webCPU、内存、登录是否异常、监控访问信息等。
nginx
Nginx
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。
配置文件:conf/nginx.conf
conf 存放配置文件 sbin 存放主程序
html 存放网站页面 logs 存放日志
/usr/local/nginx/sbin/nginx //开启服务
sbin/nginx -s stop //关闭服务
sbin/nginx -s reload //重加载配置文件,服务必须是开启状态
Nginx的优化:
- 自定义报错页面 2、查看服务器状态信息3、优化Nginx并发量4、优化Nginx数据包头缓存5、浏览器本地缓存静态数据
Nginx:三大功能:反向代理 动静分离 负载均衡
动静分离:们部署了 nginx 和 tomcat 服务器,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在 tomcat 的webroot目录下面。当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源。如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。
正向代理:是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
反向代理:实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
平滑升级:在不停掉线上业务的情况下,进行nginx升级。
过程:1.在不停掉老进程的情况下,启动新进程;
2.老进程负载处理没有处理完的请求,但不接受新的请求;
3.新进程接受新的处理;
4.老进程处理完所有请求,关闭所有连接后停止。
优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;
缺点:7层代理仅支持http https mail协议应用面小,监控间检查仅通过端口无法使用url检查
Nginx模块
1、ngx_http_core_module #包括一些核心的http参数配置,对应Nginx的配置为HTTP区块部分
2.ngx_http_access_module #访问控制模块,用来控制网站用户对Nginx的访问
3.ngx_http_proxy_module #Proxy代理模块
4.ngx_http_upstream_module #负载均衡模块,可以实现网站的
Nginx优缺点
Nginx优点:
1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。
5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。
6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。
7、可作为中层反向代理使用。
8、可作为静态网页和图片服务器。
9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。
Nginx缺点:
1、适应范围较小,7层代理仅能支持http、https、Email协议。
2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
安装:
安装nginx所需依赖软件:vim(文本编辑器)、bash-completion(tab键安装包)、net-tools(网络相关安装包)、psmisc(支持killall命令的软件包)、gcc make(编译工具)、pcre-devel(可以让nginx支持正则表达式的安装包)、openssl-devel(让nginx支持安装加密网站)、unzip(解压缩工具)。
解压相关安装包后进入nginx目录然后进行编译。/config --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module
【--prefix 是指定安装路径;--user 是指定用户; --with-http_ssl_module 是安全网站模块】
Make && make install 完成后查看/usr/local/nginx 有四个目录【conf(存放配置文件) sbin(存放主程序) html(存放网站页面) logs(存放日志)】
Sbin/nginx(启动) 可以接上-V 查看所加的参数,和nginx版本
Sbin/nginx -s stop(关闭)
Sbin/nginx -s reload(重新加载配置)
然后curl 自己的IP 看见welcome to nginx 则成功!!
测试是否成功将一个.html文件放到html下 进行访问(curl 自己的IP/文件名)
若不显示 排错思路:
首先查看服务是否启动(netstat -untlp | grep nginx)
查看是否关闭防火墙
查看是否html下缺失文件
浏览器问题 可以按ctrl+f5 强制刷新
开启添加网站认证功能:
修改/usr/local/nginx/conf/nginx.conf的配置文件
40 auth_basic “password”;
auth_basic_user_file ”/usr/local/nginx/pass”; 这里书写可以进入网站的用户名和密码(不可以用vim创建)
修改完成后重新加载一下配置(sbin/nginx -s reload)
安装httpd-tools(可以创建加密密码)
安装完成后 输入 htpasswd -c pass Tom(创建加密文件以及Tom账户)然后输入两边密码【以后再追加账户无需加-c】
Nginx/conf/nginx.conf.default 为nginx的配置文件模板备份,需要恢复时可以使用其覆盖nginx.conf (覆盖完成后要重新加载配置文件 命令同上)
nginx虚拟web主机:
http{
Server{
Listen 80;监听端口号
Server_name www.a.com; 域名
Root html; 网站根目录
Index index.html; 网站默认页
}
}
在第17行到117行全是
新建虚拟主机可以在80行写(自带空格)
改完之后重新加载配置文件
配置域名解析 /etc/hosts 添加IP 以及域名
============================================配置加密网站:
对称算法 AES DES 单机数据加密 使用相同字符串加密和解密
非对称算法 RSA DSA 网络数据加密 利用公钥(锁)加密,私钥(钥匙)解密
信息摘要 md5 sha256 数据校验
例:
md5sum conf/nginx.conf
sha256sum conf/nginx.conf
批量去掉#号“:起始行,结束行s/#//”
启用加密网站:
在nginx配置文件HTTPs server
更改server name和root
准备私钥:openssl genrsa > conf/cert.key (openssl 是制造公钥私钥的工具)
准备公钥(证书):openssl req -x509 -key conf/cert.key > conf/cert.pem 回车后回答问题
Ps:以上为相对路径须在/usr/local/nginx
配置完成后启动服务并重新加载配置
使用curl -k http://域名 (-k 为忽略风险)
部署lnmp,实现动态网站解析
动态网站 在不同环境下,网站内容有可能发生变化
静态网站 在不同环境下,网站内容不会发生变化
LNMP环境:
linux,nginx,mysql,php
安装的软件:
mariadb,mariadb-server(数据库客户端环境),mariadb-devel(数据库开发环境依赖包),php(相当于解释器),php-mysql(php和与MySQL关联的软件包),php-fpm(帮助nginx解析php语言编写的动态网站),net-tool
systemctl start mariadb,php-fpm //开启各项服务
netstat -nutpl | grep mysql //检查数据库
netstat -nutpl | grep php-fpm //检查php-fpm服务
将准备的测试页面导入到nginx下的html目录中(test.php)
cd /usr/local/nginx
启动nginx服务(sbin/nginx)
修改nginx配置及文件,去掉65-71行的# 69行不要去掉,更改72行的后缀名为.conf
随后再次开启nginx (也可以sbin/nginx -s reload)若不起作用就kill all nginx
现在可以使用火狐访问http://IP地址/test.php
测试有数据库的动态网站
拷贝一个测试页面到nginx/html (mysql.php)
在浏览器打开http://IP地址/mysql.php
mysql //进入数据库
create user dc@localhost identified by’123’; //创建用户
quit //退出
刷新即可看见新建的用户
看见了以上两个页面 则说明nginx不但可以识别静态网站,也可以解析动态网站,这样的情况也可以记作nginx实现了动静分离。
fastCGI 快速公共网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php)
=======================================================
集群优化
- 调节权重定义集群主机任务的分配量
server 192.168.2.200:80 weight=2; //为性能较强的集群主机配置权重
,权重越大任务的分配量就越大
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web1~~
- 配置健康检查
server 192.168.2.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败
,则认为集群中的主机故障,之后等待30秒再次测试
sbin/nginx -s reload
测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.2.5
只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
待30秒
3,相同客户机访问相同服务器
upstream web {
ip_hash; //相同客户机访问相同服务器,让一个客户机访问集群时锁定
一个后台服务器,避免重复登陆的问题
server 192.168.2.100:80;
server 192.168.2.200:80;
}
sbin/nginx -s reload
curl 192.168.2.5 //重加载配置后访问2.5只会看到一个网站的页面
4,添加down标记
upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80 down; //down标记可以让集群主机暂时不参与集群活动
}
sbin/nginx -s reload
curl 192.168.2.5
nginx反向代理语法格式:
http{
upstream sergrp{ //定义源服务器
server 192.168.1.1:80;
server 192.168.1.2:80;
}
server{
listen 80;
server_name www.wxb.com; //web主机名
location/{
````````
proxy_pass http://sergrp; //调用服务组
}
}
}
nginx调度算法:
nginx目前调度算法支持的:
-轮询(默认):逐一循环调度
-weight:指定轮询几率
-ip_hash:根据客户端IP分配固定的后端服务器
服务器主机状态:
类型:
-down:表示当前server暂时不参与负载均衡
-max_fails:允许请求失败的次数(默认为一)
-fail_timeout:max_fails次失败后,暂停提供服务的时间
TCP/UDP调度模块
ngx_stream_core_module模块
使用—with-stream 开启该模块【nginx从1.9版本才开始支持该功能】
语法格式:
stream{
upstream backend{
sever backend1.example.com:12345 weight=5;
server 127.0.0.1:22 max_fails=3 fail_timeout=30s;
}
server{
listen 12345;
proxy_pass backend;
}
}
http{
``````
}
http常见错误代码列表
nginx状态页面
status模块:
--with-http_stub_status_module开启模块功能
可以查看nginx连接数等信息
状态信息:
常用压力测试工具:
nginx全局优化:
- 调整进程数量:
2.event模块优化:
HTTP模块优化
Openstack
它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
创建流程
创建虚拟机指令-----镜像---网络-----创建虚拟机--返回给用户
1.用户通过命令行或者horizon(控制面板服务)的方式登录openstack,凭借自己的证书给keystone(身份认证服务)进行验证。
2.keystone(身份认证服务)对用户的证书验证,验证通过后则会发布一个token令牌和用户所需服务的位置点给用户
3.用户得到位置点后,携带自己的令牌,向nova(计算服务)发起请求,请求创建虚拟机。
4.nova(计算服务)会拿着用户的token(令牌)向keystone(身份认证服务)进行认证,看是否允许用户进行这样的操作
5.keystone(身份认证服务)认证通过后,返回给nova(计算服务),nova(计算服务)即开始执行创建虚拟机的请求。首先需要镜像资源,nova(计算服务)带着token(令牌)和所需要的镜像名向glance(镜像服务)提出镜像资源的请求。
6.glance(镜像服务)会拿着token(令牌)去向keystone(身份认证服务)进行认证,看是否允许提供镜像服务。Keystone(身份认证服务)认证成功后,返回给glance(镜像服务).glance(镜像服务)向nova(计算服务)提供镜像服务
7.创建虚拟机还需要网络服务,nova(镜像服务)携带token(令牌)向neutron(网络服务)发送网络服务的请求
8.neutron(网络服务)拿着nova(计算服务)给的token(令牌)向keystone(身份认证服务)进行认证,看看是否允许向其提供网络服务。Keystone(身份认证服务)认证成功后,返回给nuetron(网络服务).nuetron(网络服务)则给nova(计算服务)提供网络规划服务。
9.nova(计算服务)获取了镜像和网络之后,开始创建虚拟机。通过hypervisior(管理程序)可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求
七大组件
Openstack优势
控制性:完全开源的平台,提供API接口,方便与第三方技术集成;
兼容性:OpenStack兼容其他公有云,方便用户进行数据迁移;
可扩展性:模块化设计,可以通过横向扩展,增加节点、添加资源;
灵活性:根据自己的需要建立相应基础设施、增加集群规模;
行业标准:众多IT领军企业已经加入到OpenStack项目。
Mysql基本
默认端口 tcp 3306
初始密码保存在 /var/log/mysql.log中
主配置文件 /etc/my.cnf
数据库目录 /var/lib/mysql
服务的进程名/端口 mysqld/3306
进程所有者和所属组 mysql/mysql
错误日志文件名 /var/log/mysqld.log
库管理
创建库 | create database (if not exists) 库名 character set (字符集) |
删库 | drop database 库名 |
查看库 | show databases |
建表三范式
第一范式:每列不可再分
第二范式:符合第一范式,同时非主属性完全依赖主键
第三范式:每列与主键直接相关,而不是间接相关
表管理
建表 | Create table 库名.表名(表头名 数据类型 长度 约束类型) | |||
查看表结构 | desc 库名.表名 | |||
删除表结构 | drop 库名.学生信息表 | |||
修改表结构 | alter table 库.表 操作命令 | Add | 字段名 类型加 first/after | |
Modify | 修改字段数据类型,位置 | |||
Change | 修改字段名,也可以同时修改字段类型 | |||
Rename | 修改表名 | |||
Drop | 删除字段,删除多个字段使用,分割drop命令 | |||
仅复制表结构 | Create table 库.表 select 列名 from 库.表 like 库.表 | |||
复制表结构及数据 | Create table 库.表 select 列名 from 库.表 where | |||
增删改查
增 | insert into |
删 | delete from |
改 | uptate |
查 | select * from |
数据的导入导出
存放数据的目录必须放到检索目录中。
查看默认检索目录:show variables like "secure_file_priv";
修改检索目录: vim /etc/my.cnf secure_file_priv=/myload
导入 | load data infile "/检索目录/文件名" into table 库名.表名 fields terminated by "文件中列的间隔符号" lines terminated by "n"; |
导出 | select 字段名列表 from 库.表 where 条件 into outfile "/检索命令名/文件名"; |
连接查询
内连接
格式:SELECT 字段列表
FROM 表1 别名
INNER JOIN 表2 别名
ON 连接条件
[WHERE 筛选条件]
[GROUP BY 分组]
[HAVING 分组后筛选]
[ORDER BY 排序列表]
等值连接:使用相等判断做连接条件
非等值连接:连接条件不是相等判断 比如 between ---and
自连接:同一张表做查询
外连接
左外连接(left join):左边表的记录全都显示出来 右边的表只显示与条件匹配记录,右边表比左边表少的记录使用NULL匹配
右外连接(right join):右边表的记录全都显示出来 左边的表只显示与条件匹配记录,左表比右边表少的记录使用NULL 匹配
外连接的应用场景:1.比较2个表里记录的不同
2.者哪些数据当前表有而另一张表没有
联合查询
1.要求查询时,多个select语句的检索到的字段数量必须一致
2.每一条记录的各字段类型和顺序最好是一致的
3.UNION关键字默认去重,可以使用UNION ALL包含重复项
语法格式:
语法格式 1 (select语句 ) union (select语句);
语法格式 2 (select语句 ) union all (select语句);
子查询:嵌套查询,子查询可以出现在select之后,from之后,where或者Having之后
视图
概念:视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
优点:
用户无需关心视图中的数据如何查询获得的
视图中的数据已经是过滤好的符合条件的结果集
安全:用户只能看到视图中的数据
数据独立 一旦视图结构确定,可以屏蔽表结构对用户的影响
创建视图
create view 库.视图名称(字段名列表) as SQL查询;
查看视图是从哪个基表获取的?
show create view viewdb.v1 G
数据备份
数据备份方式:
物理备份:直接拷贝进数据库目录
逻辑备份:使用mysql服务提供的命令安装
数据备份策略:
完全备份:备份所有数据
增量备份:备份前一次备份后新产生的数据(和上一次做对比)
差异备份:备份完全备份后新产生的数据 (和完全备份作比较)
物理备份优缺点
优点:备份恢复简单
缺点:1.备份和恢复数据均需要停止数据库服务(若不停止服务也可以备份,但会导致备份的不完全)
2.仅仅适用于同操作系统恢复数据
3.备份数据量大 备份时间长 浪费存储空间
适合:线下服务器的数据库备份 数据量小的备份
逻辑备份
备份:mysqldump -uroot -p密码 库名 > /目录名/备份文件名.sql
库名 表名 #仅备份库下一张的所有记录
库名 表名1 表名2 #一起备份库下2张表的所有记录
-B 库名 #仅备份1个库里的所有表
-B 库名1 库名2 #一起备份2个库里的所有表
-A 或 --all-databases #备份服务器上的所有库所有表
恢复: mysql -uroot -p密码 库名 < /目录名/备份文件名.sql
逻辑备份(mysqldump)优缺点:
优点:不停服务
缺点:1.使用备份文件恢复数据时,会锁表
2.使用完全备份文件恢复数据 只能把数据恢复到 备份时刻的状态,备份后再多出来的数据无法恢复
binlog日志介绍
实现对数据的实时备份(默认存在/var/lib/mysql/xxx)
二进制日志文件,记录了除查询之外的sql命令;可用于数据的备份和恢复;配置mysql主从同步的必要条件;默认没启用,手动启用
启用binlog日志:vim /etc/my.cnf
[mysqld]
server_id = 50
log_bin=/A/B binlog日志存放目录
重启服务后,查看binlog日志信息
Show master status;-------------->文件名和偏移量
逻辑备份
mysqldump -uroot -p123456 --flush-logs -B tarena > /bakdir/tarena.sql
恢复
全部恢复:mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
有条件恢复:mysqlbinlog 选项 /目录名/日志文件名 | mysql -uroot -p密码
默认日志格式时row,看不到具体sql命令,修改日志格式为mixed
备份软件使用第三方软件percona
提供的备份命令innobackupex对数据做备份和恢复
特点:热备不锁表,适合生产环境下备份;恢复数据时,必须清空数据库目录
-
- 完全备份与恢复
备份:innobackupex -uroot -p密码 /备份目录名 --no-timestamp(不用系统日期做存放备份文件的目录名)
恢复数据步骤: 1) 停止数据库服务
2) 清空数据库目录
3) 准备恢复数据
innobackupex --apply-log /备份目录名
- 拷贝数据
innobackupex --copy-back /备份目录名
5) 修改数据库目录的所有者者组用户为mysql
6) 启动数据库服务
7) 管理员root用户登录服务查看数据
mysql主从同步
主从同步原理:(默认是异步复制)
目的:为了实现数据库的自动同步
1. master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
2. slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
3. 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
也就是说:
从库会生成两个线程,一个I/O线程,一个SQL线程;
I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
主库会生成一个log dump线程,用来给从库I/O线程传binlog。
复制模式
异步复制:主服务器执行完一次事务,立即将结果返给客户端,不关心从服务器是否已经同步数据
半同步复制:介于异步复制和全同步复制之间,主服务器在执行完一次事务后,等待至少一台从服务器同步数据完成,才将结果返回给客户端。
如何修改半同步?
vim /etc/my.cnf
[mysqld]
安装模块plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
#启用模块
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1
主从同步配置?
第一步 配置master服务器
具体步骤如下:
1) 启用binlog日志文件
2)用户授权
3)查看日志信息
第二步 配置slave服务器
具体步骤如下:
1) 指定server_id 并重启mysqld服务
2)确保数据一致(如果一致的此步骤可以省略)
3)指定主服务器信息
4)启动slave进程
5)查看状态 (IO线程和 SQL线程必须同时是YES 状态)
maxscale读写分离
概念:把用户查询数据的select请求和写请求,分别发给不同的数据库服务器处理。减去了数据库的访问压力,提高了硬件的利用率
软件:myscale中间件
mysacle如何实现数据的读写分离?
1 接收到客户连接数据库服务的请求后
2 根据客户端访问数据的命令类型,把请求给不同的数据库服务器处理
3 把查询请求select 给监视到的slave角色的数据库服务器处理
4 把写请求insert 给监视到的master角色的数据库服务器处理
配置文件:/etc/maxscale.cnf
添加主/从服务器的ip
添加监控用户 mysqla:监视数据库服务的运行状态和数据库服务器的主从角色
添加路由用户mysqlb: 客户端连接数据库服务器的用户
mycat分库分表
概念:将存放在一台数据库服务器中的数据,按照特定方式进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果。
水平分割(横向切分):
按照表中指定字段的分片规则,将每行表记录按行切分,分散存储到多个数据库中。
垂直切分(纵向切分):
将单个数据库的多个表按业务类型分类,分散存储到不同数据库。
mycat支持10种分片规则:常用枚举法、固定分片、范围约定、求模法
枚举分片规则 (sharding-by-intfile) : 分片字段的值必须在分片规则配置文件定义的值里 选择。设定
求模分片规则 (mod-long): 根据分片字段值与指定数字的取余计算结果存储数据
使用mod-long分片规则的表,必须有分片字段表头名必须叫id%设定值
分片服务器的工作过程?
当mycat收到一个SQL命令时解析SQL命令涉及到的表,然后看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获得分片列表,然后将SQL命令发往对应的数据库服务器去执行,最后收集和处理所有分片结果数据,并返回到客户端
配置文件?
-server.xml:设置连接账号及逻辑库
-schema.xml:配置数据分片存储的表
-rule.xml: 分片规则
-其他文件: 分片规则配置文件
主从/读写分离/分库分表优缺点?
主从结构存储数据
优点:实现了的数据的自动备份
缺点:主服务器和从服务器 都有单点故障的问题
数据读写分离
优点:减轻单台服务器的访问压力,同时实现数据的备份
缺点:读写分离服务器 主数据库 从数据库 都存在单点故障问题
分库分表
优点:解决是的大量并发存储数据的 存储压力问题和 存储空间问题
缺点:分片存储服务器有单点故障问题,没有数据备份的功能
MHA搭建数据库高可用
概念:是一套优秀的实现mysql高可用的解决方案,数据库的自动切换操作能做到在0~30秒之内完成,确保在故障切换过程中最大限度保证数据的一致性,达到真正的高可用
流程: 由Manager定时探测集群中的master节点
当master故障时,Manager自动将拥有最新数据的slave提升为新的master
环境: 1台manager管理主机,一个主多从架构
角色:MHA manager(管理节点)
MHA node(数据节点)
缺点:1.必须绑定vip地址,宕机的主服务器需要手动添加到及群里,还需要手动同步宕机期间的数据
2.管理服务发现主服务器宕机后,会调用故障切换脚本,把vip地址部署在新的主数据库服务器上。管理服务会自动停止,需要手动启动管理服务器,才能监视新的主数据服务器。
3.故障切换期间会有数据丢失情况
PXC高可用集群(集群端口4567)
非主从
特点:1.数据强一致性、无同步延迟(全量同步,增量同步)
2.没有主从切换操作,无需使用虚拟ip
3.支持innodb存储引擎
4.多线程复制,部署简单,支持节点自动加入,无需手动拷贝数据
5.建表时 必须要有主键
场景:3台服务器形成数据库集群,只要有一台写入数据,其他两台机器会同步数据
以71为例:
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf --server_id=71
vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 集群节点ip,授权用户全量同步
宕机:任何一台数据库服务器宕机都不影响用户存取数据;当服务器恢复后,将自动同步宕机期间的数据
存储引擎
存储引擎的修改
vim /etc/my.cnf
[mysqld]
default-storage-engine=myisam
innodb与myisam的区别
引擎名 | 表结构 | 事务安全 | 锁颗粒 | 外键 |
myisam | 表名.frm: 存储表头信息 表名.myi:存储表索引信息 表明.myd:存储表里的数据 | 不支持 | 表级锁 | 不支持 |
innodb | 表名.frm: 存储表头信息 表名.ibd:存储表的1索引信息+表的数据信息 | 支持 | 行级锁 | 支持 |
索引
优点与缺点?
优点: 1:可以提高数据检索的效率,降低数据库的IO成本
2:通过索引列对数据进行排序,降低数据排序成本,降低了cpu的消耗
缺点: 1.索引会占据磁盘空间
2.索引虽然会提高查询效率,但是会降低更新表的效率
索引类型:
主键索引,不允许有空值,唯一
普通索引:没限制,允许在定义索引的列插入重复值和空值
唯一索引: 索引值唯一,允许为空
全文索引
空间索引
Redis
概念:高性能分布式内存数据库,支持数据持久化,支持master-salve模式数据备份
工作流程:
先从缓存读取,如果没有,从数据库读取
端口:6379
主配置文件: /etc/redis/6379.conf
日志文件: /var/log/redis_6379.log
数据库目录: /var/lib/redis/6379
用途: 存储热点数据,加快数据的存取速度
- 内存清除策略
策略分类 | 说明 | 名称 | 删除范围 |
Lru | 删除最近最少使用 | Volatile-lru Allkeys-lru | 针对设置了ttl的key 针对所有的key |
Lfu | 删除使用频率最少的 | Volatile-lfu Allkeys-lfu | 针对设置了ttl的key 针对所有的key |
Random | 随机删除 | Volatile-random Allkey-random | 针对设置了ttl的key 针对所有的key |
Volatile-ttl | 删除快要过期的 | ||
noeviction | 不删除 |
内存优化设置?
Maxmemory : 最大内存
Maxmemory-policy:定义使用策略
Maxmemory-samples:选取key模板的个数
Redis集群
集群存储数据的工作原理?
存储数据和查询数据时 调用集群算法 集群算法会计算出1个数字, 数字
在哪个主服务占用的范围内 ,就连接对应的主服务器存储数据或查询数据。
主从复制结构模式?
第1步:slave向master发送sync命令
第2步:master启动后台存盘进程,并收集所有修改数据命令
第3步:master完成后台存盘后,传送整个数据文件到slave
第4步:slave接收数据文件,加载到内存中完成首次完全同步,后续有新数据产生时,master继续收集数据修改命令依次传给slave,完成同步
哨兵服务
概念:
监视主从复制结构中主服务器,发现主服务器无法连接后,会把对应的从升级为主数据库服务器, 继续监视新的主数据库服务器,坏掉的主数据库服务器恢复后,会自动做当前主服务器的从主机。
持久化:
RDB文件
指定就是数据库目录下的 dump.rdb 文件
redis运行服务后,会根据配置文件的设置的存盘频率 把内存里的数据复制到数据库目录下的dump.rdb文件里(覆盖保存)
AOF文件
redis服务AOF文件(与mysql服务的binlog日志文件的功能相同)
是一个文件,记录连接redis服务后执行的写操作命令并且是以追加的方式记录写操作命令
默认没有开启,使用需要人为启用
RDB方式的优/缺点
优点:
1.高性能的持久化实现 —— 创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;
2.过程中主进程不做任何IO操作比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
缺点:意外宕机时,丢失最后一次持久化的所有数据
AOF文件的优缺点?
AOF优点
可以灵活设置持久化方式
出现意外宕机时,仅可能丢失1秒的数据
AOF缺点
持久化文件的体积通常会大于RDB方式
执行fsync策略时的速度可比RDB方式慢
数据类型
String、List、Hash、集合类型
什么是 Kubernetes?
Kubernetes 是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。作为 Google 的创意之作,它提供了出色的社区,并与所有云提供商合作。因此,我们可以说 Kubernetes 不是一个容器化平台,而是一个多容器管理解决方案
Kubernetes 与 Docker 有什么关系?
众所周知,Docker 提供容器的生命周期管理,Docker 镜像构建运行时容器。但是,由于这 些单独的容器必须通信,因此使用 Kubernetes。因此,我们说 Docker 构建容器,这些容 器通过 Kubernetes 相互通信。因此,可以使用 Kubernetes 手动关联和编排在多个主机上 运行的容器。
最后
以上就是雪白茉莉为你收集整理的linux小知识总结Zabbix监控的全部内容,希望文章能够帮你解决linux小知识总结Zabbix监控所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复