当前位置:   article > 正文

Linux运维企业架构项目实战系列_linux运维必会项目案例大全

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)

  1. 第一步:下载安装Rsync
  2. rpm -qa|grep rsync
  3. yum install -y rsync
  4. 第二步:编写Rsync配置文件
  5. [root@backup ~]# vim /etc/rsyncd.conf
  6. ##created by abin at 2020
  7. ###rsyncd.conf start##
  8. uid = rsync
  9. gid = rsync
  10. port = 873
  11. fake super = yes
  12. use chroot = no
  13. max connections =200
  14. timeout = 300
  15. pid file = /var/run/rsyncd.pid
  16. lock file = /var/run/rsync.lock
  17. log file = /var/log/rsyncd.log
  18. ignore errors
  19. read only = false
  20. list = false
  21. hosts allow = 172.16.1.0/24
  22. hosts deny = 0.0.0.0/32
  23. auth users = rsync_backup
  24. secrets file = /etc/rsync.password
  25. [backup]
  26. comment = "backup dir by abin"
  27. 第三步:创建rsync服务的虚拟用户
  28. useradd rsync -M -s /sbin/nologin
  29. 第四步:创建备份服务认证密码文件
  30. echo "rsync_backup:123456" >/etc/rsync.password
  31. chmod 600 /etc/rsync.password
  32. 第五步:创建备份目录并修改属主属组信息
  33. mkdir /backup
  34. chown rsync.rsync /backup/
  35. 第六步:启动备份服务
  36. systemctl start rsyncd
  37. systemctl enable rsyncd
  38. systemctl status rsyncd

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

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

(二)编写脚本文件

1)客户端脚本编写

  1. web01/02/03服务器备份脚本:
  2. mkdir -p /server/scripts
  3. vim /server/scripts/backup.sh
  4. #!/bin/bash
  5. Backup_dir="/backup"
  6. IP_info=$(hostname -i)
  7. # create backup dir
  8. mkdir -p $Backup_dir/$IP_info
  9. # tar backup data
  10. cd /
  11. 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
  12. tar zchf /$Backup_dir/$IP_info/www_backup_$(date +%F_week%w).tar.gz ./var/html/www
  13. tar zchf /$Backup_dir/$IP_info/www_log_backup_$(date +%F_week%w).tar.gz ./app/logs
  14. # del 7 day ago data
  15. find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null
  16. # create finger file
  17. find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Backup_dir/$IP_info/finger.txt
  18. # backup push data info
  19. rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
  20. nfs01服务器备份脚本:
  21. mkdir -p /server/scripts
  22. vim /server/scripts/backup.sh
  23. #!/bin/bash
  24. Backup_dir="/backup"
  25. IP_info=$(hostname -i)
  26. # create backup dir
  27. mkdir -p $Backup_dir/$IP_info
  28. # tar backup data
  29. cd /
  30. 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
  31. # del 7 day ago data
  32. find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null
  33. # create finger file
  34. find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Backup_dir/$IP_info/finger.txt
  35. # backup push data info
  36. rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

2)服务端

  1. mkdir -p /server/scripts
  2. vim /server/scripts/backup_server.sh
  3. #!/bin/bash
  4. # del 180 day ago data
  5. find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null
  6. # check backup data
  7. find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt
  8. # send check mail
  9. mail -s "check backup info for $(date +%F)" 1781668237@qq.com </tmp/check.txt
  10. sh -x backup_server.sh --检测脚本

 

(三)配置邮件服务

1)服务端

  1. 第一步:浏览器登录163邮箱进行配置
  2. 打开163邮箱POP3/SMIP服务
  3. 复制授权密码
  4. 第二步:配置qq邮箱
  5. 打开qq邮箱POP3/SMIP服务
  6. 第三步:编写邮件服务配置文件(追加到最后面)
  7. vim /etc/mail.rc
  8. set from=yb1781668237@163.com smtp=smtp.163.com
  9. set smtp-auth-user=yb1781668237@163.com smtp-auth-password=授权密码(163邮箱) smtp-auth=login
  10. 重启邮箱服务
  11. systemctl restart postfix.service
  12. 第四步:发送邮件测试
  13. echo "邮件内容"|mail -s "邮件主题" 1781668237@qq.com
  14. mail -s "邮件测试" 1781668237@qq.com </dev/null

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

1)服务端

  1. [root@backup ~]# crontab -e
  2. # check backup data
  3. 0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
  4. ps:
  5. crontab -l --查看已设定的定时任务

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

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

 

 

二、NFS存储共享服务

服务端:nfs01

客户端:web01/02/03

1)服务端

  1. 第一步:下载安装软件
  2. rpm -qa|grep -E "nfs|rpc"
  3. yum install -y nfs-utils rpcbind
  4. 第二步:编写nfs服务配置文件
  5. vim /etc/exports
  6. /data 172.16.1.0/24(rw,sync)
  7. 第三步:创建一个存储目录
  8. mkdir /data
  9. chown nfsnobody.nfsnobody /data
  10. 第四步:先启动rpc服务
  11. systemctl start rpcbind.service
  12. systemctl enable rpcbind.service
  13. systemctl status rpcbind.service
  14. 再启动nfs服务
  15. systemctl start nfs
  16. systemctl enable nfs
  17. systemctl status nfs

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

  1. 第一步:安装nfs服务
  2. yum install -y nfs-utils
  3. 第二步:实现远程挂载共享目录
  4. mount -t nfs 172.16.1.31:/data /mnt
  5. ps:卸载设备
  6. umount -lf /mnt
  7. -l 不退出挂载点目录进行卸载
  8. -f 强制进行卸载操作

