Linux运维企业架构项目实战系列
目录
一、全网备份
(一)部署Rsync守护进程
1)服务端(backup)
2)客户端(web01/02/03 nfs01)
(二)编写脚本文件
1)客户端脚本编写
2)服务端
(三)配置邮件服务
1)服务端
(四)定时任务(实现自动完成全网数据备份)
1)服务端
2)客户端(web01/02/03 nfs01)
二、NFS存储共享服务
1)服务端
2)客户端(web01/02/03)
3)实现开机自动挂载
三、实时同步
(一)部署Rsync守护进程
1)服务端(backup)
2)客户端(nfs01)
(二)部署inotify监控服务
(三)部署sersync实时同步服务
四、web服务(LNMP架构)
(一)安装linux操作系统(略)
(二)安装配置Nginx服务
1)yum安装Nginx服务
2)配置Nginx服务
(三)安装配置PHP服务
(四)安装配置Mysql服务
(五)Nginx和PHP建立关系
(六)Nginx和Mysql建立关系
(七)部署搭建网站页面(代码上线)
1)安装wordpress服务
2)创建数据库和登录用户
五、Nginx负载均衡(反向代理)
(一)首先四台服务器预装Nginx服务(lb01 web01/02/03)
(二)web服务器编写测试文件(web01/02/03)
(三)配置负载均衡服务器
(四)测试
六、keepalived高可用
(一)部署keepalived高可用服务(lb01/02)
(二)keepalived脑裂问题(lb01/02)
1)脑裂问题产生的原因
2)如何解决脑裂问题?
(三)如何实现keepalived自动释放VIP地址资源(lb01/02)
(四)keepalived服务双主配置(lb0/02)
(五)keepalived服务安全访问配置(lb0/02)
七、ansible自动化管理服务
(一)部署ansible批量管理服务
(1)部署SSH基于密钥对的连接(m01)
(2)部署安装ansible服务
(二)ansible模块介绍
(1)command默认模块
(2)shell(万能模块)
(3)scripts模块(万能模块)
(4)copy文件类型模块
(5)file设置文件属性模块
(6)yum模块(批量安装和卸载软件包)
(7)service模块(管理服务的运行状态)
(8)cron模块(批量设置多个主机的定时任务信息)
(9)mount模块(批量进行挂载操作)
(10)user模块(批量创建用户并设置密码信息)
(三)剧本
(1)剧本的实现步骤
(2)一键化部署Rsync服务
(3) 一键化部署全网备份项目
(4) 一键化部署NFS服务
(5) 一键化部署实时同步服务
八、网站监控服务zabbix
(一)部署安装zabbix服务
(1)服务端(zabbix)
(2)客户端(其他服务器)
(二)实现zabbix自定义监控
(1)需求:监控Nginx服务是否启动
(2)复杂的自定义监控配置(多个服务状态)
(3)报警(邮件报警、微信报警、短信和电话)
总体架构介绍
序号 | 类型 | 名称 | 外网地址 | 内网地址 | 软件 |
01 | 防火墙服务器 | firewalld | 10.0.0.81 | 172.16.1.81 | firewalld |
02 | 负载均衡服务器 | lb01 | 10.0.0.5 | 172.16.1.5 | nginx keepalived |
03 | 负载均衡服务器 | lb02 | 10.0.0.6 | 172.16.1.6 | nginx keepalived |
04 | web服务器 | web01 | 10.0.0.7 | 172.16.1.7 | nginx |
05 | web服务器 | web02 | 10.0.0.8 | 172.16.1.8 | nginx |
06 | web服务器 | web03 | 10.0.0.9 | 172.16.1.9 | nginx |
07 | 数据库服务器 | db01 | 10.0.0.51 | 172.16.1.51 | mariadb mysql |
08 | 存储服务器 | nfs01 | 10.0.0.31 | 172.16.1.31 | nfs-utils rpcbind |
09 | 备份服务器 | backup | 10.0.0.41 | 172.16.1.41 | rsync |
10 | 批量管理服务器 | m01 | 10.0.0.61 | 172.16.1.61 | ansible |
11 | 跳板机服务器 | jumpserver | 10.0.0.71 | 172.16.1.71 | jumpserver |
12 | 监控服务器 | zabbix | 10.0.0.72 | 172.16.1.72 | zabbix |
13 | 缓存服务器 | redis |
服务端:backup
客户端:web01 web02 web03 nfs01
要求:
每天晚上 00 点整在 Web 服务器上打包备份系统配置文件、网站程序目录及访问日志并通过 rsync 命令推送备份服务器 backup 上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器 backup 上) ,NFS 存储服务器同 Web 服务器,实际工作 中就是全部的服务器。
具体要求如下:
1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)
b.开机自启动的配置文件(/etc/rc.local)
c.日常脚本的目录 (/server/scripts)。
d.防火墙 iptables 的配置文件(/etc/sysconfig/iptables)。
e.自己思考下还有什么需要备份呢?
3)Web 服务器站点目录(/var/html/www)。
4)Web 服务器 A 访问日志路径(/app/logs)
5)Web 服务器保留打包后的 7 天的备份数据即可(本地留存不能多于 7 天,因为太多硬盘会 满)
6)备份服务器上,保留每周一的所有数据副本,其它要保留 6 个月的数据副本。
7)备份服务器上要按照备份数据服务器的内网 IP 为目录保存备份,备份的文件按照时间名 字保存。
8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结 果信息发给系统管理员邮箱中。
部署过程
第一步:下载安装Rsync
rpm -qa|grep rsync
yum install -y rsync
第二步:编写Rsync配置文件
[root@backup ~]# vim /etc/rsyncd.conf
##created by abin at 2020
###rsyncd.conf start##
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections =200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by abin"
第三步:创建rsync服务的虚拟用户
useradd rsync -M -s /sbin/nologin
第四步:创建备份服务认证密码文件
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第五步:创建备份目录并修改属主属组信息
mkdir /backup
chown rsync.rsync /backup/
第六步:启动备份服务
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
第一步:创建密码认证文件
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第二步:进行交互式数据传输测试
rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
web01/02/03服务器备份脚本:
mkdir -p /server/scripts
vim /server/scripts/backup.sh
#!/bin/bash
Backup_dir="/backup"
IP_info=$(hostname -i)
# create backup dir
mkdir -p $Backup_dir/$IP_info
# tar backup data
cd /
tar zchf /$Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar zchf /$Backup_dir/$IP_info/www_backup_$(date +%F_week%w).tar.gz ./var/html/www
tar zchf /$Backup_dir/$IP_info/www_log_backup_$(date +%F_week%w).tar.gz ./app/logs
# del 7 day ago data
find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null
# create finger file
find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Backup_dir/$IP_info/finger.txt
# backup push data info
rsync -az $Backup_dir/ [email protected]::backup --password-file=/etc/rsync.password
nfs01服务器备份脚本:
mkdir -p /server/scripts
vim /server/scripts/backup.sh
#!/bin/bash
Backup_dir="/backup"
IP_info=$(hostname -i)
# create backup dir
mkdir -p $Backup_dir/$IP_info
# tar backup data
cd /
tar zchf /$Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
# del 7 day ago data
find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null
# create finger file
find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Backup_dir/$IP_info/finger.txt
# backup push data info
rsync -az $Backup_dir/ [email protected]::backup --password-file=/etc/rsync.password
mkdir -p /server/scripts
vim /server/scripts/backup_server.sh
#!/bin/bash
# del 180 day ago data
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null
# check backup data
find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt
# send check mail
mail -s "check backup info for $(date +%F)" [email protected]
第一步:浏览器登录163邮箱进行配置
打开163邮箱POP3/SMIP服务
复制授权密码
第二步:配置qq邮箱
打开qq邮箱POP3/SMIP服务
第三步:编写邮件服务配置文件(追加到最后面)
vim /etc/mail.rc
set [email protected] smtp=smtp.163.com
set [email protected] smtp-auth-password=授权密码(163邮箱) smtp-auth=login
重启邮箱服务
systemctl restart postfix.service
第四步:发送邮件测试
echo "邮件内容"|mail -s "邮件主题" [email protected]
mail -s "邮件测试" [email protected]
[root@backup ~]# crontab -e
# check backup data
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
ps:
crontab -l --查看已设定的定时任务
crontab -e
# backup data
0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null
服务端:nfs01
客户端:web01/02/03
第一步:下载安装软件
rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind
第二步:编写nfs服务配置文件
vim /etc/exports
/data 172.16.1.0/24(rw,sync)
第三步:创建一个存储目录
mkdir /data
chown nfsnobody.nfsnobody /data
第四步:先启动rpc服务
systemctl start rpcbind.service
systemctl enable rpcbind.service
systemctl status rpcbind.service
再启动nfs服务
systemctl start nfs
systemctl enable nfs
systemctl status nfs
第一步:安装nfs服务
yum install -y nfs-utils
第二步:实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt
ps:卸载设备
umount -lf /mnt
-l 不退出挂载点目录进行卸载
-f 强制进行卸载操作
方法一:利用rc.local开机自动加载脚本文件
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
chmod a+x /etc/rc.d/rc.local
方法二:利用fstab配置文件
vim /etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
补充:
1.NFS配置参数权限
rw -- 存储目录是否有读写权限
ro -- 存储目录是否时只读权限
sync -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
async -- 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
no_root_squash -- 不要将root用户身份进行转换
root_squash -- 将root用户身份进行转换
all_squash -- 将所有用户身份都进行转换
no_all_squash -- 不要将普通用户身份进行转换
2.mount命令参数
rw --- 实现挂载后挂载点目录可读可写 (默认)
ro --- 实现挂载后挂载点目录可读可写
suid --- 在共享目录中可以让setuid权限位生效 (默认)
nosuid --- 在共享目录中可以让setuid权限位失效 提高共享目录的安全性
exec --- 共享目录中的执行文件可以直接执行
noexec --- 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性
auto --- 可以实现自动挂载 mount -a 实现加载fstab文件自动挂载
noauto --- 不可以实现自动挂载
nouser --- 禁止普通用户可以卸载挂载点
user --- 允许普通用户可以卸载挂载点
3.NFS服务挂载不上排查方法:
服务端进行排查:
1. 检查nfs进程信息是否注册
rpcinfo -p localhost/172.16.1.31
问题原因:
服务启动顺序不对,没有启动nfs服务
2. 检查有没有可用存储目录
showmount -e 172.16.1.31
问题原因:
配置文件编写有问题,重启nfs服务
3. 在服务端进行挂载测试
是否能够在存储目录中创建或删除数据
客户端测试:
网络问题
ping 172.16.1.31
telnet 172.16.1.31 111
服务端:backup
客户端:nfs01
第一步:下载安装Rsync
rpm -qa|grep rsync
yum install -y rsync
第二步:编写Rsync配置文件
[root@backup ~]# vim /etc/rsyncd.conf
##created bu abin at 2020
###rsyncd.conf start##
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections =200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by abin"
第三步:创建rsync服务的虚拟用户
useradd rsync -M -s /sbin/nologin
第四步:创建备份服务认证密码文件
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第五步:创建备份目录并修改属主属组信息
mkdir /backup
chown rsync.rsync /backup/
第六步:启动备份服务
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
第一步:创建密码认证文件
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第二步:进行交互式数据传输测试
rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
客户端:nfs01
第一步:安装inotify-tools服务
yum install -y inotify-tools
客户端:nfs01
第一步:下载sersync软件上传至nfs服务器
https://github.com/wsgzao/sersync
第二步:解压sersync软件包
unzip sersync_installdir_64bit.zip
mv sersync_installdir_64bit/* /usr/local/
第三步:修改配置文件
[root@nfs01 /usr/local/sersync]# vim conf/confxml.xml
24
25
30
31
32
第四步:
[root@nfs01 bin]# export PATH="$PATH:/usr/local/sersync/bin"
[root@nfs01 bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin
[root@nfs01 /usr/local/sersync/bin]# chmod a+x sersync
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# sersync -dro /usr/local/sersync/conf/confxml.xml 启动实时同步服务
第五步:实现开机自启
[root@nfs01 ~]# vim /etc/profile
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin'
[root@nfs01 ~]# vim /etc/rc.local
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
[root@nfs01 ~]# chmod a+x /etc/rc.d/rc.local
ps:
[root@nfs01 ~]# yum install -y psmisc
[root@nfs01 ~]# killall sersync 停止实时同步服务
第一个历程: 更新nginx官方yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
第二个历程: yum安装nginx软件
yum install -y nginx
第三个历程: 启动nginx服务,检查服务是否安装正确
systemctl start nginx
systemctl enable nginx
测试访问nginx服务
vim /etc/nginx/nginx.conf --- 主配置文件
第一个部分: 配置文件主区域配置
user www; --- 定义worker进程管理的用户
worker_processes 2; ---定义有几个worker进程 == CPU核数 / 核数的2倍
error_log /var/log/nginx/error.log warn; --- 定义错误日志路径信息
pid /var/run/nginx.pid; --- 定义pid文件路径信息
第二个部分: 配置文件事件区域
events {
worker_connections 1024; --- 一个worker进程可以同时接收1024访问请求
}
第三个部分: 配置http区域
http {
include /etc/nginx/mime.types; --- 加载一个配置文件
default_type application/octet-stream; --- 指定默认识别文件类型
log_format oldboy '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
--- 定义日志的格式
access_log /var/log/nginx/access.log oldboy;
--- 指定日志路径
sendfile on; ???
#tcp_nopush on; ???
keepalive_timeout 65; --- 超时时间
#gzip on;
include /etc/nginx/conf.d/*.conf; --- 加载一个配置文件
}
补充: nginx的进程
master process: 主进程 ---管理服务是否能够正常运行 boss
worker process: 工作进程 ---处理用户的访问请求 员工
1.使用remi源安装php
yum remove -y epel-release.noarch --(如果没有这个包可以不用卸载)
yum install -y epel-release
yum install -y https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
yum --enablerepo=remi-php71 install -y php php-cli php-common php-devel php-embedded php-gd php-mbstring php-pdo php-xml php-fpm php-mysqlnd php-opcache php-mcrypt php-pecl-memcached php-pecl-mongodb php-pecl-redis
2.编写配置文件(24/26行)
vim /etc/php-fpm.d/www.conf
user = www
group = www
PS:创建一个www用户
3.启动php服务
systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl status php-fpm.service
安装数据库软件
[root@web01 ~]# yum install mariadb-server mariadb -y
启动数据库服务
[root@web01 ~]# systemctl start mariadb.service
[root@web01 ~]# systemctl enable mariadb.service
创建数据库的密码信息
[root@web01 ~]# mysqladmin -u root password '123456'
[root@web01 ~]# mysql -u root -p123456 --密码登录
1.编写nginx文件
[root@web01 /etc/nginx/conf.d]# vim www.conf
server {
listen 80;
server_name www.abins.cn;
location / {
root /html/www;
index index.php index.html;
}
location ~ \.php$ {
root /html/www;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
}
[root@web01 /etc/nginx/conf.d]# systemctl restart nginx
2.编写动态资源文件
[root@web01 /html/www]# vim test_php.php
3.配置本地DNS解析
在C:\Windows\System32\drivers\etc\hosts文件
后面追加
10.0.0.7 www.cxt.com
4.进行访问测试
www.cxt.com/test_php.php
1.编写php代码文件
[root@web02 /html/www]# vim test_mysql.php
2.进行访问测试
第一个历程: 获取代码信息(git)---使用开源的网站代码
www网站页面: http://www.dedecms.com/
bbs网站页面: http://www.discuz.net/forum.php
blog网站页面: https://cn.wordpress.org/
wecenter网站页面: http://www.wecenter.com/?copyright
第二个历程: 将代码解压,将解压后信息放入到站点目录中
[root@web01 /html]# rz -E
rz waiting to receive.
[root@web01 /html]# ll
-rw-r--r-- 1 root root 11199196 Apr 7 20:40 wordpress-5.2.1.tar.gz
[root@web02 /html]# tar xf wordpress-5.2.1.tar.gz
[root@web01 /html]# ll
drwxr-xr-x 5 nobody 65534 4096 May 22 2019 wordpress
-rw-r--r-- 1 root root 11199196 Apr 7 20:40 wordpress-5.2.1.tar.gz
drwxr-xr-x 2 www www 48 May 24 15:17 www
[root@web01 /html]# mv wordpress/* www/
第三个历程: 修改站点目录权限
chown -R www.www www
第四个历程: 进行网站页面初始化操作
www.cxt.com/index.php
[root@web01 ~]# mysql -u root -p123456 --以root身份登录MySQL
MariaDB [(none)]> create database wordpress; --创建wordpress数据库
Query OK, 1 row affected (0.09 sec)
MariaDB [(none)]> show databases; --检查wordpress数据库是否创建成功
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'localhost' identified by '123456'; --创建wordpress用户,密码为123456
MariaDB [(none)]> select user,host from mysql.user; --查看数据库user表的用户信息和主机信息
+-----------+-----------+
| user | host |
+-----------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| wordpress | localhost |
| | web02 |
| root | web02 |
+-----------+-----------+
7 rows in set (0.10 sec)
MariaDB [(none)]> flush privileges; --刷新数据库信息
看到这个界面,那么恭喜你网站搭建成功啦!
服务端:lb01
客户端:web01/02/03
vim /etc/yum.repos.d/nginx.repo ##更新nginx的官方yum源
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
yum install -y nginx ##安装nginx服务
systemctl start nginx ##启动nginx服务
[root@web01 /html/www]# vim fzjh.html
Welcome to nginx!
Welcome to nginx! 10.0.0.7
--注意3台web服务器均需编辑
ps:注意这里有个坑
小编的web服务器站点目录是/html/www,所以需要修改web服务器的默认nginx配置文件站点目录
即:
[root@lb01 /etc/nginx/conf.d]# vim default.conf
root /html/www;
否则会报404 not found错误
#当然如果你是默认站点目录/usr/share/nginx/html/时不需要修改
[root@lb01 /etc/nginx]# vim nginx.conf
user www;
[root@lb01 /etc/nginx/conf.d]# vim www.conf
upstream cxt {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.cxt.com;
location / {
proxy_pass http://cxt;
client_max_body_size 100m;
}
}
server {
listen 80;
server_name bbs.cxt.com;
location / {
proxy_pass http://cxt;
client_max_body_size 100m;
}
}
打开浏览器输入www.cxt.com/fzjh.html
不断刷新,10.0.0.7/10.0.0.8/10.0.0.9交替出现时说明负载均衡配置成功
下面时通过抓包工具抓取的http记录
第一个历程: 准备两台服务器并且均配置好负载均衡服务 (lb01 lb02)
第二个历程: 安装部署keepalived软件 (lb01 lb02)
yum install -y keepalived
第三个历程: 编写keepalived配置文件(lb01 lb02)
lb01配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance yb {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
lb02配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance yb {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
第四个历程: 启动keepalived服务
systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived
第五个历程: 修改域名和IP地址解析关系
windows修改hosts主机文件
10.0.0.3 www.cxt.com
第六个历程:测试
当lb01的keepalived服务停止运行时,lb02收不到来自lb01的组播信息会夺取vip地址信息10.0.0.3成为新的主,保证负载均衡正常运作。
出现原因:
高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
物理原因:
高可用集群之间通讯线路出现问题
逻辑原因:
有安全策略阻止(防火墙等)
01. 进行监控,发出告警
备服务器出现VIP地址的原因:
a 主服务器出现故障
b 出现脑裂问题
监控脑裂的shell脚本:
[root@lb02 ~]# vim /server/scripts/naolie.sh
#!/bin/bash
ip a s eth0|grep "10.0.0.3" >/dev/null
if [ $? -eq 0 ]
then
echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived [email protected]
fi
加入定时任务每隔一分钟执行一次
corntab -e
补充:shell脚本进行比较判断
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于
02. 直接关闭一台服务器的keepalived服务
第一个历程: 编写监控nginx服务状态监控
vim /server/scripts/check_web.sh
#!/bin/bash
num=`ps -ef|grep -c [n]ginx`
if [ $num -lt 2 ]
then
systemctl stop keepalived
fi
ps:别忘了给脚本x权限
第二个历程: 测试监控脚本
[root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 3
weight 2
}
vrrp_instance yb {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
track_script {
check_web
}
}
第三个历程: 测试
停掉nginx服务的同时keepailved服务也会自动停掉
这样vip地址资源会释放给备,备会成为新的主,保证用户可以正常访问
systemctl stop nginx
systemctl status keepalived
第一个历程: 编写lb01服务器keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance yb {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance cxt {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
第二个历程: 编写lb02服务器keepalived配置文件
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance yb {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance cxt {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
第三个历程: 进行抓包测试
进行抓包查看:
www.cxt.com/fzjh --- 10.0.0.3(10.0.0.5)
10.0.0.1 --- 10.0.0.3
10.0.0.5 --- 10.0.0.7
10.0.0.7 --- 10.0.0.5
10.0.0.3 --- 10.0.0.1
bbs.test.com/fzjh --- 10.0.0.4(10.0.0.6) --若访问bbs.cxt.com/fzjh.html出现404错误,可能是lb02的www.conf中没有配置bbs.cxt.com的负载均衡
10.0.0.1 --- 10.0.0.4
10.0.0.6 --- 10.0.0.7
10.0.0.7 --- 10.0.0.6
10.0.0.4 --- 10.0.0.1
通过设置监听地址限制用户访问通道:
外网接口只开通10.0.0.3/10.0.0.4
第一个历程: 修改内核文件
异常问题:
01. 如何设置监听网卡上没有的地址
解决: 需要修改内核信息
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p
第二个历程: 修改nginx负载均衡文件
lb01/lb02
vim /etc/nginx/conf.d/lb.conf
upstream cxt {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 10.0.0.3:80;
server_name www.cxt.com;
location / {
proxy_pass http://cxt;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_502 http_403;
}
}
server {
listen 10.0.0.4:80;
server_name bbs.cxt.com;
location / {
proxy_pass http://cxt;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第三个历程: 重启nginx负载均衡服务
systemctl restart nginx --涉及到ip地址的修改要用restart重启
服务端:m01
客户端:其他服务器
PS:selinux需要关闭,不然ansible连接管理主机会报错
第一步:管理端创建密钥对信息
[root@m01 ~]# ssh-keygen -t dsa --默认一直回车
第二步:管理端需要将公钥进行分发
[root@m01 /server/scripts]# yum install -y sshpass
[root@m01 /server/scripts]# vim fenfa_pub_key.sh --注意脚本x权限
#!/bin/bash
for ip in 7 31 41
do
echo "============ host 172.16.1.$ip pub-key start fenfa============="
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected].$ip "-o StrictHostKeyChecking=no" &>/dev/null
echo "host 172.16.1.$ip fenfa success."
echo "============ host 172.16.1.$ip fenfa end============="
done
[root@m01 /server/scripts]# sh fenfa_pub_key.sh
============ host 172.16.1.5 pub-key start fenfa=============
host 172.16.1.5 fenfa success.
...
第三步:进行ssh远程连接测试
[root@m01 /server/scripts]# vim check_pub_key.sh --注意脚本x权限
#!/bin/bash
CMD=$1 #--传参(执行脚本的时候后面可以写一些命令,不用去调整脚本)
for ip in {5,6,7,8,9,31,51}
do
echo "==================== host 172.16.1.$ip check ==================== "
ssh 172.16.1.$ip $CMD
echo ""
done
[root@m01 /server/scripts]# sh check_pub_key.sh "hostname"
==================== host 172.16.1.5 check ====================
lb01
...
第一步:安装ansible软件
[root@m01 ~]# yum install -y ansible --- 需要依赖epel的yum源
第二步:编写主机清单文件
[root@m01 ~]# vim /etc/ansible/hosts
#定义可以管理的主机信息
172.16.1.5
172.16.1.6
172.16.1.7
172.16.1.8
172.16.1.9
172.16.1.31
172.16.1.51
第三步:测试是否可以管理多台主机
[root@m01 ~]# ansible all -a "hostname"
172.16.1.5 | CHANGED | rc=0 >>
lb01
...
ps:补充
/etc/ansible/ansible.cfg --- ansible服务配置文件
/etc/ansible/hosts --- 主机清单文件 定义可以管理的主机信息
/etc/ansible/roles --- 角色目录
模块的应用语法格式:
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
ansible软件输出颜色说明:
01. 绿色信息: 查看主机信息/对主机未做改动
02. 黄色信息: 对主机数据信息做了修改
03. 红色信息: 命令执行出错了
04. 粉色信息: 忠告信息
05. 蓝色信息: 显示ansible命令执行的过程
command – Executes a command on a remote node
在一个远程主机上执行一个命令
简单用法:
[root@m01 ~]# ansible 172.16.1.7 -m command -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
扩展用法:
1)chdir Change into this directory before running the command.
在执行命令之前对目录进行切换
ansible 172.16.1.7 -m command -a "chdir=/tmp/ touch test.txt"
2)creates If it already exists, this step won't be run.
如果文件存在,不执行命令操作
ansible 172.16.1.7 -m command -a "creates=/tmp/ touch test.txt"
skipped, since /tmp/ exists --跳过,因为/tmp/中存在
3)removes If it already exists, this step will be run.
如果文件存在,继续执行
ansible 172.16.1.7 -m command -a "removes=/tmp/ touch test.txt"
4) free_form(required)
The command module takes a free form command to run.
There is no parameter actually named 'free form'. See the examples!
使用command模块的时候,-a参数后面必须写上一个合法linux命令信息
注意事项:
有些符号信息无法识别: "<", ">", "|", ";" and "&"
shell – Execute commands in nodes
在节点上执行操作
简单用法:
和command默认模块用法一致
实践应用:利用shell模块远程执行脚本
第一步:在管理主机编写脚本
[root@m01 /server/scripts]# vim yum.sh
#!/bin/bash
##yum
yum install -y htop
第二步:将脚本发送到远程主机
[root@m01 /server/scripts]# scp -rp ./yum.sh 172.16.1.7:/server/scripts
yum.sh 100% 39 37.0KB/s 00:00
第三步:使用file模块为脚本增加可执行权限
[root@m01 ~]# ansible 172.16.1.7 -m file -a "dest=/server/scripts/yum.sh mode=777"
第四步:使用ansible命令执行脚本
[root@m01 ~]# ansible 172.16.1.7 -m shell -a "chdir=/server/scripts sh yum.sh"
PS:scripts模块参数功能和command模块类似
第一个步骤: 编写一个脚本
第二个步骤: 运行ansible命令执行脚本
copy – Copies files to remote locations
将数据信息进行批量分发
基本用法:
ansible 172.16.1.7 -m copy -a "src=/etc/hosts dest=/etc/"
将管理主机/etc目录中的hosts文件分发到远程主机的/etc目录中
172.16.1.7 | CHANGED => { --- 对哪台主机进行操作
"changed": true, --- 是否对主机信息进行改变
"checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值
"dest": "/etc/hosts", --- 显示目标路径信息
"gid": 0, --- 显示复制后文件gid信息
"group": "root", --- 显示复制后文件属组信息
"md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值
"mode": "0644", --- 显示复制后文件权限信息
"owner": "root", --- 显示复制后文件属主信息
"size": 401, --- 显示文件的大小信息
"src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source",
"state": "file", --- 显示文件的类型信息
"uid": 0 --- 显示复制后文件uid信息
}
扩展用法:
01. 在传输文件时修改文件的属主和属组信息
ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=rsync group=rsync"
02. 在传输文件时修改文件的权限信息
ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ mode=1777"
03. 在传输数据文件信息时对远程主机源文件进行备份
ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"
04. 创建一个文件并直接编辑文件的信息
ansible 172.16.1.7 -m copy -a "content='123456' dest=/etc/rsync.password"
content:文件内容
dest:远端文件路径
PS: ansible软件copy模块复制目录信息
ansible 172.16.1.7 -m copy -a "src=/tmp dest=/tmp"
src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制
ansible 172.16.1.7 -m copy -a "src=/tmp/ dest=/tmp"
src后面目录有/: 只将目录下面的内容都进行远程传输复制
file – Sets attributes of files
设置文件属性信息
基本用法:
-dest 远端文件或目录路径
-owner 属主
-group 属组
-mode 权限
ansible 172.16.1.7 -m file -a "dest=/etc/hosts owner=www group=www mode=666"
扩展用法:
1. 可以利用模块创建数据信息 (文件 目录 链接文件)
state 参数
=absent --- 缺席/删除数据信息
=directory --- 创建一个目录信息
=file --- 检查创建的数据信息是否存在 绿色存在 红色不存在
=hard --- 创建一个硬链接文件
=link --- 创建一个软链接文件
=touch --- 创建一个文件信息
创建目录信息:
ansible 172.16.1.7 -m file -a "dest=/test/ state=directory"
ansible 172.16.1.7 -m file -a "dest=/test/test01/test02/ state=directory"
创建文件信息:
ansible 172.16.1.7 -m file -a "dest=/test/test.txt state=touch"
创建链接文件信息:
ansible 172.16.1.7 -m file -a "src=/test/test.txt dest=/test/test_hard.txt state=hard"
ansible 172.16.1.7 -m file -a "src=/test/test.txt dest=/test/test_link.txt state=link"
2. 可以利用模块删除数据信息
ansible 172.16.1.7 -m file -a "dest=/test/test.txt state=absent"
ansible 172.16.1.7 -m file -a "dest=/test/ state=absent"
补充:
recurse 递归
Recursively set the specified file attributes on directory contents.
递归地对目录内容设置指定的文件属性。
This applies only when state is set to directory.
recurse=yes/no
仅当状态设置为“目录”时才适用。
[root@m01 ~]# ansible 172.16.1.41 -m file -a "dest=/backup owner=rsync recurse=yes"
name --- 指定安装软件名称
state --- 指定是否安装软件
installed --- 安装软件
present
latest
absent --- 卸载软件
removed
ansible 172.16.1.7 -m yum -a "name=iotop state=installed"
name: --- 指定管理的服务名称
state: --- 指定服务状态
started 启动
restarted 重启
stopped 停止
enabled=yes/no --- 指定服务是否开机自启动
ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"
crontab -e
* * * * * 定时任务动作
分 时 日 月 周
minute: # Minute when the job should run ( 0-59, *, */2, etc )
设置分钟信息
hour: # Hour when the job should run ( 0-23, *, */2, etc )
设置小时信息
day: # Day of the month the job should run ( 1-31, *, */2, etc )
设置日期信息
month: # Month of the year the job should run ( 1-12, *, */2, etc )
设置月份信息
weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
设置周信息
job 用于定义定时任务需要干的事情
基本用法:
ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
扩展用法:
01. 给定时任务设置注释信息
ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
02. 如何删除指定定时任务
ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"
PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务
03. 如何批量注释定时任务
ansible 172.16.1.31 -m cron -a "name='time sync' job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"
mount: 批量进行挂载操作
src: 需要挂载的存储设备或文件信息
path: 指定目标挂载点目录
fstype: 指定挂载时的文件系统类型
state
present/mounted --- 进行挂载
present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载
mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 *****
absent/unmounted --- 进行卸载
absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载
unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 *****
基本用法:
ansible 172.16.1.31 -m user -a "name=www"
扩展用法:
1) 指定用户uid信息
ansible 172.16.1.31 -m user -a "name=www uid=6666"
2) 指定用户组信息
ansible 172.16.1.31 -m user -a "name=www group=www"
3) 批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
4) 给指定用户创建密码
PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置
生成密文密码信息方法:
方法一:
ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'www') }}"
localhost | SUCCESS => {
"msg": "$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1"
}
方法二:(忽略)
mkpasswd --method=sha-512
方法三:
yum install -y python-pip
pip install passlib
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$rJJeiIerQ8p2eR82$uE2701X7vY44voF4j4tIQuUawmTNHEZhs26nKOL0z39LWyvIvZrHPM52Ivu9FgExlTFgz1VTOCSG7KhxJ9Tqk.
ansible 172.16.1.31 -m user -a 'name=oldboy08 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'
第一步:配置主机清单
如何配置主机清单
第一种方式: 分组配置主机信息
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[data]
172.16.1.31
172.16.1.41
操作过程
[root@m01 ansible-playbook]# ansible data -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.41 | CHANGED | rc=0 >>
backup
[root@m01 ansible-playbook]# ansible web -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
第二种方式: 主机名符号匹配配置
[web]
172.16.1.[7:9]
[web]
web[01:03]
第三种方式: 跟上非标准远程端口
[web]
web01:52113
172.16.1.7:52113
第四种方式: 主机使用特殊的变量
[web]
172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
第五种方式: 主机组名嵌入配置
[rsync:children] --- 嵌入子组信息
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
[root@m01 /etc/ansible]# ansible rsync -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01.com
172.16.1.41 | CHANGED | rc=0 >>
backup
172.16.1.31 | CHANGED | rc=0 >>
nfs01
[web:vars] --- 嵌入式变量信息
ansible_ssh_host=172.16.1.7
ansible_ssh_port=52113
ansible_ssh_user=root
ansible_ssh_pass=123456
[web]
web01
第二步:编写剧本
剧本编写规范: pyyaml -- 三点要求
1. 合理的信息缩进 两个空格表示一个缩进关系
标题一
标题二
标题三
PS: 在ansible中一定不能用tab进行缩进
2. 冒号的使用方法
hosts: 172.16.1.41
tasks:
yum: name=xx
PS: 使用冒号时后面要有空格信息
以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格
3. 短横线应用 -(列表功能)
- 张三
男
- 打游戏
- 运动
- 李四
女
学习
湖南
- 王五
男
运动
深圳
PS: 使用短横线构成列表信息,短横线后面需要有空格
剧本编写常见错误:
01. 剧本语法规范是否符合(空格 冒号 短横线)
02. 剧本中模块使用是否正确
03. 剧本中一个name标识下面只能写一个模块任务信息
04. 剧本中尽量不要大量使用shell模块
第三步:执行剧本
如何执行剧本:
第一个步骤: 检查剧本的语法格式
ansible-playbook --syntax-check rsync_server.yaml
第二个步骤: 模拟执行剧本
ansible-playbook -C rsync_server.yaml
第三个步骤: 直接执行剧本
ansible-playbook rsync_server.yaml
1.命令实现
服务端的操作
第一个历程安装软件:
ansible 172.16.1.41 -m yum -a "name=rsync state=installed"
第二个历程编写文件:
ansible 172.16.1.41 -m copy -a "src=/etc/rsyncd.conf dest=/etc/"
第三个历程创建用户
ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
第四个历程创建目录
ansible 172.16.1.41 -m file -a "dest=/backup state=directory owner=rsync group=rsync"
第五个历程创建密码文件
ansible 172.16.1.41 -m copy -a "content='rsync_backup:123456' dest=/etc/rsync.password mode=600"
第六个历程启动服务
ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"
客户端的操作:
第一个历程: 创建密码文件
ansible 客户端地址 -m copy -a "content='rsync_backup:123456' dest=/etc/rsync.password mode=600"
2.剧本实现
[root@m01 ansible-playbook]# vim rsync_server.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin
- name: 04-create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 05-create password file
copy: content=rsync_backup:123456 dest=/etc/rsync.password mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_clients
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create password file
copy: content=123456 dest=/etc/rsync.password mode=600
- name: 03-create test file
file: dest=/tmp/test.txt state=touch
- name: 04-check test
shell: rsync -avz /tmp/test.txt [email protected]::backup --password-file=/etc/rsync.password
服务端:zabbix
客户端:其他服务器
第一步:配置zabbix仓库
[root@m01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@m01 ~]# sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
第二步: 下载安装zabbix服务端相关软件
zabbix服务程序软件: zabbix-server-mysql
zabbix服务web软件: zabbix-web-mysql httpd php
数据库服务软件: mariadb-server
[root@m01 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server
[root@m01 ~]# systemctl start mariadb.service && systemctl enable mariadb.service
第三步:软件配置
vim /etc/zabbix/zabbix_server.conf
126 DBPassword=zabbix
vim /etc/httpd/conf.d/zabbix.conf
21 php_value date.timezone Asia/Shanghai
第四步:编写配置数据库服务
systemctl start mariadb.service
systemctl status mariadb.service
mysql
create database zabbix character set utf8 collate utf8_bin; --创建zabbix数据库--zabbix
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; --创建数据库管理用户
zcat /usr/share/doc/zabbix-server-mysql-4.0.21/create.sql.gz|mysql -uzabbix -pzabbix zabbix --在zabbix数据库中导入相应的表信息
chown -R apache /usr/share/zabbix/assets --必须有
第五个里程: 启动zabbix程序相关服务
数据库服务 zabbix服务 httpd服务
systemctl start zabbix-server.service httpd mariadb.service
systemctl enable zabbix-server.service httpd mariadb.service
说明: 至此zabbix-server命令行操作结束
LNMP: nginx php mysql
LAMP: apache(php模块) mysql
第六个里程: 登录zabbix服务端web界面, 进行初始化配置
http://10.0.0.71/zabbix/setup.php
10051 zabbix-server 服务端端口号
10050 zabbix-agent 客户端端口号
/etc/zabbix/web/zabbix.conf.php -- 记录web页面初始化信息
第七个里程: 登录zabbix服务web页面
http://10.0.0.71/zabbix/
用户名Admin 密码zabbix
第一个里程: 下载安装zabbix yum 源文件
LTS long time support
1) aliyun zabbix yum 源
2) 清华源
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
第二个里程: 下载安装zabbix客户端软件
yum install -y zabbix-agent
或者
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
第三个里程: 编写zabbix客户端配置文件
vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.16.1.71
第四个里程: 启动zabbix-agent服务
[root@web01 ~]# systemctl start zabbix-agent
[root@web01 ~]# netstat -lntup|grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 4509/zabbix_agentd
tcp 0 0 :::10050 :::* LISTEN 4509/zabbix_agentd
1) 在zabbix-agent进行配置文件编写
第一步: 编写自定义监控命令
ps -ef|grep -c [n]ginx
第二步: 编写zabbix-agent配置文件
第一种方法: 直接修改zabbix-agent配置文件参数
UserParameter=
第二种方法: 在/etc/zabbix/zabbix_agentd.d/目录中编写自定义监控文件
vim web_server.conf
UserParameter=键(变量名),值(变量信息)
UserParameter=web_state,ps -ef|grep -c [n]ginx
第三步: 重启zabbix-agent服务
systemctl restart zabbix-agent
2) 在zabbix-server命令行进行操作
第一步: 检测自定义监控信息是否正确
yum install -y zabbix-get
zabbix_get -s 172.16.1.7 -k 'web_state'
ps:
-s 表示要监控的主机IP 与zabbix-agent配置文件里的信息一致
-k key即键信息
3) 在zabbix-server网站页面进行配置(如下图所示)
第一步: 进入到创建监控项页面:
配置---主机---选择相应主机的监控项
第二步: 监控项页面如何配置
名称 键值 更新间隔时间 应用集
第三步: 检查是否收集到监控信息
1) 在zabbix-agent端编写配置文件
vim server_state.conf
UserParameter=server_state[*],netstat -lntup|grep -c $1
2) 在zabbix-server命令测试
zabbix_get -s 172.16.1.7 -k 'server_state[22]'
3) 修改配置页面
键值: server_state[22]
1.邮件信息报警
第一个历程: 创建触发器
配置---主机---选择相应监控主机触发器---创建触发器
设置好表达式
{web01:server_state[nginx].last()}<=2
{监控主机名称:键值名称.调用的表达式函数}<=2
第二个历程: 修改动作配置
配置---动作---将默认动作进行开启
第三个历程: 建立和163邮箱服务关系
管理---报警媒介类型---创建报警媒介
第四个历程: 定义接收报警的邮件地址
小人头--报警媒介--设置收件人信息
2.微信报警
第一个历程: 需要注册企业微信,并进行配置
我的企业:
01. 获取企业id: ww32d68104ab5f51b0
02. 获取企业二维码: 允许员工加入
管理工具:
01. 成员加入---进行审核通过
应用小程序:
01. 进行创建
02. 收集程序信息
AgentId: 1000006
Secret: RvQYpaCjWbYMCcwhnPqg1ZYcEGB9cOQCvvlkn-ft6j4
第二个历程: 编写脚本(python)
cat /etc/zabbix/zabbix-server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts --- 放置告警脚本
执行脚本报错问题解决:
01. 问题: No module named requests
yum install -y python-pip
pip install requests
02. 问题: 脚本执行语法
第三个历程: 修改添加报警媒介---定义了发微信配置
第四个历程: 配置接收微信的人员
3.短信和电话:
利用第三方短信电话报警平台
01. 利用阿里大鱼(收费)
https://yq.aliyun.com/articles/658524?spm=a2c4e.11155472.0.0.d821153fAjrH3q --- 自行研究
02. 利用onealert发送告警
第一个历程: 配置报警平台
01. 配置--应用--选择zabbix报警
02. 配置--通知策略
03. 配置--分派策略