Linux云计算个人学习总结(二)
高级文件系统
一、RSYNC概述
1、作用:快速的文件复制工具(支持本地和远程),以及删除、查看等基本功能。
2、特点:支持实时(inotify、sersync)的增量备份工具
3、模式:
检查模式:按照指定规则检查需要被同步的文件列表
同步模式:确定文件列表后,同步过程中需要进行的额外工作
4、工作方式:
本地文件系统同步
rsync [OPTION...] SRC... [DEST]
本地主机使用远程SHELL和远程主机同步(基于ssh)
Pull(下载): rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push(上传): rsync [OPTION...] SRC... [USER@]HOST:DEST
本地主机使用网络套接字连接远程主机同步(基于rsync)
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
注意事项:
第一个路径参数是源文件路径(可以同时指定多个路径),定义同步的基准
路径的格式可以是本地,也可以是远端主机
若主机地址和路径之间使用单冒号分割,表示使用远程SHELL的通信方式
若主机地址和路径之间使用双冒号分割,表示使用rsync daemon的通信方式
若只有一个路径,则表示查看,类似ls的效果
目录后带斜线(目录内容,ls -l)与不带斜线(目录本身,ls -d)效果完全不一样
5、常用选项:
v 显示rsync过程中的详细信息
vvvv更详细的信息
P 显示文件传输进度
n dry-run,测试模式
r 递归
t 保留mtime属性
o 保留属主属性
g 保留属组属性
p 保留权限(不包括特殊权限)
l 保留链接属性(仅复制链接文件本身)
D 保留文件的类型(设备文件、特殊文件等)
a 归档,相当于rtopgDl
z 压缩
R 使用相对路径
W 使用完整备份(默认是增量)
--max-size 限制传输的最大文件大小
--min-size 限制传输的最小文件大小
--exclude 排除指定的文件
--delete 以SRC为基准,对DST进行同步。
--backup 对DST已存在的文件进行备份,默认使用~做后缀名
--existing 只更新DST已存在的文件
--ignore-existing 只更新DST不存在的文件
--remove-source-files 删除SRC已经成功传输的文件
6、实例:
7、规则
--exclude 设置排除规则
--exclude-from 从文件中读取排除项
filter规则:
exclude:排除规则
include:包含规则
show:显示规则
protect:保护规则
hide:隐藏规则
risk:取消保护规则
注意事项:
路径:相对路径和绝对路径
尾斜线:启用和不启用
-i 输出文件的过程及路径
> 代表传输到本地主机(接收)
< 代表传输到远程主机(发送)
f 代表普通文件,其它值如d、L、D、S等
T 修改时间不同
8、delete
二、构建基于RSYNC的同步服务器
1、配置文件
/etc/rsyncd.conf
2、启动方式
rsync --daemon
3、默认端口
873
4、命令格式
Pull: (下载)
rsync [OPTION…] [USER@]HOST::SRC… [DEST]
rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
Push: (上传)
rsync [OPTION…] SRC… [USER@]HOST::DEST
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
5、配置文件选项:
uid = nobody rsync的运行用户,默认nobody
gid = nobody rsync的运行组,默认nobody
use chroot = yes 传输开始前,将rsync禁锢在指定目录下运行
max connections = 4 最大并发连接数量
pid file = /var/run/rsyncd.pid PID文件的路径及名称
exclude = lost+found/ 排除lost+found/目录
timeout = 900 客户端连接的超时时间
dont compress 对特定文件类型,不进行压缩处理
[ftp] 模块名称
path = /home/ftp 模块对应的目录路径
comment = ftp export area 目录说明
6:实验
基于rsync daemon的同步服务器
两台虚拟机:1台1.1客户端 1台1.254 服务器
服务器:
[root@zhao ~]# vim /etc/rsyncd.conf 主配置文件 cenots7有 之前的需要创建
port=888 非默认的端口
uid = rsync 用户
gid = rsync 组
use chroot = yes 禁锢在目录下,不能随边访问
max connections = 4 最大的连接资源
pid file = /var/run/rsyncd.pid 存放进程文件的目录
log file = /var/log/rsync.log 日志文件存放的目录
motd file = /var/rsync/rsync.motd 提示信息存放的目录(可以不加)
exclude = lost+found/ 错误文件目录
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 不需要压缩
fake super =yes 如果有特殊要求就以root用户来
[private] 共享名
path = /var/pri 共享名的目录路径
comment = read/write 简单说明(读写)
read only = false 权限(yes只读)读写访问
auth users = rsync_users 访问添加用户(只要不是纯数字就可以)
secrets file = /etc/rsyncd.passwd 密码文件的位置
[public] 公共目录
path = /var/pub 目录路径
comment = read 简单说明只读
read only = yes 权限只读
[root@zhao ~]# mkdir /var/rsyncd 创建目录
[root@zhao ~]# vim /var/rsyncd/rsync.motd 创建提示文件
welcome to RSYNC server: 随便写提示信息
[private]:read/write 读写访问
[public]:only read 只读访问
[root@zhao ~]# mkdir /var/{pri,pub} 创建两个目录
[root@zhao ~]# useradd -s /sbin/nologin -r rsync 创建系统用户
[root@zhao ~]# chown -R rsync:rsync /var/{pri,pub} 修改权限
[root@zhao ~]# vim /etc/rsyncd.passwd 默认没有自己创建(只认第一行)
必须加用户名
[root@zhao ~]# chmod 600 /etc/rsyncd.passwd 必须修改成管理员才能登陆
root@zhao ~]# netstat -anpt 查看没有启用
[root@zhao ~]# systemctl start rsyncd.service 开启rsyncd
root@zhao ~]# netstat -anpt 查看启用
root@zhao pri]# vim pri.txt 创建测试用的文件
ot@zhao pub]# vim pub.txt 创建测试用的文件
客户端:
Pull(下载):
[root@localhost ~]# rsync --list-only --port 888 rsync_users@192.168.1.254::private 需要密码
[root@localhost ~]# rsync --list-only --port 888 rsync_users@192.168.1.254::public 不需要密码
[root@localhost ~]# rsync -avz --port 888 rsync_users@192.168.1.254::private/pri.txt /root下载
[root@localhost ~]# rsync -avz rsync://rsync_users@192.168.1.254:888/private/pri.txt /root 下载
如果不想输入密码(免密码验证)
[root@localhost ~]# echo “123456” >>/tmp/rsync_passwd 创建一个密码链接
[root@localhost ~]# chmod 600 /tmp/rsync_passwd 修改权限
[root@localhost ~]# rsync -avz rsync://rsync_users@192.168.1.254:888/private/pri.txt /root --password-file=/tmp/rsync_passwd 不需要密码下载
Push(上传):
[root@localhost ~]# vim web01.txt 创建测试文件
[root@localhost ~]# rsync -avz --port 888 web01.txt rsync_users@192.168.1.254::private --password-file=/tmp/rsync_passwd
去服务器端查看有这个文件
#rsync-avz web01.txt rsync://rsync_users@192.168.1.254:888/private/ --password-file=/tmp/rsync_passwd
三、构建基于SSH的同步服务器
1、语法结构(本地主机使用远程SHELL和远程主机同步(基于ssh))
Pull(下载): rsync [OPTION…] [USER@]HOST:SRC… [DEST]
Push(上传): rsync [OPTION…] SRC… [USER@]HOST:DEST
2、实验
基于ssh的同步服务器:
环境跟上面一样
服务器:
[root@zhao ~]# mkdir /var/ssh 创建一个同步目录
[root@zhao ~]# useradd test 创建一个用户
root@zhao ~]# passwd test test密码
[root@zhao ssh]# vim ssh.txt 测试文件
客户端:
[root@localhost ~]# rsync -avz --list-only test@192.168.1.254:/var/ssh 有哪些
[root@localhost ~]# rsync -avz test@192.168.1.254:/var/ssh/ssh.txt /root 下载
单独给test目录在ssh目录里权限:(服务器)
[root@zhao var]# setfacl -m u:test:rwx ssh/
[root@localhost ~]# rsync -avz web01.txt test@192.168.1.254:/var/ssh 上传
服务器查看有
免密码验证:
[root@localhost ~]# ssh-keygen -t rsa 生成密钥对
[root@localhost ~]# ssh-copy-id test@192.168.1.254
四、通过远程SSH连接rsync daemon(二和三的混用)
服务器端rsync daemon没有启动的情况下,依然可以访问其部分配置
1、语法结构
rsync [options] --rsh=”ssh -l ssh_name” anth_user@host::src
rsync [options] -e “ssh -l ssh_user” anth_user@host::rsc
rsync [options] -e “ssh -l ssh_user” rsync://anth_user@host/src
2、实验
客户端验证:
服务器:
[root@zhao var]# systemctl stop rsyncd.service 关闭rsync
[root@zhao var]# netstat -anpt 查看端口没有888
客户端:
[root@localhost ~]# rm -rf pri.txt 删除
[root@localhost ~]# rsync -avz --rsh=“ssh -l root” rsync_users@192.168.1.254::private/pri.txt /root 第一次输入root密码(zbb827.) 第二次输入程序用户密码(123456)
免密码验证:
[root@localhost ~]# ssh-keygen -t rsa 生成密钥对
[root@localhost ~]# ssh-copy-id root@192.168.1.254 公钥信息
[root@localhost ~]# rsync -avz --rsh=“ssh -l root” rsync_users@192.168.1.254::private/pri.txt /root 只需输入程序用户密码
[root@localhost ~]# rsync -avz --rsh=“ssh -l root” rsync_users@192.168.1.254::private/pri.txt /root --password-file=/tmp/rsync_passwd 不需要输入密码
五、实时数据同步:
1、工具
inotify、 sersync、 lsyncd
rsync+inotify
2、inotify
inotify-tools
inotifywait:检查文件变化,实现监控功能
inotifywaych:收集统计信息
3、内核参数
fs.inotify.max_queued_events = 16384
event可排队的最大数量
fs.inotify.max_user_instances = 128
用户可创建的instances(实列)的最大数量
fs.inotify.max_user_watches = 8192
每个instances中可以监控的最大文件数
修改:echo “数值” > /proc/sys/fs/inotify/类型(man_user_watches)
4、inotify常见选项
m 持久监控
r 递归(有可能需要调整最大文件数)
q 仅输出基本信息
e 指定监控对象
–exclude 排除指定的监控对象
–timefmt 输出的时间格式“%Y%m%d%H%M%S”
–format 自定义输出格式
%w 输出监控路径
%f 输出产生事见的具体文件名
%e 输出事见名称
%T 输出时间
5、Inotifywait 监控对象
access 文件被访问
modify 文件被写入
attrib 元数据被修改
close_write 打开的文件被关闭,为写入打开文件
close_nowrite 打开的文件被关闭,为读取打开文件
close close_write+close_nowrite
open 文件被打开
moved to 向监控对象移入文件
moved from 将监控对象中的文件移出
create 创建文件
delete 删除文件
umount 挂载在监控目录上的文件系统被umount
isdir 监控目录相关操作
常见监控对象:
close_write、moved to、movedfrom、delete、isdir
6、实验
注意事项:
1、尽可能同步目录,而不是产生事件的单个文件
2、尽量减少批量操作,多次触发rsync,影响服务器性能
3、对不同事件,可单独设计inotify+rsync的脚本
4、rsync默认是单向同步
实验:添加一台虚拟机
Ip1.3安装inotify工具:(eject换光盘)
[root@zhao ~]# cd /run/media/root/20130806_063316/ 进入光盘
20130806_063316]# cp * /usr/src/ 复制到
]# cd /usr/src/ 进到目录
换成系统盘
重新挂载光盘
如果有这三个文件说明支持
yum -y install gcc*
[root@zhao src]# tar -zxf inotify-tools-3.14.tar.gz 解压
[root@zhao inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify 进入编译
make && make install 安装
默认有两个工具
echo
P
A
T
H
查看环境变量
P
A
T
H
=
PATH 查看环境变量 PATH=
PATH查看环境变量PATH=PATH:/usr/local/inotify/bin/ 把这个路径添加到变量里
sysctl -a | grep inotify 查看与inotify相关的数据值
简单的全部监控(打开两个终端):
1终端root@zhao ~]# mkdir test 创建监控目录
[root@zhao ~]# inotifywait -mrq test 监控全部
2终端:输入随便命令
利用脚本监控
vim 1.sh
inotifywait -mrq -e delete,close_write,moved_to,moved_from,isdir /root/test | while read line 监控test目录里的变化 (类型) 事件分析
do
if echo KaTeX parse error: Expected 'EOF', got '&' at position 24: …ep -i "delete" &̲>//dev/null 如果是…{line}" >> /root/delete.log 所有跟删除有关的
else
rsync -az /root/test root@192.168.1.100:/tmp 如果不是删除就放到
fi
done
建立密钥对:
root@zhao ~]# ssh-keygen -t rsa
[root@zhao ~]# ssh-copy-id 192.168.1.100
测试:
#设置两个变量 dir 监控的目录 dst 监控的ip
#inotifywait 对删除,打开并写入,移动文件,监控目录等操作进行监控,除了swp文件不监控 对监控时间,格式加以说明。 监控的目录 循环里面的值line
如果执行的操作是delete|moved_from 则扔进垃圾站
如果是其他的值 值+字符串和date的时间格式 追加到/tmp/www.log目录中记录
#同步 delete 单方向的一致同步除了SWP和SWX两种文件外 将$dir 中的文件 通过ssh的方式发送给另一台服务器
#如果上一条命令成功最显示 send成功不成功就显示 失败 并输入到指定文件中
一、存储概述
1、存储架构:
封闭性系统的存储:设计之初就明确用途和使用场景
开放性系统的存储:设计之初无法明确用途和使用场景
2、开放系统的存储类型:
内置存储
外挂存储
3、外挂存储:
DAS:直连式存储
特点:
安装简单,性价比高
通常不具备灾备能力
不适合对性能要求高的场景
NAS:网络附加存储
特点:
提供文件级的网络存储
支持多计算机
即插即用
samba、NFS、CIFS
SAN:存储区域网络
二、ISCSI
1、定义:
互联网小型计算机系统接口
2、优势:
使用SAN网络进行存储优化
使用软件配置进行存储分配,无需额外物理设备
简化数据复制、迁移和灾备
3、名词:
启动器(initiator):iscsi客户端
目标(target):iscsi服务器端存储资源
ACL:访问控制列表
发现(discovery):查询服务器端已列出可配置的目标
IQN:iscsi的唯一名称,用于命名和识别启动器和目标
LUN:逻辑单元,带编号的块设备,连接目标时使用
一个目标仅提供给客户端一个LUN
一个或多个LUN连接到一个目标
三、构建ISCSI网络存储服务器
两台虚拟机:1存储资源:两块磁盘1.1 2客户机:1.2
存储资源:
[root@localhost ~]# fdisk /dev/sdb 创建5个分区(4个)
t ~]# partprobe /dev/sdb 格式化
oot@localhost ~]# lsblk 查看磁盘
mdadm -C /dev/md0 --auto=yes -n 3 -l 5 -x 1 /dev/sdb{1,2,3,5} 创建raid5
mdadm -D /dev/md0 查看是否创建成功
yum -y install targetcli 服务器端的工具
systemctl start target 开启这个工具
targetcli 进入命令页面
/> cd backstores/block 进入
/backstores/block> create disk0 /dev/md0 创建disk0
/> iscsi/ 进入目录
/iscsi> create 生成iqn
创建一个逻辑单元
acls访问规则
退出一定要用exit
客户端:
[root@zhao ~]# rpm -q iscsi-initiator-utils 默认安装
服务打开
[root@zhao ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.e7d63749b7b6
有了
四、cobbler网络装机
Cobbler(一键装机)
一,部署环境。
root@localhost ks_mirror]# vim /etc/cobbler/pxe/pxedefault.template 定制cobbler引导菜单默认
1,安装copbbler和必要的组件(通过镜像文件安装)
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
root@localhost yum.repos.d]# yum -y install epel-release
root@localhost yum.repos.d]# yum -y install cobbler 用来快速建立linux网络安装环
root@localhost yum.repos.d]# yum -y install pykickstart 实现无人值守安装
[root@localhost yum.repos.d]# yum -y install cobbler-web debmirror 网页页面管理
root@localhost yum.repos.d]# yum -y install dhcp 给空白主机自动分配IP地址
[root@localhost yum.repos.d]# yum -y install httpd 作为控制台程序运行
Xinetd 提供访问控制、加强日志和资源管理功能
Tftp 提供引导镜像文件下载
rsync——远程同步管理,实现数据同步
2,修改cobbler配置文件
[root@zhao yum.repos.d]# systemctl start httpd
oot@localhost yum.repos.d]# systemctl start cobblerd.service
[root@localhost yum.repos.d]# cobbler check ##cobbler检测需要优化项
[root@localhost yum.repos.d]# vim /etc/cobbler/settings
next_server: 192.168.1.1 本地服务器地址
server: 192.168.1.1
manage_dhcp: 1 dhcp
[root@localhost yum.repos.d]# vim /etc/xinetd.d/tftp 进行tftp优化
disable = no no|yes
[root@localhost yum.repos.d]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/cobbler/loaders/
[root@localhost yum.repos.d]# systemctl start rsyncd 优化开启远程同步管理服务器
root@localhost yum.repos.d]# vim /etc/debmirror.conf
#@dists=“sid”; 注释
#@arches=“i386”;
[root@localhost yum.repos.d]# openssl passwd -1 -salt ‘123456’ ‘123456’ 优化设置管理员密码
$1
123456
123456
123456wOSEtcyiP2N/IfIl15W6Z0 复制这段加密过后的密文
[root@localhost yum.repos.d]# vim /etc/cobbler/settings 修改配置文件,将密文添加到此处
[root@localhost yum.repos.d]# systemctl start rsyncd
root@localhost yum.repos.d]# systemctl restart cobblerd.service
3,[root@localhost yum.repos.d]# vim /etc/cobbler/dhcp.template 优化dhcp修改配置文件
subnet 192.168.1.0 netmask 255.255.255.0 { 修改网段
option routers 192.168.1.1; 网关
option domain-name-servers 192.168.1.1; dns地址
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.1.100 192.168.1.254; 地址池
[root@localhost yum.repos.d]# cobbler sync 同步生成dhcp配置文件(/etc/dhcp/dhcpd.conf)
[root@localhost yum.repos.d]# systemctl start dhcpd
root@localhost yum.repos.d]# cobbler import --path=/media/cdrom/ --name=CentOS7.8-x86_64 --arch=x86_64 导入镜像文件 (等)
root@localhost yum.repos.d]# cobbler list 查看文件信息
[root@localhost mnt]# cd /var/www/cobbler/ks_mirror/ 查看的
[root@localhost ks_mirror]# ls
开启全部服务
[root@localhost yum.repos.d]# systemctl restart cobblerd.service
root@localhost yum.repos.d]# systemctl restart tftp
[root@localhost yum.repos.d]# systemctl start dhcpd
开一台机器进行通过cobbler安装
一、日志概述
1、日志管理系统
elasticsearch、logstash、solr、kibana、splunk
solr apache lucene
splunk SPL
elasticsearch
json
2、ELK平台
elasticsearch、logstash、kibana
优势:
处理方式灵活
配置简单
检索性能高效
集群扩展
前端界面
elasticsearch:分布式搜索和分析引擎,提供对大容量数据的存储、搜索、分析等
logstash:数据收集引擎,支持动态的从数据源采集信息
kibana:数据分析和可视化平台
filebeat:数据采集器,安装在指定的数据源主机
3、常见架构
二、安装步骤
1、环境准备(两台)
a、防火墙禁用
b、selinux禁用
c、安装JDK
rpm安装包放置两台虚拟机
cp -r rpm/ /usr/src/
cd /usr/src/rpm/
yum -y install *.rpm
vim /etc/profile
JAVA_HOME=/amoeba/jdk
export JAVA_HOME
PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
export PATH
CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
t
o
o
l
s
.
j
a
r
:
JAVA_HOME/lib/tools.jar:
JAVAHOME/lib/tools.jar:JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH
source /etc/profile
d、 打开的最大文件数
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535/etc/yum.repos.d/
e、准备软件
rpm包
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/es.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
yum -y install elasticsearch kibana logstash filebeat
3、配置elasticsearch(分布式搜索引擎 分析 存储)
72.130 72.131
Yum -y install *.rpm
[root@zhao rpm]# vim /etc/elasticsearch/elasticsearch.yml
另外一台除了
其他都一样
[root@zhao rpm]# mkdir -p /data/elk/{data,logs}
[root@zhao rpm]# chown -R elasticsearch:elasticsearch /data/elk/{data,logs}
[root@zhao rpm]# systemctl start elasticsearch.service
表示成功
[root@zhao rpm]# netstat -nptl 查看9200、9300 端口
[root@zhao rpm]# vim /etc/elasticsearch/elasticsearch.yml
[root@localhost rpm]# systemctl restart elasticsearch.service
[root@localhost rpm]# yum -y install git
[root@localhost ~]# git clone git://github.com/mobz/elasticsearch-head.git
root@localhost ~]# cp -r elasticsearch-head/ /usr/local/
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
ot@localhost yum.repos.d]# yum -y install epel-release
[root@localhost yum.repos.d]# yum -y install npm
[root@localhost yum.repos.d]# npm config set registry http://registry.npm.taobao.org
[root@localhost yum.repos.d]# npm install -g grunt-cli 等
[root@localhost ~]# cd /usr/local/elasticsearch-head/ cd _site/
[root@localhost _site]# vim /usr/local/elasticsearch-head/Gruntfile.js
[root@localhost _site]# vim app.js 192.168.72.131:9200
[root@localhost _site]# cd /usr/local/elasticsearch-head/
[root@localhost elasticsearch-head]# npm install 等
[root@localhost elasticsearch-head]# npm install 检查
1、首先改成公网 关闭防火墙 72.131
oot@zhao elasticsearch-head]# grunt server & 运行server服务 后台
符合查询 写完之后验证 提交请求
回到概览 点击刷新
分片:就是如果有四个片,有两个文件那就把四个分片分成两份,一个文件有两个分片,数据的切片 ,存储容器
主分片(存储数据)和从分片(提供主分片备份)
索引:基于文档文件快速查找的工具(testindex)但这个上面的索引类似于数据库也就是说是数据集合(相同的数据放在一起就是一个集合)
集群状态:
绿色:正常工作状态
黄色:主分片正常工作,但至少一个主分区对应的从分片没有正常工作
红色:至少一个主分片没有正常工作
[root@zhao ~]# eject
[root@zhao ~]# cd /run/media/root/20210316_104643/
[root@zhao 20210316_104643]# cp cerebro-0.9.3.tgz /usr/local/
[root@zhao 20210316_104643]# cd /usr/local/
[root@zhao local]# tar -zxf cerebro-0.9.3.tgz -C /usr/local/
[root@zhao local]# mv cerebro-0.9.3/ cerebro 改名或软连接
[root@zhao local]# cd cerebro/conf/
[root@zhao conf]# vim application.conf
[root@zhao conf]# cd /usr/local/cerebro/
[root@zhao cerebro]# vim cerebro-up 端口只要不是特权端口
[root@zhao cerebro]# chmod +x cerebro-up 给执行权限
[root@zhao cerebro]# vim /etc/systemd/system/cerebro.service 启动脚本
[root@zhao cerebro]# systemctl daemon-reload
[root@zhao cerebro]# systemctl enable cerebro
[root@zhao cerebro]# systemctl start cerebro
[root@zhao cerebro]# systemctl status cerebro
点用户名
3、首先改成公网72.132 关闭防火墙 安装logstash (日志的收集 分析过滤)
oot@zhao ~]# eject
[root@zhao ~]# cd /run/media/root/20210316_104643/
[root@zhao 20210316_104643]# cp logstash-7.11.2-x86_64.rpm /usr/src/
[root@zhao 20210316_104643]# cd /usr/src/
[root@zhao src]# rpm -ivh logstash-7.11.2-x86_64.rpm
[root@zhao src]# vim /etc/logstash/logstash.yml
自动加载
10s以上
本机地址
[root@zhao src]# chown -R logstash:logstash /usr/share/ 不改服务会报错
root@zhao src]# systemctl enable logstash 自动启动成功
[root@zhao src]# systemctl start logstash
[root@zhao src]# /usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{ codec=> rubydebug }}’ 你要输入什么信息 你要输出什么信息(对象什么样的格式) 输入到屏幕上
[root@zhao src]# /usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { file { path => “/tmp/log-%{+YYY.MM.dd}message.gz”}}’ 输入到文件上 message.gz(随便起)
输入 help
logstash的语法规则:
1、index类型
Index => “log_index_%{+YYY.MM.dd}”
2、hosts类型
hosts => [“192.168.1.1:80”,”192.168.1.2:8080”]
3、document_type文档类型
4、template模板类型
template_name
template_overwrite
manage_template
4、首先改成公网 72.133 关闭防火墙 安装kibana (图形界面 可视化)
oot@zhao ~]# eject
[root@zhao ~]# cd /run/media/root/20210316_104643/
[root@localhost 20210316_104643]# cp kibana-7.11.2-x86_64.rpm /usr/src/
[root@localhost 20210316_104643]# cd /usr/src/
[root@localhost src]# rpm -ivh kibana-7.11.2-x86_64.rpm
[root@localhost src]# vim /etc/kibana/kibana.yml
可以从任意地址访问
从131服务器访问
索引名称
启动中文补丁
[root@localhost src]# systemctl start kibana 启动
[root@localhost src]# netstat -anpt 查看5601是否启动
192.168.72.131:5601
一、概述
1、存储方式
单机、独立服务器(图片、页面)、分布式
2、分布式存储的特点:
扩展能力:1G可以扩展成2G
可用性:可以设置多个存储电脑
弹性存储:有一个虚拟存储空间
缺点:设置麻烦,需要多台服务器
3、分布式文件系统(DFS)
就是可以放在不同的节点
最早的是NFS:网络文件系统
4、分布式文件系统的类型
GFS、HDFS、CEPH、MogileFS、MooseFS、TFS
GFS(谷歌)、Mapreduce、Bigtable(三篇论文)
世界最大的三大数据软件:
hadoop分布式文件系统 hadoop之父
spark
storm
mogileFS danga memcached
moosefs
TFS
CEPH 高性能分布式文件系统
CRUSH算法
openstack
4、分布式存储类型
文件存储:支持POSIX(可移植操作系统接口,有这个就可以在liunx和weindos系统都可以)接口,提供并行化访问的能力和冗余机制,常用于存储非结构化数据
块存储:通过qemu或iscsi(互联网存储接口)协议访问,常用于存储结构化数据
对象存储:以对象作为基本的存储单元,主要用于存储非结构化数据(网盘)
结构化数据:数据能够用统一的结构来表示
非结构化数据:无法用数字来表示的数据?(图片、网页文件音频)
半结构化数据:有A有B 文档
二、CEPH集群
1、基本组件:
CEPH监视器(ceph-mon):维护集群状态的映射
CEPH管理器(ceph-mgr):跟踪集群运行指标
CEPH对象存储(ceph-osd):存储数据的核心组件
CEPH元数据服务(ceph-mds):存储元数据
2、实现步骤:
环境准备:
客户机
第一步:
三台虚拟机:三台ceph
三台设置成公网 72.130 72.131 72.132
关闭防火墙(四台都关):
#iptables -F
#systemctl stop firewalld
#setenforce 0
免密码验证(三台都做):
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# ssh-copy-id 192.168.72.131
[root@localhost ~]# ssh-copy-id 192.168.72.132
[root@localhost ~]# ssh node2 不需要密码
主机映射文件:
oot@localhost ~]# vim /etc/hosts
#scp /etc/hosts node2:/etc/ 把文件传到node2
#scp /etc/hosts node3:/etc/ 把文件传到node3
去第二台查看:
[root@zhao ~]# cat /etc/hosts
安装CEPH相关软件:
1、2、3都装:
#cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo
阿里云
#yum -y install epel-release 会生成(epel.repo epel-testing.repo)
#yum -y install yum-plugin-priorities
#cat /etc/yum/pluginconf.d/priorities.conf
依赖关系的软件包
#rpm --import ‘https://download.ceph.com/keys/release.asc’ 验证用的公钥
#vim ceph.repo
查看文件:
https://ceph.io/
[ceph]
name=Ceph packages for
b
a
s
e
a
r
c
h
b
a
s
e
u
r
l
=
h
t
t
p
s
:
/
/
m
i
r
r
o
r
s
.
t
u
n
a
.
t
s
i
n
g
h
u
a
.
e
d
u
.
c
n
/
c
e
p
h
/
r
p
m
−
15.2.4
/
e
l
7
/
basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.4/el7/
basearchbaseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm−15.2.4/el7/basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.4/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.4/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
#yum clean all 清理软件源
#yum -y install ceph
#pip3 install pecan
#pip3 install werkzeug
第二步:监视器ceph-mon部署(node1)
#cd /etc/ceph/
#uuidgen 集群文件系统ip号(唯一值)
310a5dc2-7062-4166-979a-74cdf031aaed
#vim ceph.conf
[global] 全区配置
fsid = 310a5dc2-7062-4166-979a-74cdf031aaed 集群IP(唯一值)
mon initial members = node1 初始化
mon host = 192.168.72.130:6789 监视器对应的IP
public network = 192.168.72.0/24 允许哪些范围可以使用
auth cluster required = cephx 集群认证相关的
auth service required = cephx 服务器认证相关的
auth client required = cephx 客户端认证相关的
osd journal size = 1024 对象存储的大小
osd pool default = 2 对象存储池生成的副本有2个(通常环境下最好是3以上)
osd pool default min size = 1 节点不正常最少有1个
osd pool default pg num = 333 可以存储pg的数量
osd pool default pgp num = 333 可以存储pgp的数量
osd crush chooseleaf type = 1 算法
mon_allow_pool_delete = true 是否允许删除存储池=不允许
#ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon ‘allow *’ 集群的密钥环ceph-authtool(认证相关的工具)-create-keyring(表示创建一个密钥环)
/tmp/ceph.mon.keyring(监控端的密钥放在哪里)–gen-key(生成一个私钥)
-n mon.(私钥的名字)–cap mon ‘allow *’(权限最大操作)
#ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon ‘allow *’ --cap osd ‘allow *’ --cap mds ‘allow *’ --cap mgr ‘allow *’ 管理员的密钥环
#ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/client.keyring --gen-key -n client.bootstrap-osd --cap mon ‘profile bootstrap-osd’ --cap mgr ‘allow r’ 客户端的r只读
把刚才创建的都放在/tmp/ceph.mon.keyring
#ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
#ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/client.keyring
#monmaptool --create --add node1 192.168.72.130 --fsid 310a5dc2-7062-4166-979a-74cdf031aaed /tmp/monmap 生成映射信息并创建
#mkdir /var/lib/ceph/mon/ceph-node1 创建监控器的数据目录
#ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring目录初始化
#chown -R ceph:ceph /var/lib/ceph/mon/ceph-node1/ 监控器的权限
#systemctl start ceph-mon@node1 启动第一节点上的监控端
#systemctl status ceph-mon@node1 active (running) 查看启动
#netstat -anpt 本地的监控端6789端口启动
#ceph -s
集群的健康状态(错)
#ceph mon enable-msgr2 修改集群状态
#ceph -s
好
配置管理器mgr
mkdir /var/lib/ceph/mgr/ceph-node1
#ceph auth get-or-create mgr.node1 mon ‘allow profile mgr’ osd ‘allow *’ > /var/lib/ceph/mgr/ceph-node1/keyring
#ceph-mgr -i node1
#ceph status 查看状态
将文件传到2、3虚拟机:
#scp /var/lib/ceph/bootstrap-osd/client.keyring node2:/var/lib/ceph/bootstrap-osd/
#scp /var/lib/ceph/bootstrap-osd/client.keyring node3:/var/lib/ceph/bootstrap-osd/
每台虚拟机都能识别:
#scp /etc/ceph/ceph.conf node2:/etc/ceph/
#scp /etc/ceph/ceph.conf node3:/etc/ceph/
第二、三台:
其他两台虚拟机都有文件
#cd /var/lib/ceph/bootstrap-osd/
#mv client.keyring ceph.keyring 改名
#ceph-volume lvm create --data /dev/sdb 客户端磁盘必须什么都没做过
72.131和72.132同时做
mds配置(node1)
创建存放mds相关的数据目录
#mkdir /var/lib/ceph/mds/ceph-node1
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node1/keyring --gen-key -n mds.node1 设置mds的密钥环即生成私钥
#ceph auth add mds.node1 osd ‘allow rwx’ mon ‘allow profile mds’ -i /var/lib/ceph/mds/ceph-node1/keyring 导入密钥环设置权限
#vim /etc/ceph/ceph.conf
用第一台做同步(文件改动)
#scp /etc/ceph/ceph.conf node2:/etc/ceph/
#scp /etc/ceph/ceph.conf node3:/etc/ceph/
#ceph-mds --cluster ceph -i node1 -m node1:6789 启动元数据服务
启用mds守护进程, --cluster启用ceph集群 -i 启用node1进程 使用端口6789
#ceph osd pool create cephfs_data 128 创建存储池 最大不能超过250
#ceph osd pool create cephfs_metadata 64
创建分布式文件系统先指定元数据存储池,然后指定存储数据
#ceph fs new cephfs cephfs_metadata cephfs_data
ceph fs ls 查看
创建挂载目录
mkdir /mnt/mycephfs
ceph :/表示把分布式文件系统根目录开始挂载到/mnt下使用的名为admin
#mount -t ceph 😕 /mnt/mycephfs/ -o name=admin
查看为什么为12G一部分为用户提供存储数据,一部分被分给存储元数据
#df -hT
如果在加入一个新的节点也想用分布式文件系统进行管理
新开一台虚拟机
IP192.168.72.133 防火墙关闭
#wget -O /etc/yum.repos.d/aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#yum -y install yum-plugin-priorities
#yum -y install epel-release
#scp ceph.repo 192.168.72.130:/etc/yum.repos.d/
#rpm --import ‘https://download.ceph.com/keys/release.asc’
#yum -y install ceph
#pip3 install pecan
#pip3 install werkzeug
#ssh root@node1 ‘ceph config generate-minimal-conf’ | tee /etc/ceph/ceph.conf 生成一个更小的文件从node1上获取,本机生成
#chmod 644 /etc/ceph/ceph.conf 设置权限
#ssh root@node1 ‘ceph fs authorize cephfs client.abc / rw’ | tee /etc/ceph/ceph.client.abc.keyring
#chmod 600 /etc/ceph/ceph.client.abc.keyring 设置密钥环权限
#mount -t ceph 😕 /mnt -o name=abc 将ceph:/根目录挂载到本地mnt下
#df -hT
监控系统
一、监控概述
1、监控对象
a、软/硬件资源
硬件:服务器、路由、交换、其他I/O设备等
软件:操作系统、网络、应用程序等
b、意外状态
服务关闭、设备宕机、服务器不可达等
c、严重事件
磁盘利用率大于n%(free)
主从同步延迟
CPU利用率大于n%(uptime top)
d、趋势数据
图形展示数据的变化曲线
e、事件发生时间
f、时间产生原因
2、监控告警
a、采样
多次获取数据,提高监控准确性
b、存储
c、展示
3、工作原理
a、调度器主动将探测到的数据发送给监控平台
b、监控平台主动向调度器收集数据
4、基本模块
a、agent(代理程序)收集数据
b、NMS(网络监控系统)汇总数据
5、数据传输
a、ssh远程连接
b、snmp简单网络协议
c、telnet远程连接
d、agent
6、snmp特点
实现机制:
NMS–> 设置监控类别 --> SNMP --> 本地采集数据
提供的工具:
Snmpget、 snmpwalk、snmptrp
协议版本:
V1:最古老的版本
V2c:添加身份识别功能(组)
V3:功能最完善的版本
监控方式:
直接通过SNMP协议收集数据
安装agent收集数据
通过ssh/telnet收集数据
通过特殊硬件接口收集数据(IPMI)
7、常见监控平台:
cacti(环):
每一个监控指标都需要单独的RRD存储
httpd、mysql、PHP展示数据
rrdtool绘制图表
nagios:
监控业务指标是否在合理区间内
不提供图形化的数据展示,仅提供简单的图形功能
cacti+nagios+ntop
zabbix:
二、zabbix
1、特性:
数据采样:
SNMP、SHH/TELNET、agent、IPMI、JMX
自定义检测机制:通过zabbix_agent定义监控指标
自定义时间间隔:设置监控范围
实时绘画:
内置的绘画接口,读取数据库重的数据,完成绘画
支持graph(图形生成)、map(类似网络拓补)、screen(屏幕墙)、slide show(类似幻灯片)
告警机制:
自定义脚本
邮件通知
数据存储:
mysql
mariadb
pgsql
支持模板:
快速完成监控配置
网络自动发现
API
2、宏观架构:
zabbix server:守护进程,复制所有配置、数据汇总及数据操作,最核心的zabbix组件
zabbix database:数据库,存储所有的配置信息及zabbix采集的数据信息
zabbix web gui:图形化接口,用于提供图形界面(通常与server运行在同一主机)
zabbix proxy:代理进程(分布式监控,减轻服务器压力),可选组件,代理server收集部分对监控端的数据,汇总后一并发送server端。
zabbix agent:部署在被监控主机上,复制收集本地数据并发送server或proxy端
zabbix server <–> zabbix proxy <–> agent/ssh/snmp
3、zabbix程序组成:
zabbix_server:服务器端的守护进程
zabbix_agentd:客户端的守护进程
zabbix_proxy:代理段的守护进程
zabbix_get:命令行工具,手动采集数据时使用
zabbix_sender:命令行工具,运行于agent端,手动发送数据时使用
zabbix_java_gateway:JAVA网关
4、概念:
主机(host):监控的对象,使用IP或域名指定
主机组(host group):主机容器,开源包含主机和模板
监控项(item):特定监控指标的相关数据,来自于被监控对象
触发器(trigger):评估指定监控对象的item内所接收到的数据是否在合理区间内(即阈值)
事件(event):即将发生的值得关注的事务,如触发器的状态变化
动作(action):对于特定事件实现定义的处理方法,通常包含操作和条件
告警升级:告警时的自定义方案
通知(notification):向用户发送有关某事件的信息
媒介(meadia):发送统治的手段或通道,如邮件、短信等
远程命令(remote command):预定义的指令
应用(application):一组item的集合
模板(template):用于快速定义被监控主机的预设条目集合,通常包含item、trigger、graph、screen等
前端(frontend):zabbix的web接口
5、微观架构(逻辑架构)
internal:zabbix内崭的监控机制
SNMP:基于SNMP协议的监控机制
agent:基于agent的监控机制
poller:用于从监控接口拉取数据
维护(maintenance):定义依赖关系
poller子进程:基于agent执行数据采集
http poller子进程:基于http协议执行数据采集的poller程序,类似的还有snmp poller、ipmi poller等
housekeeper子进程:以固定周期,清除数据库中过期的历史数据的机制
pinger子进程:探测器,定期执行ICMP ping检查,探测主机是否在线
nodewatcher子进程:监控个节点的分布式节点看收起,用于在不同节点之间发送数据和配置信息更新的过程
alerter子进程:发送告警通知的进程
escalator子进程:负责处理告警过程中各步骤
discovery子进程:用于自动发现设备的过程
db_config_syncer:数据库配置同步器
db_data_syncer:数据库数据同步器
timer:处理触发器中时间相关函数的进程
watchdog:监控进程的运行状态,由内核直接生成
一、zabbix安装
1、要求
Name Platform CPU/Memory Database Monitored hosts
Small CentOS Virtual Appliance MySQL InnoDB 100
Medium CentOS 2 CPU cores/2GB MySQL InnoDB 500
Large RedHat Enterprise Linux 4 CPU cores/8GB RAID10 MySQL InnoDB or PostgreSQL >1000
Very large RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB or PostgreSQL >10000
2、安装方式
操作系统:CentOS8.3
zabbix软件:zabbix 5.0 LTS
安装类型:RPM(zabbix源、国内镜像源)
二、基础操作
1、用户管理
登录:
用户名:Admin(必须大写)
密码:zabbix
默认用户:
Admin:zabbix中的超级管理员,拥有最大权限
guest:特殊的默认用户,没有登录zabbix时,访问zabbix使用,默认对zabbix中的对象没有任何权限
2、主机管理
创建主机:
主机名、群组、接口(IP、端口)
主机可用性:
绿色:表示正常状态
灰色:表示状态还未启用或未更新
红色:表示通信存在问题
3、监控项:
创建监控项:
名称、键值(key)、信息类型(浮点数)、主机接口、历史数据、趋势数据等
显示数据:
检测 --> 最新数据
中文支持:
windows路径:
C:\Windows\Fonts
zabbix路径:
/usr/share/zabbix/assets/fonts
gnome-tweaks gnome优化工具
开启窗口最大化和窗口最小化
复制微软雅黑文件至CENTOS8目录中(不可在桌面操作)
4、触发器:
监控项主要用于收集数据,而触发器则可定义数据的阈值级别
超过阈值时,触发状态变化:
OK --> PROBLEM
PROBLEM --> OK
语法格式:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
{<服务器>:<键>.<函数>(<参数>)}<运算符><设定的值>
关键参数:
服务器:主机名称
键:主机上设定的监控项的关键字
函数:评估采集的数据是否在合理范围内
函数:
avg:平均值
sum:求和
count:指定时间内或次数内的数值统计
min/max:最小值/最大值
last:最新数据
date:当前日期
等等
运算符:
>
>=
<
<=
=
<> 不等于
+
-
*
/
and 和
or 或
时间参数:
s、m、h、d、w
创建触发器:
每一个触发器仅能关联至一个监控项
一个监控项可以同时使用多个触发器(为了实现不同级别的报警)
查看触发器:
监测 --> 问题
其它实例:
a、检测当前CPU负载
{new_host:system.cpu.load.last()}>3
b、多条件匹配
c、文件更改
d、检测网络流量,大于1M更改状态
e、系统用户数统计,大于3人更改状态
一、告警机制
1、实现原理
通过触发器的状态改变触发告警机制
2、常见类型
邮件、微信、短信等
二、电子邮件告警
1、服务器端配置邮件参数
vim /etc/mail.rc
set from=zabbix_2021@sina.com
set smtp=smtp://smtp.sina.com
set smtp-auth-user=zabbix_2021@sina.com
set smtp-auth-password=79107ed43f60ba8f
set smtp-auth=login
2、配置zabbix前台
故障{TRIGGER.STATUS},服务器{HOST.NAME}发生{TRIGGER.NAME}故障!!!
+++++++++++++++++++++++++++++++
| Zabbix触发报警,主机出现故障 |
+++++++++++++++++++++++++++++++
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控内容:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
事件ID:{EVENT.ID}
服务器:{HOST.NAME};{TRIGGER.NAME}已恢复正常!!!
三、企业微信告警
1、配置群机器人,并获取webhook接口
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=92b0cdf9-6dc4-4004-91df-50553b9df91a
2、配置zabbix前台
四、报警信息优化
主题:
故障{TRIGGER.STATUS},服务器{HOST.NAME}发生{TRIGGER.NAME}故障!!!
消息:
<tr>
<td>告警主机</td>
<td bgcolor="#7CFC00">{HOST.NAME}</td>
</tr>
<tr>
<td>告警地址</td>
<td>{HOST.IP}</td>
</tr>
<tr>
<td>监控项目</td>
<td>{ITEM.NAME}</td>
</tr>
<tr>
<td>监控内容</td>
<td>{ITEM.LASTVALUE}</td>
</tr>
<tr>
<td>告警等级</td>
<td>{TRIGGER.SEVERITY}</td>
</tr>
<tr>
<td>当前状态</td>
<td>{TRIGGER.STATUS}</td>
</tr>
<tr>
<td>告警信息</td>
<td>{TRIGGER.NAME}</td>
</tr>
<tr>
<td>告警时间</td>
<td>{EVENT.DATE}{EVENT.TIME}</td>
</tr>
<tr>
<td>事件ID</td>
<td>{EVENT.ID}</td>
</tr>
一、模板(template)
将一组预先定义好的监控规则,快速应用到指定设备中
添加被监控端:
Linux
zabbix-agent
Windows
www.zabbix.com
格式:msi和archive
版本:zabbix agent和zabbix agent 2
模板的导入和导出
移除模板
取消链接:仅将模板的链接取消,之前应用的数据不会改变
取消链接并清理:将模板的链接取消,之前应用的数据也会被清理
通过模板) 监控其他主机,如果客户端主机发生问题,就在服务器这边显示问题
两台主机,一台为服务器ip:192.168.72.135
客户端:ip:192.168.110.136
防火墙关闭。seliunx关闭
(1)配置zabbix前台生成主机,模板,
用模板快速给主机定义一套规则,让其生效
先生成模板,加入Templates群组,
创建应用集,包含监控项,
添加监控项,将监控项添加进应用集
创建触发器,属于监控项的
创建图形
创建主机,监控客户端使用的,并将模板添加进去
最后可以看到主机上就应用了这些模板数据
(2)客户端配置
由服务器端将安装包发送给客户端
[root@lixiaopeng ~]# scp zabbix-release-5.0-1.el8.noarch.rpm 192.168.72.136:/root
客户端接收并安装
[root@localhost ~]# rpm -ivh zabbix-release-5.0-1.el8.noarch.rpm
安装zabbix客户端agent
[root@localhost yum.repos.d]# yum -y install zabbix-agent
进入客户端配置文件修复参数
[root@localhost yum.repos.d]# vim /etc/zabbix/zabbix_agentd.conf
117 行 Server=192.168.72.135 服务器地址
158 行 ServerActive=192.168.72.135 服务器地址
169 行 Hostname=Zabbix agent 客户端名
启动服务
root@localhost yum.repos.d]# systemctl start zabbix-agent.service
[root@localhost yum.repos.d]# systemctl enable zabbix-agent.service
测试,由这次测试的是用户登录数量,创建几个用户登录即可完成实验,在这就不测试了
在其他系统上安装参考https://www.zabbix.com/
2,模板的导入导出
导出,生成文件,可以用于导入
3.移除模板
(1)取消连接,保留数据
(2)取消链接并清理,不保留数据
二、宏
格式:{MACRO}
类型:
内置宏:可以直接引用的宏
{HOST.NAME}{HOST.IP}{TRIGGER.NAME}
自定义宏:由用户自定义的宏
{$MACRO}
级别:
全局宏:适用于模板、主机
模板宏:仅适用于当前模板
主机宏:仅适用于当前主机
优先级:
主机 --> 模板 --> 全局
范围越小,优先级越高
设置全局宏在zabbix前台一般
然后根据宏设置进监控项,
然后测试。在客户端开启http进程
[root@localhost yum.repos.d]# yum -y install httpd
[root@localhost yum.repos.d]# systemctl restart httpd
然后查看最新数据、
三、自动发现
提供了有效的添加主机列表的机制,适用于大规模部署监控,其主要基于:
可用的外部服务(FTP、SSH、WEB、TCP等)
zabbix的客户端
SNMP的客户端
配置步骤
发现
动作
配置步骤
zabbix前台,客户端
(1)zabbix
创建动作
添加操作
(2)客户端
安装zabbix客户端agent
[root@localhost yum.repos.d]# yum -y install zabbix-agent
进入客户端配置文件修复参数
[root@localhost yum.repos.d]# vim /etc/zabbix/zabbix_agentd.conf
117 行 Server=192.168.72.135 服务器地址
158 行 ServerActive=192.168.72.135 服务器地址
169 行 Hostname=mysql
启动服务
root@localhost yum.repos.d]# systemctl start zabbix-agent.service
[root@localhost yum.repos.d]# systemctl enable zabbix-agent.service
等待zabbix前端自动搜索设备,发现140就成功
四、监控服务(mysql)
监控数据库服务的步骤
zabbix前台,创建主机,添加模板。客户端生成zabbix启动脚本文件,数据库配置文件配置
先配置客户端
安装数据库服务
root@localhost ~]# yum -y install mariadb mariadb-server
root@localhost ~]# systemctl start mariadb.service
设置数据库密码
root@localhost ~]# mysqladmin -uroot password ‘12345’
进入数据库授权
root@localhost ~]# mysql -uroot -p
Enter password:
授权用户zabbix主机192.168.72.137通过密码12345登录
ariaDB [(none)]> GRANT ALL PRIVILEGES ON . TO zabbix@‘192.168.72.137’ IDENTIFIED BY ‘12345’;
刷新
MariaDB [(none)]> FLUSH PRIVILEGES;
退出
编写脚本文件
root@localhost ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@localhost zabbix_agentd.d]# vim userparameter.conf
For all the following commands HOME should be set to the directory that has .my.cnf file with password information.
Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo “show global status where Variable_name=‘$1’;” | HOME=/var/lib/zabbix mysql -N | awk ‘{print $$2}’
Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
Key syntax is mysql.size[,,].
Database may be a database name or “all”. Default is “all”.
Table may be a table name or “all”. Default is “all”.
Type may be “data”, “index”, “free” or “both”. Both is a sum of data and index. Default is “both”.
Database is mandatory if a table is specified. Type may be specified always.
Returns value in bytes.
‘sum’ on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*],bash -c ‘echo “select sum($(case “$3” in both|”") echo “data_length+index_length”;; data|index) echo “ 3 l e n g t h " ; ; f r e e ) e c h o " d a t a f r e e " ; ; e s a c ) ) f r o m i n f o r m a t i o n s c h e m a . t a b l e s 3_length";; free) echo "data_free";; esac)) from information_schema.tables 3length";;free)echo"datafree";;esac))frominformationschema.tables([[ “$1” = “all” || ! “$1” ]] || echo " where table_schema=“ 1 " ¨ ) 1\"") 1"¨)([[ “$2” = “all” || ! “$2” ]] || echo “and table_name=”$2"”);” | HOME=/var/lib/zabbix mysql -N’
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
创建脚本文件所需的目录
root@localhost zabbix_agentd.d]# mkdir /var/lib/zabbix
root@localhost zabbix_agentd.d]# vim /etc/my.cnf
This group is read both both by the client and the server
use it for options that affect everything
[client-server]
include all files from the config directory
!includedir /etc/my.cnf.d
[mysqld]
#skip-grant-tables
[mysql]
host=192.168.72.137
user=zabbix
password=12345
#socket=/var/lib/mysql/mysql.sock
[mysqladmin]
host=192.168.72.137
user=zabbix
password=12345
#socket=/var/lib/mysql/mysql.sock
[client]
host=192.168.72.137
user=zabbix
password=12345
[root@localhost ~]# cp /etc/my.cnf /var/lib/zabbix/.my.cnf
[root@localhost ~]# vim /var/lib/zabbix/.my.cnf
[mysql]
host=192.168.72.137
user=zabbix
password=12345
#socket=/var/lib/mysql/mysql.sock
[mysqladmin]
host=192.168.72.137
user=zabbix
password=12345
#socket=/var/lib/mysql/mysql.sock
[client]
host=192.168.72.137
user=zabbix
password=12345
启动数据库,zabbix客户端服务
root@localhost ~]# systemctl restart mariadb.service
[root@localhost ~]# systemctl restart zabbix-agent.service
zabbix前台服务
创建主机
添加模板
查看监控情况
一、运维刨析
[root@zhao yum.repos.d]# wget https://mirrors.aliyun.com/repo/Centos-8.repo
[root@zhao yum.repos.d]# yum clean all 清理缓存
[root@zhao yum.repos.d]# yum makecache 生成缓存 减缩缓存(可以不用)
[root@zhao yum.repos.d]# yum -y install epel-release
[root@zhao yum.repos.d]# yum -y install ansible
[root@zhao yum.repos.d]# rpm -qi ansible
1、主要文件
/etc/ansible 主目录
/etc/ansible/ansible.cfg 主配置文件
/etc/ansible/hosts 主机清单
/etc/ansible/roles 角色目录
/usr/bin/ansible 主程序文件
2、主要配置项
inventory 被控端的主机列表文件
library 库文件的存储位置
module_utils 库文件的相关工具
remote_tmp 远程主机存放的目录
local_tmp 临时文件存放的目录
forks 默认开启的并发数
配置文件默认位于/etc/ansible/目录
配置文件应用顺序:当前命令的执行目录ansible.cfg --> 用户家目录中的.ansible.cfg --> /etc/ansible/ansible.cfg=
3、管理目标主机
通过命令行接口告知目标主机的任务需求
通过剧本方式来实现多主机管理
4、ansible命令简介
ansible:最核心的命令,主要用于执行单条命令,通常需要指定主机、选项、模块,若未指定模块,则使用command模块
ansible-doc:查看模块的信息
ansible-playbook:主要用于执行反复执行、较为复杂的任务。支持使用变量、条件判断、循环以及模板等
二、ansible命令
1、常见参数
运行参数
-v,–version 提供版本信息
-a MODULE_ARGS 指定模块参数
-C, --check 测试变更的内容,不会真正执行
-D, --diff 当更改文件和模板时,显示其差异
-f FORKS 指定并行的进程数
-i INVENTORY 指定主机清单文件或用逗号分割多台主机
–list-hosts 输出匹配的主机列表
-m MODULE_NAME 指定模块的名称
-M MODULE_PATH 指定模块的位置
-h 查看帮助信息
特权参数
-K, --ask-become-pass 提权密码
–become 执行指定的操作
–become-user BECOME_USER 指定提权的用户,默认root
–become-method 指定提权的方法,默认sudo
连接参数
-k, --ask-pass 要求用户输入请求连接的密码
-u REMOTE_USER 连接远端主机的用户
-c CONNECTION 连接的类型
-T TIMEOUT 设置默认的超时时间
2、环境准备
1、添加/etc/hosts
2、创建密钥对
3、配置主机清单
[root@zhao ~]# scp /etc/hosts 192.168.72.136:/etc/hosts
3、基础命令格式
格式: HOST-PARTTERN -m MODE_NAME -a MOD_ARGS -f FORKS -C -u USERNAME -c CONNECTION
示例:
[root@localhost ~]# ansible all -m ping
SUCCESS 成功
changed 目标主机是否发生修改
ping pong表示主机的成功响应
[root@localhost ~]# ansible-doc --help
4、常见模块
ping模块:检查指定的节点主机是否能连通,不涉及参数,若目标主机可连通,则返回pong
group模块:组模块,调用groupadd、groupdel、groupmod三个指令
user模块:用户模块,调用useradd、userdel、usermod三个指令
raw模块:执行原始命令,而不调用模块子系统
yum模块:提供软件包安装和管理
pip模块:管理python的依赖库
template模块:基于模板生成文件复制到远端主机
copy模块:在远端主机上执行复制操作
fetch模块:用于从远端主机复制文件
file模块:用于远端主机上的文件操作
command模块和shell模块:在远端主机上运行指定的命令
shell模块支持特殊字符
command模块不支持特殊字符
hostname模块:修改远端主机的主机名
mount模块:挂载文件系统
find模块:在远端主机查找文件
selinux模块:管理远端主机上的selinux
5、模块操作:
a、group模块
选项:
gid 设置目标主机组的GID
name 设置目标主机组名
state 设置目标主机组的状态
present 创建
absent 删除
system 设置系统组
实验:
[root@localhost ~]# ansible all -m group -a "gid=3001 name=mygrp1 state=present system=false"
[root@localhost ~]# ansible all -m group -a "gid=3001 name=mygrp1 state=absent system=false"
[root@localhost ~]# ansible 192.168.59.136 -m group -a "gid=3002 name=mygrp2 state=present system=false"
[root@localhost ~]# ansible 192.168.59.136,192.168.59.137 -m group -a "gid=3003 name=mygrp3 state=present system=false"
b、user模块
选项:
home 设置用户的家目录
groups 设置用户的属组
uid 设置用户的UID
password 设置用户的密码
name 设置用户名
createhome 是否创建家目录(配合home选项使用)
system 是否创建系统用户(UID范围1-999)
remove 当删除用户时,remove=yes表示连同其家目录一起删除,类似 userdel -r
state 设置用户状态,创建(present)或删除(absent)
shell 设置用户的SHELL环境
comment 设置用户的说明信息
实验:
[root@localhost ~]# ansible all -m user -a "uid=5002 name=a2 comment='testuser' state=present groups=mygrp shell=/bin/sh"
c、copy模块
选项:
src 源地址,需要绝对路径。
若指定目录时使用格式/abc,表示复制目录及目录内所有文件
若指定目录时使用格式/abc/,表示复制目录内的所有文件
content 源地址,用于将指定的文件内容,复制到远端主机的文件内
dest 目标地址,用于定位远端主机上的文件,需要绝对路径
若src指定的是目录,那么dest也必须是目录
owner 设置复制到远端主机的文件的归属
mode 设置复制到远端主机的文件的权限
实验:
[root@localhost ~]# ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab_1 mode=600"
[root@localhost ~]# ansible all -m copy -a "src=/etc/pam.d dest=/tmp/"
[root@localhost ~]# ansible all -m copy -a "src=/etc/pam.d/ dest=/tmp/"
[root@localhost ~]# ansible all -m copy -a "content='hello,world\n' dest=/tmp/index.html"
[root@localhost ~]# ansible all -m copy -a "content='hello,world\n' dest=/tmp/index1.html owner=a1 group=mygrp"
d、fetch模块
获取指定主机上的数据
[root@localhost etc]# ansible 192.168.72.136 -m fetch -a "src=/etc/issue dest=/tmp/abc"
e、command模块
在远程主机上执行命令
[root@localhost ~]# ansible all -m command -a "hostname" 服务机名
[root@localhost ~]# ansible all -m command -a "chdir=/var/tmp mkdir abcd"
远程创建目录
[root@localhost ~]# ansible all -m command -a “/sbin/shutdown -h now”
被监控端关
f、shell模块
支持特殊符号,如<、>、|、;、&等,是增强版的command模块
[root@localhost ~]# ansible all -m shell -a “echo ‘123’ | passwd --stdin a1”
[root@localhost ~]# ansible all -m shell -a “ps aux | grep [s]sh”
g、yum模块
使用yum进行软件包的安装、升级、删除等操作
选项:
name 指定软件名
state installed/removed 安装/卸载软件
[root@localhost ~]# ansible all -m yum -a "name=vsftpd state=installed"
h、其它模块
service、crond、mount等
6、模块状态(state)
作用:定义指定模块所处于的目标状态(文件,要么安装要么没安装)
特点:操作必须是幂等的(多次出现的状态必须相等)
手动 --> 标准化 --> 工具化 --> 自动化 (DevOps) --> 智能化
工具化:
操作系统安装:PXE、cobbler等
操作系统配置:ansible、fabric、puppet、saltstack、chef、cfengine等
应用程序部署:ansible、fabric等
任务执行:ansible、fabric等
ansible基于SSH连接被管控主机,借助各模块对被管控主机进行管理和配置
copy、file、fetch、yum、service、group、user、crond、command、shell、script、ping等等
ansible的任务执行模式:
ad-hoc模式(点对点模式)
使用单个模块,执行单条命令
playbook模式(剧本模式)
使用多个任务的集合完成一组功能
ansible命令格式:
ansible 主机列表 -m 模块名称 -a 模块参数 -f FORKS -C
YAML格式,扩展名 .yaml .yml
提供以play为元素的列表,这种文件就是playbook
play的内容即task list(任务列表)
一、PLAYBOOK概述
1、作用:
将多个play整合在一个文件中,让其按照事先编排的机制执行预定义的动作
2、核心元素
hosts 关联到的主机
task 任务
variables 变量
template 模板
handlers和notify 由特定的条件触发的操作,满足条件方才执行,否则不执行
tags 标签,选择playbook中的部分代码
roles 角色,可将变量、文件、模板等通过include进行加载调用
3、基础组件
hosts 必须事先定义在主机清单中
remote_user 通过SUDO方式在远程主机上执行任务
task 按次序在指定的所有主机上执行,通常需要指定name(任务名称),若未指定,则
动作:模块参数
模块:模块参数
4、配置playbook:
测试:
ansible-playbook --syntax-check 1.yaml 检查语法有没有错
ansible-playbook --check #检测可能会发生的改变,不真正执行
ansible-playbook --list-hosts #列出所有运行任务的主机
运行:
[root@localhost ~]# ansible-playbook 1.yaml
---
- hosts: all
remote_user: root
tasks:
- name: install vsftpd
yum: name=vsftpd state=installed
- name: copy config file
copy: src=/root/vsftpd.conf dest=/etc/vsftpd/vsftpd.conf
notify: restart vsftpd
- name: start vsftpd
service: name=vsftpd state=started enabled=yes
handlers:
- name: restart vsftpd
service: name=vsftpd state=restarted enabled=yes
# - hosts: 192.168.59.136
# - hosts: 192.168.59.137
handlers和notify通常一起使用:
接收到任务时,发送通知
notify: handlers任务名
handlers(任务),在特定条件下被触发
5、YAML文件语法:
全局:
a、以---开头,声明yaml文件类型,也可以不写
b、#做为注释符,可以注释整行,也可以注释部分行
c、YAML中的字符串通常不加任何引号,即使包含了特殊字符。(变量除外)
d、布尔值的类型:
模块的参数(ansible):
yes/on/true/1 真
no/off/false/0 假
非模块的参数(YAML,不区分大小写)
yes/on/true/1 真
no/off/false/0 假
通常情况:
模块参数的布尔值:yes/no
非模块参数的布尔值:True/False
列表:
使用 - 作为列表项
圈定一个范围,范围内的项都属于该列表
换行:
在“key”后使用大于号 (两行是一个命令)
在“key”后使用 | (下面所有都是一条命令)
多层缩进
参数传递:
a、直接定义在模块名后,如service: name=vsftpd state=restarted enabled=yes
b、写成字典型(KV,key-value,键值),如:
yum:
name=vsftpd
state=installed
c、使用内置属性args,如:
yum:
args:
name=vsftpd
state=installed
playbook和play的关系:
每个playbook可以包含多个play
每个play最少包含tasks和hosts选项
tasks中可以通过模块设置一系列的动作
playbook:[play1,play2,play3……]
play:[hosts,tasks,vars,remote_users……]
tasks:[module1,module2,module3……]
一、变量管理
1、内置变量
默认变量:gathering facts
查看被管控端信息:ansible 192.168.59.137 -m setup
查看指定变量信息:
[root@localhost playbook]# ansible 192.168.59.137 -m setup -a “filter=ansible_env”
[root@localhost playbook]# ansible all -m setup -a “filter=ansible_memfree_mb”
引用变量:{{ ansible_env }}
常见的信息类型:
ansible_env 环境相关配置信息
ansible_all_ipv4_address 仅显示IPV4相关配置信息
ansible_distribution 查看操作系统发行版本
ansible_distribution_version 查看操作系统发行版本版本号
ansible_kernel 查看内核版本
ansible_ens33 查看网卡配置信息
ansible_mem* 查看内存相关信息
ansible_mounts 查看挂载相关信息
ansible_hostname 查看主机名相关信息
2、ansible-playbook命令行中的自定义变量
-e EXTRA_VARS, --extra-vars EXTRA_VARS
通过命令行传递变量的值,提高playbook的灵活性和适配性。
3、host inventory 主机清单
通过主机清单可以实现主机分组,组名用[ ]限定
支持通配的功能,如node[1:9].hr.com
inventory参数
ansible_ssh_host 将要连接的远端主机地址
ansible_ssh_port SSH的端口号
ansible_ssh_user 默认的SSH用户名
ansible_ssh_pass 默认的SSH密码
ansible_sftp_extra_args 添加额外参数给sftp命令
ansible_ssh_extra_args 添加额外参数给ssh命令
ansible_scp_extra_args 添加额外参数给scp命令
4、用户自定义变量
a、向同组主机传递相同的变量
[webserv] #主机变量
192.168.59.136 http_port=8080
[webserv:vars] #主机组变量
http_port=8000
[all:vars] #全局变量
http_port=9000
优先级:主机变量 > 主机组变量 > 全局变量
范围: 全局变量 > 主机组变量 > 主机变量
b、向不同主机传递不同的变量
通过命令行传递参数 -e cmdvar="command_line_variables_test"
通过剧本内部定义 vars:
通过主机清单定义 http_port=8080
二、模板
包含了模板语法的文本文件
jinja2(模板引擎)
WEB(HTML) -->PHP(内嵌)
TEMPLATE(纯文本)--> JINJA2(内嵌,python)
字面量:
字符串:使用单引号或双引号
数字:整数、浮点数
列表:[ item1,item2……itemN ] 元素的值可被修改
元组:( item1,item2……itemN ) 元素的值不可被修改
字典:{ key1:value1,key2:value2,……}
布尔:true/false
算术运算符:
+ - * / % // **
比较操作:
== != > >= < <=
逻辑运算:
and or not
发布网站:
1、查看主机信息
一、条件测试
关键字:when
作用:条件测试返回 真 时,则执行该区域的命令
二、循环
迭代机制
item 变量
with_item 取值列表
- 1
- 2
- 3
三、角色
1、目录列表:
files:存储由copy或script等模块调用的文件
templates:存储模板文件的目录
tasks:至少应该包含一个main.yml的文件
handlers:至少应该包含一个main.yml的文件
vars:至少应该包含一个main.yml的文件
meta:至少应该包含一个main.yml的文件,定义当前角色的特殊定义及依赖关系。
default:设置默认变量时,使用该目录中的main.yml文件
2、默认路径
roles_path = /etc/ansible/roles
3、创建角色
[root@node1 playbook]# mkdir -pv /etc/ansible/roles/nginx/{files,templates,tasks,vars,handlers,meta,default}
4、创建剧本
---
- hosts: webserv
remote_user: root
roles:
- nginx
四、标签
tags
五、优化
为ansible添加缓存
redis nosql数据库 key-values KV存储
六、redis配置
数据类型:
string 字符串 hash 散列类型 list 双向队列 set 集合类型 zset 有序集合
一、容器概述
1、LXC
全称:linux container
2、虚拟化类型:
结构:
硬件虚拟化:物理硬件本身提供虚拟化的支持,如CPU vt-x amd-v
软件虚拟化:通过软件方式实现虚拟化中关键指令的转换,如JVM
设计:
主机虚拟化:
TYPE I : 原生架构
TYPE II:寄居架构
容器虚拟化:
其它:
平台虚拟化
应用程序虚拟化
内存虚拟化
桌面虚拟化
...
3、虚拟化
两级调度
host os内核功能
guest os内核功能
hypervisor的调度
调度产生额外开销
4、容器环境
多个用户空间共享一个内核空间
通过一个用户空间(一般是第一个)提供特权管理
管理每个用户空间所能使用的资源边界,从而实现隔离
5、容器技术
1979,Unix chroot
2000,FreeBSD jails
2001,Linux VServer
security context
virtual private server VPS
2004,containers
zones
2005,OpenVZ
2006,process containers
control groups,CGroups
2008,LinuXContainers
CGroups和namespace
直接运行在普通Linux内核上
2011,warden
2013,LMCTFY
2013,Docker
2014,Rocket
2015,windows container
6、资源隔离
隔离内容 命名空间
主机名/域名 UTS
根文件系统 MOUNT
进程编号 PID
进程通信 IPC
用户和组 USER
网络设备、端口、协议 NET
7、资源调度
可压缩资源:资源不足时,按照权重分配资源,如CPU
不可压缩资源:资源不足时,无法继续申请,如内存
可压缩资源:
a、为用户空间设定资源权重
CPU 1:2:1
用户空间1:25%
用户空间2:50%
用户空间3:25%
b、为用户空间绑定CPU核心
不可压缩资源:
关闭程序,释放资源
通过Control Groups实现控制
8、CGroups
blkio BLOCK IO,限制块设备的IO速率
cpuset 限制任务能运行在哪些CPU核心上
cpuacct 生成CGroups中任务使用CPU的报告
CPU 限制调度器分配的CPU时间
devices 允许或拒绝CGroups中任务对设备的访问
freezer 挂起或重启CGroups中的任务
memory 限制CGroups中内存的使用量
net_prio 设置网络接口报文的优先级
pref_event 识别任务的CGroups成员,用于性能分析
9、LXC 容器
lxc-create (常见容器) 快速创建用户空间
Template(模板) 创建用户空间并运行后,自动实现安装过程
10、docker
镜像技术
每个用户空间运行单类进程
分层构建、联合挂载
AUFS 联合文件系统的实现方式
rw 可读可写,用户能直接修改其中的内容
ro 只读,用户不能通过aufs的接口对文件进行写入操作,只能读取其内容
rr real read only,真实只读
特点:
通常第一个目录可读可写,其余皆为只读
对可读目录内容做出修改时,其结果会保存到可写目录中,不会影响只读目录
参数:
none:aufs不会进行任何数据同步的检查,性能相对较高,但可能出现数据不一致的情况
reval:aufs会检查底层的文件是否出现改动,若有改动,则将改动的内容更新到挂载点,产生额外的性能损耗
notify:通过inotify监听底层的文件变化,基于事件驱动,减少性能损耗
分层构建:
顺序执行的多条指令,会生成不同分层,累加写入到文件中,形成一个image文件
Docker之父 solomon hykes(所罗门 海克思)
Docker hub 国际的
阿里云是国内的