3)实现开机自动挂载

  1. 方法一:利用rc.local开机自动加载脚本文件
  2. echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
  3. chmod a+x /etc/rc.d/rc.local
  4. 方法二:利用fstab配置文件
  5. vim /etc/fstab
  6. 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)

  1. 第一步:下载安装Rsync
  2. rpm -qa|grep rsync
  3. yum install -y rsync
  4. 第二步:编写Rsync配置文件
  5. [root@backup ~]# vim /etc/rsyncd.conf
  6. ##created bu abin at 2020
  7. ###rsyncd.conf start##
  8. uid = rsync
  9. gid = rsync
  10. port = 873
  11. fake super = yes
  12. use chroot = no
  13. max connections =200
  14. timeout = 300
  15. pid file = /var/run/rsyncd.pid
  16. lock file = /var/run/rsync.lock
  17. log file = /var/log/rsyncd.log
  18. ignore errors
  19. read only = false
  20. list = false
  21. hosts allow = 172.16.1.0/24
  22. hosts deny = 0.0.0.0/32
  23. auth users = rsync_backup
  24. secrets file = /etc/rsync.password
  25. [backup]
  26. comment = "backup dir by abin"
  27. 第三步:创建rsync服务的虚拟用户
  28. useradd rsync -M -s /sbin/nologin
  29. 第四步:创建备份服务认证密码文件
  30. echo "rsync_backup:123456" >/etc/rsync.password
  31. chmod 600 /etc/rsync.password
  32. 第五步:创建备份目录并修改属主属组信息
  33. mkdir /backup
  34. chown rsync.rsync /backup/
  35. 第六步:启动备份服务
  36. systemctl start rsyncd
  37. systemctl enable rsyncd
  38. systemctl status rsyncd

2)客户端(nfs01)

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

(二)部署inotify监控服务

客户端:nfs01

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

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

