Linux运维企业架构项目实战系列

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防火墙服务器firewalld10.0.0.81172.16.1.81firewalld
02负载均衡服务器lb0110.0.0.5172.16.1.5nginx keepalived
03负载均衡服务器lb0210.0.0.6172.16.1.6nginx keepalived
04web服务器web0110.0.0.7172.16.1.7nginx
05web服务器web0210.0.0.8172.16.1.8nginx
06web服务器web0310.0.0.9172.16.1.9nginx
07数据库服务器db0110.0.0.51172.16.1.51mariadb mysql
08存储服务器nfs0110.0.0.31172.16.1.31nfs-utils rpcbind
09备份服务器backup10.0.0.41172.16.1.41rsync
10批量管理服务器m0110.0.0.61172.16.1.61ansible
11跳板机服务器jumpserver10.0.0.71172.16.1.71jumpserver
12监控服务器zabbix10.0.0.72172.16.1.72zabbix
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守护进程

1)服务端(backup)

第一步:下载安装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

2)客户端(web01/02/03 nfs01)

第一步:创建密码认证文件
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第二步:进行交互式数据传输测试
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

(二)编写脚本文件

1)客户端脚本编写

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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

2)服务端

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)" 1781668237@qq.com </tmp/check.txt

sh -x backup_server.sh   --检测脚本

 

(三)配置邮件服务

1)服务端

第一步:浏览器登录163邮箱进行配置
打开163邮箱POP3/SMIP服务
复制授权密码

第二步:配置qq邮箱
打开qq邮箱POP3/SMIP服务

第三步:编写邮件服务配置文件(追加到最后面)
vim /etc/mail.rc

set from=yb1781668237@163.com smtp=smtp.163.com
set smtp-auth-user=yb1781668237@163.com smtp-auth-password=授权密码(163邮箱) smtp-auth=login

重启邮箱服务
systemctl restart postfix.service

第四步:发送邮件测试
echo "邮件内容"|mail -s "邮件主题" 1781668237@qq.com
mail -s "邮件测试" 1781668237@qq.com </dev/null

(四)定时任务(实现自动完成全网数据备份)

1)服务端

[root@backup ~]# crontab -e

# check backup data
0 5 * * *  /bin/sh /server/scripts/backup_server.sh &>/dev/null

ps:
crontab -l --查看已设定的定时任务

2)客户端(web01/02/03 nfs01)

crontab -e 
# backup data
0 0 * * *  /bin/sh /server/scripts/backup.sh &>/dev/null

 

 

二、NFS存储共享服务

服务端:nfs01

客户端:web01/02/03

1)服务端

第一步:下载安装软件
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

2)客户端(web01/02/03)

第一步:安装nfs服务
yum install -y nfs-utils

第二步:实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt

ps:卸载设备
umount -lf /mnt
-l 不退出挂载点目录进行卸载
-f 强制进行卸载操作

3)实现开机自动挂载

方法一:利用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守护进程

1)服务端(backup)

第一步:下载安装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

2)客户端(nfs01)

第一步:创建密码认证文件
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
第二步:进行交互式数据传输测试
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

(二)部署inotify监控服务

客户端:nfs01

第一步:安装inotify-tools服务
yum install -y inotify-tools

(三)部署sersync实时同步服务

客户端: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         <localpath watch="/data">
25             <remote ip="172.16.1.41" name="backup"/>
30             <commonParams params="-az"/>
31             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
32             <userDefinedPort start="true" port="873"/><!-- port=874 -->

第四步:
[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                     停止实时同步服务  

 

 

四、web服务(LNMP架构)

(一)安装linux操作系统(略)

(二)安装配置Nginx服务

1)yum安装Nginx服务

第一个历程: 更新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服务

2)配置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:  工作进程	---处理用户的访问请求         员工  

(三)安装配置PHP服务

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

(四)安装配置Mysql服务

安装数据库软件
[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   --密码登录

(五)Nginx和PHP建立关系

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 
<?php
phpinfo();
?>

3.配置本地DNS解析
在C:\Windows\System32\drivers\etc\hosts文件
后面追加
10.0.0.7            www.cxt.com

4.进行访问测试
www.cxt.com/test_php.php

(六)Nginx和Mysql建立关系

1.编写php代码文件
[root@web02 /html/www]# vim test_mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
//$link_id=mysql_connect('主机名','用户','密码');
//mysql -u用户 -p密码 -h 主机
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
     echo "mysql successful by root !\n";
  }else{
     die("Connection failed: " . mysqli_connect_error());
   }
?>
2.进行访问测试

(七)部署搭建网站页面(代码上线)

1)安装wordpress服务

第一个历程: 获取代码信息(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

2)创建数据库和登录用户