客户端:nfs01

  1. 第一步:下载sersync软件上传至nfs服务器
  2. https://github.com/wsgzao/sersync
  3. 第二步:解压sersync软件包
  4. unzip sersync_installdir_64bit.zip
  5. mv sersync_installdir_64bit/* /usr/local/
  6. 第三步:修改配置文件
  7. [root@nfs01 /usr/local/sersync]# vim conf/confxml.xml
  8. 24 <localpath watch="/data">
  9. 25 <remote ip="172.16.1.41" name="backup"/>
  10. 30 <commonParams params="-az"/>
  11. 31 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
  12. 32 <userDefinedPort start="true" port="873"/><!-- port=874 -->
  13. 第四步:
  14. [root@nfs01 bin]# export PATH="$PATH:/usr/local/sersync/bin"
  15. [root@nfs01 bin]# echo $PATH
  16. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin
  17. [root@nfs01 /usr/local/sersync/bin]# chmod a+x sersync
  18. [root@nfs01 ~]# mkdir /data
  19. [root@nfs01 ~]# sersync -dro /usr/local/sersync/conf/confxml.xml 启动实时同步服务
  20. 第五步:实现开机自启
  21. [root@nfs01 ~]# vim /etc/profile
  22. export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin'
  23. [root@nfs01 ~]# vim /etc/rc.local
  24. /usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
  25. [root@nfs01 ~]# chmod a+x /etc/rc.d/rc.local
  26. ps:
  27. [root@nfs01 ~]# yum install -y psmisc
  28. [root@nfs01 ~]# killall sersync 停止实时同步服务

 

 

四、web服务(LNMP架构)

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

(二)安装配置Nginx服务

1)yum安装Nginx服务

  1. 第一个历程: 更新nginx官方yum源
  2. vim /etc/yum.repos.d/nginx.repo
  3. [nginx-stable]
  4. name=nginx stable repo
  5. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  6. gpgcheck=1
  7. enabled=1
  8. gpgkey=https://nginx.org/keys/nginx_signing.key
  9. 第二个历程: yum安装nginx软件
  10. yum install -y nginx
  11. 第三个历程: 启动nginx服务,检查服务是否安装正确
  12. systemctl start nginx
  13. systemctl enable nginx
  14. 测试访问nginx服务

2)配置Nginx服务

  1. vim /etc/nginx/nginx.conf --- 主配置文件
  2. 第一个部分: 配置文件主区域配置
  3. user www; --- 定义worker进程管理的用户
  4. worker_processes 2; ---定义有几个worker进程 == CPU核数 / 核数的2倍
  5. error_log /var/log/nginx/error.log warn; --- 定义错误日志路径信息
  6. pid /var/run/nginx.pid; --- 定义pid文件路径信息
  7. 第二个部分: 配置文件事件区域
  8. events {
  9. worker_connections 1024; --- 一个worker进程可以同时接收1024访问请求
  10. }
  11. 第三个部分: 配置http区域
  12. http {
  13. include /etc/nginx/mime.types; --- 加载一个配置文件
  14. default_type application/octet-stream; --- 指定默认识别文件类型
  15. log_format oldboy '$remote_addr - $remote_user [$time_local] "$request" '
  16. '$status $body_bytes_sent "$http_referer" '
  17. '"$http_user_agent" "$http_x_forwarded_for"';
  18. --- 定义日志的格式
  19. access_log /var/log/nginx/access.log oldboy;
  20. --- 指定日志路径
  21. sendfile on; ???
  22. #tcp_nopush on; ???
  23. keepalive_timeout 65; --- 超时时间
  24. #gzip on;
  25. include /etc/nginx/conf.d/*.conf; --- 加载一个配置文件
  26. }
  27. 补充: nginx的进程
  28. master process: 主进程 ---管理服务是否能够正常运行 boss
  29. worker process: 工作进程 ---处理用户的访问请求 员工

(三)安装配置PHP服务

  1. 1.使用remi源安装php
  2. yum remove -y epel-release.noarch --(如果没有这个包可以不用卸载)
  3. yum install -y epel-release
  4. yum install -y https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
  5. 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
  6. 2.编写配置文件(24/26行)
  7. vim /etc/php-fpm.d/www.conf
  8. user = www
  9. group = www
  10. PS:创建一个www用户
  11. 3.启动php服务
  12. systemctl start php-fpm.service
  13. systemctl enable php-fpm.service
  14. systemctl status php-fpm.service

(四)安装配置Mysql服务

  1. 安装数据库软件
  2. [root@web01 ~]# yum install mariadb-server mariadb -y
  3. 启动数据库服务
  4. [root@web01 ~]# systemctl start mariadb.service
  5. [root@web01 ~]# systemctl enable mariadb.service
  6. 创建数据库的密码信息
  7. [root@web01 ~]# mysqladmin -u root password '123456'
  8. [root@web01 ~]# mysql -u root -p123456 --密码登录

(五)Nginx和PHP建立关系

  1. 1.编写nginx文件
  2. [root@web01 /etc/nginx/conf.d]# vim www.conf
  3. server {
  4. listen 80;
  5. server_name www.abins.cn;
  6. location / {
  7. root /html/www;
  8. index index.php index.html;
  9. }
  10. location ~ \.php$ {
  11. root /html/www;
  12. fastcgi_index index.php;
  13. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  14. fastcgi_pass 127.0.0.1:9000;
  15. include fastcgi_params;
  16. }
  17. }
  18. [root@web01 /etc/nginx/conf.d]# systemctl restart nginx
  19. 2.编写动态资源文件
  20. [root@web01 /html/www]# vim test_php.php
  21. <?php
  22. phpinfo();
  23. ?>
  24. 3.配置本地DNS解析
  25. 在C:\Windows\System32\drivers\etc\hosts文件
  26. 后面追加
  27. 10.0.0.7 www.cxt.com
  28. 4.进行访问测试
  29. www.cxt.com/test_php.php

(六)Nginx和Mysql建立关系

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

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

1)安装wordpress服务

  1. 第一个历程: 获取代码信息(git)---使用开源的网站代码
  2.     www网站页面: http://www.dedecms.com/
  3.     bbs网站页面: http://www.discuz.net/forum.php
  4.     blog网站页面: https://cn.wordpress.org/
  5.     wecenter网站页面: http://www.wecenter.com/?copyright
  6. 第二个历程: 将代码解压,将解压后信息放入到站点目录中
  7. [root@web01 /html]# rz -E
  8. rz waiting to receive.
  9. [root@web01 /html]# ll
  10. -rw-r--r-- 1 root root 11199196 Apr 7 20:40 wordpress-5.2.1.tar.gz
  11. [root@web02 /html]# tar xf wordpress-5.2.1.tar.gz
  12. [root@web01 /html]# ll
  13. drwxr-xr-x 5 nobody 65534 4096 May 22 2019 wordpress
  14. -rw-r--r-- 1 root root 11199196 Apr 7 20:40 wordpress-5.2.1.tar.gz
  15. drwxr-xr-x 2 www www 48 May 24 15:17 www
  16. [root@web01 /html]# mv wordpress/* www/
  17. 第三个历程: 修改站点目录权限
  18. chown -R www.www www
  19. 第四个历程: 进行网站页面初始化操作
  20. www.cxt.com/index.php

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

  1. [root@web01 ~]# mysql -u root -p123456 --以root身份登录MySQL
  2. MariaDB [(none)]> create database wordpress; --创建wordpress数据库
  3. Query OK, 1 row affected (0.09 sec)
  4. MariaDB [(none)]> show databases; --检查wordpress数据库是否创建成功
  5. +--------------------+
  6. | Database |
  7. +--------------------+
  8. | information_schema |
  9. | mysql |
  10. | performance_schema |
  11. | test |
  12. | wordpress |
  13. +--------------------+
  14. 5 rows in set (0.00 sec)
  15. MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'localhost' identified by '123456'; --创建wordpress用户,密码为123456
  16. MariaDB [(none)]> select user,host from mysql.user; --查看数据库user表的用户信息和主机信息
  17. +-----------+-----------+
  18. | user | host |
  19. +-----------+-----------+
  20. | root | 127.0.0.1 |
  21. | root | ::1 |
  22. | | localhost |
  23. | root | localhost |
  24. | wordpress | localhost |
  25. | | web02 |
  26. | root | web02 |
  27. +-----------+-----------+
  28. 7 rows in set (0.10 sec)
  29. MariaDB [(none)]> flush privileges; --刷新数据库信息

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

 

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

服务端:lb01

客户端:web01/02/03

(一)首先四台服务器预装Nginx服务(lb01 web01/02/03)

  1. vim /etc/yum.repos.d/nginx.repo ##更新nginx的官方yum源
  2. [nginx-stable]
  3. name=nginx stable repo
  4. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  5. gpgcheck=1
  6. enabled=1
  7. gpgkey=https://nginx.org/keys/nginx_signing.key
  8. yum install -y nginx ##安装nginx服务
  9. systemctl start nginx ##启动nginx服务

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

  1. [root@web01 /html/www]# vim fzjh.html
  2. <html>
  3. <head>
  4. <title>Welcome to nginx!</title>
  5. </head>
  6. <body bgcolor="white" text="black">
  7. <center><h1>Welcome to nginx! 10.0.0.7</h1></center> --注意3台web服务器均需编辑
  8. </body>
  9. </html>
  10. ps:注意这里有个坑
  11. 小编的web服务器站点目录是/html/www,所以需要修改web服务器的默认nginx配置文件站点目录
  12. 即:
  13. [root@lb01 /etc/nginx/conf.d]# vim default.conf
  14. root /html/www;
  15. 否则会报404 not found错误
  16. #当然如果你是默认站点目录/usr/share/nginx/html/时不需要修改

(三)配置负载均衡服务器

  1. [root@lb01 /etc/nginx]# vim nginx.conf
  2. user www;
  3. [root@lb01 /etc/nginx/conf.d]# vim www.conf
  4. upstream cxt {
  5. server 10.0.0.7:80;
  6. server 10.0.0.8:80;
  7. server 10.0.0.9:80;
  8. }
  9. server {
  10. listen 80;
  11. server_name www.cxt.com;
  12. location / {
  13. proxy_pass http://cxt;
  14. client_max_body_size 100m;
  15. }
  16. }
  17. server {
  18. listen 80;
  19. server_name bbs.cxt.com;
  20. location / {
  21. proxy_pass http://cxt;
  22. client_max_body_size 100m;
  23. }
  24. }

(四)测试

  1. 打开浏览器输入www.cxt.com/fzjh.html
  2. 不断刷新,10.0.0.7/10.0.0.8/10.0.0.9交替出现时说明负载均衡配置成功
  3. 下面时通过抓包工具抓取的http记录

 

六、keepalived高可用

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

  1. 第一个历程: 准备两台服务器并且均配置好负载均衡服务 (lb01 lb02)
  2. 第二个历程: 安装部署keepalived软件 (lb01 lb02)
  3.     yum install -y keepalived
  4. 第三个历程: 编写keepalived配置文件(lb01 lb02)
  5. lb01配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
  6.     [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
  7. ! Configuration File for keepalived
  8. global_defs {
  9. router_id lb01
  10. }
  11. vrrp_instance yb {
  12. state MASTER
  13. interface eth0
  14. virtual_router_id 51
  15. priority 150
  16. advert_int 1
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111
  20. }
  21. virtual_ipaddress {
  22. 10.0.0.3/24
  23. }
  24. }
  25.     lb02配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
  26. ! Configuration File for keepalived
  27. global_defs {
  28. router_id lb02
  29. }
  30. vrrp_instance yb {
  31. state BACKUP
  32. interface eth0
  33. virtual_router_id 51
  34. priority 100
  35. advert_int 1
  36. authentication {
  37. auth_type PASS
  38. auth_pass 1111
  39. }
  40. virtual_ipaddress {
  41. 10.0.0.3/24
  42. }
  43. }
  44. 第四个历程: 启动keepalived服务
  45.     systemctl start keepalived
  46.     systemctl enable keepalived
  47.     systemctl status keepalived
  48. 第五个历程: 修改域名和IP地址解析关系
  49.     windows修改hosts主机文件
  50.     10.0.0.3  www.cxt.com    
  51. 第六个历程:测试
  52.     当lb01的keepalived服务停止运行时,lb02收不到来自lb01的组播信息会夺取vip地址信息10.0.0.3成为新的主,保证负载均衡正常运作。

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

1)脑裂问题产生的原因

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

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

2)如何解决脑裂问题?

  1. 01. 进行监控,发出告警
  2.     备服务器出现VIP地址的原因:
  3.     a 主服务器出现故障
  4.     b 出现脑裂问题
  5.     监控脑裂的shell脚本:
  6. [root@lb02 ~]# vim /server/scripts/naolie.sh
  7. #!/bin/bash
  8. ip a s eth0|grep "10.0.0.3" >/dev/null
  9. if [ $? -eq 0 ]
  10. then
  11.   echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived  1781668237@qq.com
  12. fi
  13.     
  14. 加入定时任务每隔一分钟执行一次
  15. corntab -e
  16.     补充:shell脚本进行比较判断
  17.     -eq  等于
  18.     -ne  不等于
  19.     -lt  小于
  20.     -gt  大于
  21.     -le  小于等于
  22.     -ge  大于等于
  23.     
  24. 02. 直接关闭一台服务器的keepalived服务

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

  1. 第一个历程: 编写监控nginx服务状态监控
  2.    vim /server/scripts/check_web.sh
  3. #!/bin/bash
  4. num=`ps -ef|grep -c [n]ginx`
  5. if [ $num -lt 2 ]
  6. then
  7. systemctl stop keepalived
  8. fi
  9. ps:别忘了给脚本x权限
  10. 第二个历程: 测试监控脚本
  11.     [root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
  12.     ! Configuration File for keepalived
  13.      global_defs {
  14.        router_id lb01
  15.     }
  16.     
  17.     vrrp_script check_web {
  18.      script "/server/scripts/check_web.sh"  
  19.      interval 3   
  20.      weight 2
  21.     }
  22.     
  23.     vrrp_instance yb {
  24.         state MASTER
  25.         interface eth0
  26.         virtual_router_id 51
  27.         priority 150
  28.         advert_int 1
  29.         authentication {
  30.             auth_type PASS
  31.             auth_pass 1111
  32.         }
  33.         virtual_ipaddress {
  34.          10.0.0.3/24
  35.         }
  36.        track_script {
  37.              check_web
  38.        }
  39.     }
  40.  第三个历程: 测试
  41. 停掉nginx服务的同时keepailved服务也会自动停掉
  42. 这样vip地址资源会释放给备,备会成为新的主,保证用户可以正常访问  
  43. systemctl stop nginx
  44. systemctl status keepalived

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

  1. 第一个历程: 编写lb01服务器keepalived配置文件
  2.     [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
  3.     ! Configuration File for keepalived
  4.      global_defs {
  5.        router_id lb01
  6.     }
  7.     
  8.     vrrp_instance yb {
  9.         state MASTER
  10.         interface eth0
  11.         virtual_router_id 51
  12.         priority 150
  13.         advert_int 1
  14.         authentication {
  15.             auth_type PASS
  16.             auth_pass 1111
  17.         }
  18.         virtual_ipaddress {
  19.          10.0.0.3/24
  20.         }
  21.     }
  22.     vrrp_instance cxt {
  23.         state BACKUP
  24.         interface eth0
  25.         virtual_router_id 52
  26.         priority 100
  27.         advert_int 1
  28.         authentication {
  29.             auth_type PASS
  30.             auth_pass 1111
  31.         }
  32.         virtual_ipaddress {             
  33.          10.0.0.4/24
  34.         }
  35.     }
  36.         
  37. 第二个历程: 编写lb02服务器keepalived配置文件 
  38. [root@lb02 ~]# cat /etc/keepalived/keepalived.conf   
  39.     ! Configuration File for keepalived
  40.     global_defs {
  41.        router_id lb02
  42.     }
  43.     
  44.     vrrp_instance yb {
  45.         state BACKUP
  46.         interface eth0
  47.         virtual_router_id 51
  48.         priority 100
  49.         advert_int 1
  50.         authentication {
  51.             auth_type PASS
  52.             auth_pass 1111
  53.         }
  54.         virtual_ipaddress {
  55.             10.0.0.3/24
  56.         }
  57.     }
  58.     vrrp_instance cxt {
  59.         state MASTER
  60.         interface eth0
  61.         virtual_router_id 52
  62.         priority 150
  63.         advert_int 1
  64.         authentication {
  65.             auth_type PASS
  66.             auth_pass 1111
  67.         }
  68.         virtual_ipaddress {
  69.             10.0.0.4/24
  70.         }
  71.     }
  72.     
  73. 第三个历程: 进行抓包测试
  74.     进行抓包查看:
  75.     www.cxt.com/fzjh --- 10.0.0.3(10.0.0.5)
  76.     10.0.0.1       --- 10.0.0.3
  77.     10.0.0.5       --- 10.0.0.7
  78.     10.0.0.7       --- 10.0.0.5
  79.     10.0.0.3       --- 10.0.0.1
  80.     
  81.     bbs.test.com/fzjh --- 10.0.0.4(10.0.0.6) --若访问bbs.cxt.com/fzjh.html出现404错误,可能是lb02的www.conf中没有配置bbs.cxt.com的负载均衡
  82.     10.0.0.1       --- 10.0.0.4
  83.     10.0.0.6       --- 10.0.0.7
  84.     10.0.0.7       --- 10.0.0.6
  85.     10.0.0.4       --- 10.0.0.1

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

  1. 通过设置监听地址限制用户访问通道:
  2. 外网接口只开通10.0.0.3/10.0.0.4
  3. 第一个历程: 修改内核文件
  4.     异常问题:
  5.     01. 如何设置监听网卡上没有的地址
  6.     解决: 需要修改内核信息
  7.     echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
  8.     sysctl -p 
  9. 第二个历程: 修改nginx负载均衡文件
  10.     lb01/lb02
  11.     vim /etc/nginx/conf.d/lb.conf
  12.     upstream cxt {
  13.        server 10.0.0.7:80;
  14.        server 10.0.0.8:80;
  15.        server 10.0.0.9:80;
  16.     }
  17.     server {
  18.         listen       10.0.0.3:80;
  19.         server_name  www.cxt.com;
  20.         location / {
  21.            proxy_pass http://cxt;
  22.            proxy_set_header Host $host;
  23.            proxy_set_header X-Forwarded-For $remote_addr;
  24.            proxy_next_upstream error timeout http_404 http_502 http_403;
  25.         }
  26.     }
  27.     server {
  28.         listen       10.0.0.4:80;
  29.         server_name  bbs.cxt.com;
  30.         location / {
  31.            proxy_pass http://cxt;
  32.            proxy_set_header Host $host;
  33.            proxy_set_header X-Forwarded-For $remote_addr;
  34.         }
  35.     }
  36. 第三个历程: 重启nginx负载均衡服务
  37.     systemctl restart nginx   --涉及到ip地址的修改要用restart重启

 

 

七、ansible自动化管理服务

服务端:m01

客户端:其他服务器

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

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

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

  1. 第一步:管理端创建密钥对信息
  2. [root@m01 ~]# ssh-keygen -t dsa --默认一直回车
  3. 第二步:管理端需要将公钥进行分发
  4. [root@m01 /server/scripts]# yum install -y sshpass
  5. [root@m01 /server/scripts]# vim fenfa_pub_key.sh --注意脚本x权限
  6. #!/bin/bash
  7. for ip in 7 31 41
  8. do
  9. echo "============ host 172.16.1.$ip pub-key start fenfa============="
  10. sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip "-o StrictHostKeyChecking=no" &>/dev/null
  11. echo "host 172.16.1.$ip fenfa success."
  12. echo "============ host 172.16.1.$ip fenfa end============="
  13. done
  14. [root@m01 /server/scripts]# sh fenfa_pub_key.sh
  15. ============ host 172.16.1.5 pub-key start fenfa=============
  16. host 172.16.1.5 fenfa success.
  17. ...
  18. 第三步:进行ssh远程连接测试
  19. [root@m01 /server/scripts]# vim check_pub_key.sh --注意脚本x权限
  20. #!/bin/bash
  21. CMD=$1 #--传参(执行脚本的时候后面可以写一些命令,不用去调整脚本)
  22. for ip in {5,6,7,8,9,31,51}
  23. do
  24. echo "==================== host 172.16.1.$ip check ==================== "
  25. ssh 172.16.1.$ip $CMD
  26. echo ""
  27. done
  28. [root@m01 /server/scripts]# sh check_pub_key.sh "hostname"
  29. ==================== host 172.16.1.5 check ====================
  30. lb01
  31. ...

(2)部署安装ansible服务

  1. 第一步:安装ansible软件
  2. [root@m01 ~]# yum install -y ansible --- 需要依赖epel的yum源
  3. 第二步:编写主机清单文件
  4. [root@m01 ~]# vim /etc/ansible/hosts
  5. #定义可以管理的主机信息
  6. 172.16.1.5
  7. 172.16.1.6
  8. 172.16.1.7
  9. 172.16.1.8
  10. 172.16.1.9
  11. 172.16.1.31
  12. 172.16.1.51
  13. 第三步:测试是否可以管理多台主机
  14. [root@m01 ~]# ansible all -a "hostname"
  15. 172.16.1.5 | CHANGED | rc=0 >>
  16. lb01
  17. ...
  18. ps:补充
  19. /etc/ansible/ansible.cfg --- ansible服务配置文件
  20. /etc/ansible/hosts --- 主机清单文件 定义可以管理的主机信息
  21. /etc/ansible/roles --- 角色目录

 

(二)ansible模块介绍

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

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

(1)command默认模块

  1. command – Executes a command on a remote node
  2. 在一个远程主机上执行一个命令
  3. 简单用法:
  4. [root@m01 ~]# ansible 172.16.1.7 -m command -a "hostname"
  5. 172.16.1.7 | CHANGED | rc=0 >>
  6. web01
  7. 扩展用法:
  8. 1)chdir Change into this directory before running the command.
  9. 在执行命令之前对目录进行切换
  10. ansible 172.16.1.7 -m command -a "chdir=/tmp/ touch test.txt"
  11. 2)creates If it already exists, this step won't be run.
  12. 如果文件存在,不执行命令操作
  13. ansible 172.16.1.7 -m command -a "creates=/tmp/ touch test.txt"
  14. skipped, since /tmp/ exists --跳过,因为/tmp/中存在
  15. 3)removes If it already exists, this step will be run.
  16. 如果文件存在,继续执行
  17. ansible 172.16.1.7 -m command -a "removes=/tmp/ touch test.txt"
  18. 4) free_form(required)
  19. The command module takes a free form command to run.
  20. There is no parameter actually named 'free form'. See the examples!
  21. 使用command模块的时候,-a参数后面必须写上一个合法linux命令信息
  22. 注意事项:
  23. 有些符号信息无法识别: "<", ">", "|", ";" and "&"

(2)shell(万能模块)

  1. shell – Execute commands in nodes
  2. 在节点上执行操作
  3. 简单用法:
  4. command默认模块用法一致
  5. 实践应用:利用shell模块远程执行脚本
  6. 第一步:在管理主机编写脚本
  7. [root@m01 /server/scripts]# vim yum.sh
  8. #!/bin/bash
  9. ##yum
  10. yum install -y htop
  11. 第二步:将脚本发送到远程主机
  12. [root@m01 /server/scripts]# scp -rp ./yum.sh 172.16.1.7:/server/scripts
  13. yum.sh 100% 39 37.0KB/s 00:00
  14. 第三步:使用file模块为脚本增加可执行权限
  15. [root@m01 ~]# ansible 172.16.1.7 -m file -a "dest=/server/scripts/yum.sh mode=777"
  16. 第四步:使用ansible命令执行脚本
  17. [root@m01 ~]# ansible 172.16.1.7 -m shell -a "chdir=/server/scripts sh yum.sh"

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

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

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

(4)copy文件类型模块

  1. copy – Copies files to remote locations
  2. 将数据信息进行批量分发
  3. 基本用法:
  4. ansible 172.16.1.7 -m copy -a "src=/etc/hosts dest=/etc/"
  5. 将管理主机/etc目录中的hosts文件分发到远程主机的/etc目录中
  6. 172.16.1.7 | CHANGED => { --- 对哪台主机进行操作
  7. "changed": true, --- 是否对主机信息进行改变
  8. "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值
  9. "dest": "/etc/hosts", --- 显示目标路径信息
  10. "gid": 0, --- 显示复制后文件gid信息
  11. "group": "root", --- 显示复制后文件属组信息
  12. "md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值
  13. "mode": "0644", --- 显示复制后文件权限信息
  14. "owner": "root", --- 显示复制后文件属主信息
  15. "size": 401, --- 显示文件的大小信息
  16. "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source",
  17. "state": "file", --- 显示文件的类型信息
  18. "uid": 0 --- 显示复制后文件uid信息
  19. }
  20. 扩展用法:
  21. 01. 在传输文件时修改文件的属主和属组信息
  22. ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=rsync group=rsync"
  23. 02. 在传输文件时修改文件的权限信息
  24. ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ mode=1777"
  25. 03. 在传输数据文件信息时对远程主机源文件进行备份
  26. ansible 172.16.1.7 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"
  27. 04. 创建一个文件并直接编辑文件的信息
  28. ansible 172.16.1.7 -m copy -a "content='123456' dest=/etc/rsync.password"
  29. content:文件内容
  30. dest:远端文件路径
  31. PS: ansible软件copy模块复制目录信息
  32. ansible 172.16.1.7 -m copy -a "src=/tmp dest=/tmp"
  33. src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制
  34. ansible 172.16.1.7 -m copy -a "src=/tmp/ dest=/tmp"
  35. src后面目录有/: 只将目录下面的内容都进行远程传输复制

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

  1. file – Sets attributes of files
  2. 设置文件属性信息
  3. 基本用法:
  4. -dest 远端文件或目录路径
  5. -owner 属主
  6. -group 属组
  7. -mode 权限
  8. ansible 172.16.1.7 -m file -a "dest=/etc/hosts owner=www group=www mode=666"
  9. 扩展用法:
  10. 1. 可以利用模块创建数据信息 (文件 目录 链接文件)
  11. state 参数
  12. =absent --- 缺席/删除数据信息
  13. =directory --- 创建一个目录信息
  14. =file --- 检查创建的数据信息是否存在 绿色存在 红色不存在
  15. =hard --- 创建一个硬链接文件
  16. =link --- 创建一个软链接文件
  17. =touch --- 创建一个文件信息
  18. 创建目录信息:
  19. ansible 172.16.1.7 -m file -a "dest=/test/ state=directory"
  20. ansible 172.16.1.7 -m file -a "dest=/test/test01/test02/ state=directory"
  21. 创建文件信息:
  22. ansible 172.16.1.7 -m file -a "dest=/test/test.txt state=touch"
  23. 创建链接文件信息:
  24. ansible 172.16.1.7 -m file -a "src=/test/test.txt dest=/test/test_hard.txt state=hard"
  25. ansible 172.16.1.7 -m file -a "src=/test/test.txt dest=/test/test_link.txt state=link"
  26. 2. 可以利用模块删除数据信息
  27. ansible 172.16.1.7 -m file -a "dest=/test/test.txt state=absent"
  28. ansible 172.16.1.7 -m file -a "dest=/test/ state=absent"
  29. 补充:
  30. recurse 递归
  31. Recursively set the specified file attributes on directory contents.
  32. 递归地对目录内容设置指定的文件属性。
  33. This applies only when state is set to directory.
  34. recurse=yes/no
  35. 仅当状态设置为“目录”时才适用。
  36. [root@m01 ~]# ansible 172.16.1.41 -m file -a "dest=/backup owner=rsync recurse=yes"

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

  1. name --- 指定安装软件名称
  2. state --- 指定是否安装软件
  3. installed --- 安装软件
  4. present
  5. latest
  6. absent --- 卸载软件
  7. removed
  8. ansible 172.16.1.7 -m yum -a "name=iotop state=installed"

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

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

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

  1. crontab -e
  2. * * * * * 定时任务动作
  3. 分 时 日 月 周
  4. minute: # Minute when the job should run ( 0-59, *, */2, etc )
  5. 设置分钟信息
  6. hour: # Hour when the job should run ( 0-23, *, */2, etc )
  7. 设置小时信息
  8. day: # Day of the month the job should run ( 1-31, *, */2, etc )
  9. 设置日期信息
  10. month: # Month of the year the job should run ( 1-12, *, */2, etc )
  11. 设置月份信息
  12. weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
  13. 设置周信息
  14. job 用于定义定时任务需要干的事情
  15. 基本用法:
  16. ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
  17. 扩展用法:
  18. 01. 给定时任务设置注释信息
  19. 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'"
  20. 02. 如何删除指定定时任务
  21. ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"
  22. PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务
  23. 03. 如何批量注释定时任务
  24. 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模块(批量进行挂载操作)

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

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

  1. 基本用法:
  2. ansible 172.16.1.31 -m user -a "name=www"
  3. 扩展用法:
  4. 1) 指定用户uid信息
  5. ansible 172.16.1.31 -m user -a "name=www uid=6666"
  6. 2) 指定用户组信息
  7. ansible 172.16.1.31 -m user -a "name=www group=www"
  8. 3) 批量创建虚拟用户
  9. ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
  10. 4) 给指定用户创建密码
  11. PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置
  12. 生成密文密码信息方法:
  13. 方法一:
  14. ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'www') }}"
  15. localhost | SUCCESS => {
  16. "msg": "$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1"
  17. }
  18. 方法二:(忽略)
  19. mkpasswd --method=sha-512
  20. 方法三:
  21. yum install -y python-pip
  22. pip install passlib
  23. python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
  24. Password:
  25. $6$rJJeiIerQ8p2eR82$uE2701X7vY44voF4j4tIQuUawmTNHEZhs26nKOL0z39LWyvIvZrHPM52Ivu9FgExlTFgz1VTOCSG7KhxJ9Tqk.
  26. ansible 172.16.1.31 -m user -a 'name=oldboy08 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'

(三)剧本

(1)剧本的实现步骤

  1. 第一步:配置主机清单
  2. 如何配置主机清单
  3. 第一种方式: 分组配置主机信息
  4. [web]
  5. 172.16.1.7
  6. 172.16.1.8
  7. 172.16.1.9
  8. [data]
  9. 172.16.1.31
  10. 172.16.1.41
  11. 操作过程
  12. [root@m01 ansible-playbook]# ansible data -a "hostname"
  13. 172.16.1.31 | CHANGED | rc=0 >>
  14. nfs01
  15. 172.16.1.41 | CHANGED | rc=0 >>
  16. backup
  17. [root@m01 ansible-playbook]# ansible web -a "hostname"
  18. 172.16.1.7 | CHANGED | rc=0 >>
  19. web01
  20. 第二种方式: 主机名符号匹配配置
  21. [web]
  22. 172.16.1.[7:9]
  23. [web]
  24. web[01:03]
  25. 第三种方式: 跟上非标准远程端口
  26. [web]
  27. web01:52113
  28. 172.16.1.7:52113
  29. 第四种方式: 主机使用特殊的变量
  30. [web]
  31. 172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
  32. [web]
  33. web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
  34. 第五种方式: 主机组名嵌入配置
  35. [rsync:children] --- 嵌入子组信息
  36. rsync_server
  37. rsync_client
  38. [rsync_server]
  39. 172.16.1.41
  40. [rsync_client]
  41. 172.16.1.31
  42. 172.16.1.7
  43. [root@m01 /etc/ansible]# ansible rsync -a "hostname"
  44. 172.16.1.7 | CHANGED | rc=0 >>
  45. web01.com
  46. 172.16.1.41 | CHANGED | rc=0 >>
  47. backup
  48. 172.16.1.31 | CHANGED | rc=0 >>
  49. nfs01
  50. [web:vars] --- 嵌入式变量信息
  51. ansible_ssh_host=172.16.1.7
  52. ansible_ssh_port=52113
  53. ansible_ssh_user=root
  54. ansible_ssh_pass=123456
  55. [web]
  56. web01
  57. 第二步:编写剧本
  58. 剧本编写规范: pyyaml -- 三点要求
  59. 1. 合理的信息缩进 两个空格表示一个缩进关系
  60. 标题一
  61. 标题二
  62. 标题三
  63. PS: 在ansible中一定不能用tab进行缩进
  64. 2. 冒号的使用方法
  65. hosts: 172.16.1.41
  66. tasks:
  67. yum: name=xx
  68. PS: 使用冒号时后面要有空格信息
  69. 以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格
  70. 3. 短横线应用 -(列表功能)
  71. - 张三
  72. - 打游戏
  73. - 运动
  74. - 李四
  75. 学习
  76. 湖南
  77. - 王五
  78. 运动
  79. 深圳
  80. PS: 使用短横线构成列表信息,短横线后面需要有空格
  81. 剧本编写常见错误:
  82. 01. 剧本语法规范是否符合(空格 冒号 短横线)
  83. 02. 剧本中模块使用是否正确
  84. 03. 剧本中一个name标识下面只能写一个模块任务信息
  85. 04. 剧本中尽量不要大量使用shell模块
  86. 第三步:执行剧本
  87. 如何执行剧本:
  88. 第一个步骤: 检查剧本的语法格式
  89. ansible-playbook --syntax-check rsync_server.yaml
  90. 第二个步骤: 模拟执行剧本
  91. ansible-playbook -C rsync_server.yaml
  92. 第三个步骤: 直接执行剧本
  93. ansible-playbook rsync_server.yaml