[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;   --刷新数据库信息

看到这个界面,那么恭喜你网站搭建成功啦!

 

五、Nginx负载均衡(反向代理)

服务端:lb01

客户端:web01/02/03

(一)首先四台服务器预装Nginx服务(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服务

(二)web服务器编写测试文件(web01/02/03)

[root@web01 /html/www]# vim fzjh.html
<html>  
<head>  
<title>Welcome to nginx!</title>  
</head>  
<body bgcolor="white" text="black">  
<center><h1>Welcome to nginx! 10.0.0.7</h1></center>    --注意3台web服务器均需编辑
</body>  
</html>

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记录

 

六、keepalived高可用

(一)部署keepalived高可用服务(lb01/02)

第一个历程: 准备两台服务器并且均配置好负载均衡服务 (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成为新的主,保证负载均衡正常运作。

(二)keepalived脑裂问题(lb01/02)

1)脑裂问题产生的原因

    出现原因: 
    高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址

    物理原因:
    高可用集群之间通讯线路出现问题
    逻辑原因:
    有安全策略阻止(防火墙等)

2)如何解决脑裂问题?

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  1781668237@qq.com
fi
    
    加入定时任务每隔一分钟执行一次
    corntab -e
    补充:shell脚本进行比较判断
    -eq  等于
    -ne  不等于
    -lt  小于
    -gt  大于
    -le  小于等于
    -ge  大于等于
    
02. 直接关闭一台服务器的keepalived服务

(三)如何实现keepalived自动释放VIP地址资源(lb01/02)

第一个历程: 编写监控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   

(四)keepalived服务双主配置(lb0/02)

第一个历程: 编写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

(五)keepalived服务安全访问配置(lb0/02)

通过设置监听地址限制用户访问通道:
外网接口只开通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重启
 

 

 

七、ansible自动化管理服务

服务端:m01

客户端:其他服务器

PS:selinux需要关闭,不然ansible连接管理主机会报错

(一)部署ansible批量管理服务

(1)部署SSH基于密钥对的连接(m01)

第一步:管理端创建密钥对信息
[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 root@172.16.1.$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   
...

(2)部署安装ansible服务

第一步:安装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模块介绍

    模块的应用语法格式:
    ansible 主机名称/主机组名称/主机地址信息/all  -m(指定应用的模块信息)  模块名称  -a(指定动作信息)  "执行什么动作"

ansible软件输出颜色说明:
01. 绿色信息:  查看主机信息/对主机未做改动
02. 黄色信息:  对主机数据信息做了修改
03. 红色信息:  命令执行出错了
04. 粉色信息:  忠告信息
05. 蓝色信息:  显示ansible命令执行的过程

(1)command默认模块

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 "&"

(2)shell(万能模块)

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"

(3)scripts模块(万能模块)

PS:scripts模块参数功能和command模块类似

第一个步骤: 编写一个脚本
第二个步骤: 运行ansible命令执行脚本

(4)copy文件类型模块

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后面目录有/:   只将目录下面的内容都进行远程传输复制	

(5)file设置文件属性模块

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"

(6)yum模块(批量安装和卸载软件包)

name  --- 指定安装软件名称
state --- 指定是否安装软件
	  installed   --- 安装软件
      present
      latest
      absent      --- 卸载软件
      removed
ansible 172.16.1.7 -m yum -a "name=iotop state=installed"	

(7)service模块(管理服务的运行状态)

name:   --- 指定管理的服务名称
state:  --- 指定服务状态
	    started   启动
	    restarted 重启
		stopped   停止
enabled=yes/no --- 指定服务是否开机自启动
ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"

(8)cron模块(批量设置多个主机的定时任务信息)

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"

(9)mount模块(批量进行挂载操作)

mount: 批量进行挂载操作
	  src:  需要挂载的存储设备或文件信息
	  path: 指定目标挂载点目录
	  fstype: 指定挂载时的文件系统类型
	  state
	  present/mounted     --- 进行挂载
	  present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载
	  mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 *****
		   
	  absent/unmounted    --- 进行卸载
	  absent:     会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载
	  unmounted:  会实现立即卸载, 但是不会会删除fstab文件信息  *****

(10)user模块(批量创建用户并设置密码信息)

基本用法:
	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'

(三)剧本

(1)剧本的实现步骤

第一步:配置主机清单
    如何配置主机清单
    第一种方式: 分组配置主机信息
	[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   

(2)一键化部署Rsync服务

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 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

(3) 一键化部署全网备份项目
(4) 一键化部署NFS服务
(5) 一键化部署实时同步服务    
 

 

八、网站监控服务zabbix

服务端:zabbix

客户端:其他服务器

(一)部署安装zabbix服务

(1)服务端(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

(2)客户端(其他服务器)

    第一个里程: 下载安装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

(二)实现zabbix自定义监控

(1)需求:监控Nginx服务是否启动

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网站页面进行配置(如下图所示)
第一步: 进入到创建监控项页面:
配置---主机---选择相应主机的监控项
第二步: 监控项页面如何配置
名称 键值 更新间隔时间 应用集
第三步: 检查是否收集到监控信息

 

(2)复杂的自定义监控配置(多个服务状态)

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]

(3)报警(邮件报警、微信报警、短信和电话)

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. 配置--分派策略

 

 

 

  • 47
    点赞
  • 409
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值