(2)一键化部署Rsync服务

1.命令实现

  1. 服务端的操作
  2. 第一个历程安装软件:
  3. ansible 172.16.1.41 -m yum -a "name=rsync state=installed"
  4. 第二个历程编写文件:
  5. ansible 172.16.1.41 -m copy -a "src=/etc/rsyncd.conf dest=/etc/"
  6. 第三个历程创建用户
  7. ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
  8. 第四个历程创建目录
  9. ansible 172.16.1.41 -m file -a "dest=/backup state=directory owner=rsync group=rsync"
  10. 第五个历程创建密码文件
  11. ansible 172.16.1.41 -m copy -a "content='rsync_backup:123456' dest=/etc/rsync.password mode=600"
  12. 第六个历程启动服务
  13. ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"
  14. 客户端的操作:
  15. 第一个历程: 创建密码文件
  16. ansible 客户端地址 -m copy -a "content='rsync_backup:123456' dest=/etc/rsync.password mode=600"

2.剧本实现

  1. [root@m01 ansible-playbook]# vim rsync_server.yaml
  2. - hosts: rsync_server
  3. tasks:
  4. - name: 01-install rsync
  5. yum: name=rsync state=installed
  6. - name: 02-push conf file
  7. copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
  8. - name: 03-create user
  9. user: name=rsync create_home=no shell=/sbin/nologin
  10. #shell: useradd rsync -M -s /sbin/nologin
  11. - name: 04-create backup dir
  12. file: path=/backup state=directory owner=rsync group=rsync
  13. - name: 05-create password file
  14. copy: content=rsync_backup:123456 dest=/etc/rsync.password mode=600
  15. - name: 06-start rsync server
  16. service: name=rsyncd state=started enabled=yes
  17. - hosts: rsync_clients
  18. tasks:
  19. - name: 01-install rsync
  20. yum: name=rsync state=installed
  21. - name: 02-create password file
  22. copy: content=123456 dest=/etc/rsync.password mode=600
  23. - name: 03-create test file
  24. file: dest=/tmp/test.txt state=touch
  25. - name: 04-check test
  26. 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)

  1. 第一步:配置zabbix仓库
  2. [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
  3. [root@m01 ~]# sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
  4. 第二步: 下载安装zabbix服务端相关软件
  5. zabbix服务程序软件: zabbix-server-mysql
  6. zabbix服务web软件: zabbix-web-mysql httpd php
  7. 数据库服务软件: mariadb-server
  8. [root@m01 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server
  9. [root@m01 ~]# systemctl start mariadb.service && systemctl enable mariadb.service
  10. 第三步:软件配置
  11. vim /etc/zabbix/zabbix_server.conf
  12. 126 DBPassword=zabbix
  13. vim /etc/httpd/conf.d/zabbix.conf
  14. 21         php_value date.timezone Asia/Shanghai
  15. 第四步:编写配置数据库服务
  16. systemctl start mariadb.service 
  17. systemctl status mariadb.service
  18. mysql
  19. create database zabbix character set utf8 collate utf8_bin; --创建zabbix数据库--zabbix
  20. grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; --创建数据库管理用户
  21. zcat /usr/share/doc/zabbix-server-mysql-4.0.21/create.sql.gz|mysql -uzabbix -pzabbix zabbix --在zabbix数据库中导入相应的表信息
  22. chown -R apache /usr/share/zabbix/assets --必须有
  23. 第五个里程: 启动zabbix程序相关服务
  24. 数据库服务 zabbix服务 httpd服务
  25. systemctl start zabbix-server.service httpd mariadb.service
  26. systemctl enable zabbix-server.service httpd mariadb.service
  27. 说明: 至此zabbix-server命令行操作结束
  28. LNMP: nginx php mysql 
  29. LAMP: apache(php模块) mysql
  30.     
  31. 第六个里程: 登录zabbix服务端web界面, 进行初始化配置
  32. http://10.0.0.71/zabbix/setup.php
  33.     
  34. 10051  zabbix-server 服务端端口号
  35. 10050  zabbix-agent  客户端端口号
  36. /etc/zabbix/web/zabbix.conf.php   -- 记录web页面初始化信息
  37.     
  38. 第七个里程: 登录zabbix服务web页面
  39. http://10.0.0.71/zabbix/
  40. 用户名Admin 密码zabbix

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

  1. 第一个里程: 下载安装zabbix yum 源文件
  2.     LTS long time support
  3.     1) aliyun zabbix yum 源 
  4.     2) 清华源
  5.     rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
  6.     
  7.     第二个里程: 下载安装zabbix客户端软件
  8.     yum install -y zabbix-agent
  9.     或者
  10.     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
  11.     
  12.     第三个里程: 编写zabbix客户端配置文件
  13.     vim /etc/zabbix/zabbix_agentd.conf
  14.     98 Server=172.16.1.71
  15.     
  16.     第四个里程: 启动zabbix-agent服务
  17.     [root@web01 ~]# systemctl start zabbix-agent
  18.     [root@web01 ~]# netstat -lntup|grep 10050
  19.     tcp      0     0 0.0.0.0:10050           0.0.0.0:*            LISTEN      4509/zabbix_agentd  
  20.     tcp      0     0 :::10050                :::*                 LISTEN      4509/zabbix_agentd

(二)实现zabbix自定义监控

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

  1. 1) 在zabbix-agent进行配置文件编写
  2. 第一步: 编写自定义监控命令
  3. ps -ef|grep -c [n]ginx
  4. 第二步: 编写zabbix-agent配置文件
  5. 第一种方法: 直接修改zabbix-agent配置文件参数
  6. UserParameter=
  7. 第二种方法: 在/etc/zabbix/zabbix_agentd.d/目录中编写自定义监控文件
  8. vim web_server.conf
  9. UserParameter=键(变量名),值(变量信息)
  10. UserParameter=web_state,ps -ef|grep -c [n]ginx
  11. 第三步: 重启zabbix-agent服务
  12. systemctl restart zabbix-agent
  13. 2) 在zabbix-server命令行进行操作
  14. 第一步: 检测自定义监控信息是否正确
  15. yum install -y zabbix-get
  16. zabbix_get -s 172.16.1.7 -k 'web_state'
  17. ps:
  18. -s 表示要监控的主机IP 与zabbix-agent配置文件里的信息一致
  19. -k key即键信息
  20. 3) 在zabbix-server网站页面进行配置(如下图所示)
  21. 第一步: 进入到创建监控项页面:
  22. 配置---主机---选择相应主机的监控项
  23. 第二步: 监控项页面如何配置
  24. 名称 键值 更新间隔时间 应用集
  25. 第三步: 检查是否收集到监控信息

 

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

  1. 1) 在zabbix-agent端编写配置文件
  2. vim server_state.conf
  3. UserParameter=server_state[*],netstat -lntup|grep -c $1
  4. 2) 在zabbix-server命令测试
  5. zabbix_get -s 172.16.1.7 -k 'server_state[22]'
  6. 3) 修改配置页面
  7. 键值: server_state[22]

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

  1. 1.邮件信息报警
  2. 第一个历程: 创建触发器
  3. 配置---主机---选择相应监控主机触发器---创建触发器 
  4. 设置好表达式
  5. {web01:server_state[nginx].last()}<=2
  6. {监控主机名称:键值名称.调用的表达式函数}<=2 
  7. 第二个历程: 修改动作配置
  8. 配置---动作---将默认动作进行开启    
  9.     
  10. 第三个历程: 建立和163邮箱服务关系
  11. 管理---报警媒介类型---创建报警媒介
  12.     
  13. 第四个历程: 定义接收报警的邮件地址
  14. 小人头--报警媒介--设置收件人信息
  15.        
  16. 2.微信报警
  17. 第一个历程: 需要注册企业微信,并进行配置
  18. 我的企业: 
  19. 01. 获取企业id: ww32d68104ab5f51b0
  20. 02. 获取企业二维码: 允许员工加入
  21. 管理工具:
  22. 01. 成员加入---进行审核通过
  23. 应用小程序:
  24. 01. 进行创建
  25. 02. 收集程序信息
  26.     AgentId: 1000006
  27.     Secret: RvQYpaCjWbYMCcwhnPqg1ZYcEGB9cOQCvvlkn-ft6j4
  28.         
  29. 第二个历程: 编写脚本(python)
  30. cat /etc/zabbix/zabbix-server.conf 
  31. AlertScriptsPath=/usr/lib/zabbix/alertscripts  --- 放置告警脚本
  32.     
  33. 执行脚本报错问题解决:
  34. 01. 问题: No module named requests
  35. yum install -y python-pip
  36. pip install requests
  37. 02. 问题: 脚本执行语法
  38.     
  39. 第三个历程: 修改添加报警媒介---定义了发微信配置
  40.     
  41. 第四个历程: 配置接收微信的人员
  42.     
  43. 3.短信和电话:
  44. 利用第三方短信电话报警平台
  45. 01. 利用阿里大鱼(收费)
  46.     https://yq.aliyun.com/articles/658524?spm=a2c4e.11155472.0.0.d821153fAjrH3q  --- 自行研究
  47. 02. 利用onealert发送告警
  48.     
  49. 第一个历程: 配置报警平台
  50. 01. 配置--应用--选择zabbix报警
  51. 02. 配置--通知策略
  52. 03. 配置--分派策略

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/422690
推荐阅读
相关标签
  

闽ICP备14008679号