赞
踩
Linux运维企业架构项目实战系列
目录
(一)首先四台服务器预装Nginx服务(lb01 web01/02/03)
(三)如何实现keepalived自动释放VIP地址资源(lb01/02)
总体架构介绍
序号 | 类型 | 名称 | 外网地址 | 内网地址 | 软件 |
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 rsync_backup@172.16.1.41::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/ 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
- 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 --检测脚本
- 第一步:浏览器登录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
- [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 rsync_backup@172.16.1.41::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 <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 停止实时同步服务
- 第一个历程: 更新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
- <?php
- phpinfo();
- ?>
-
- 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
- <?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.进行访问测试
- 第一个历程: 获取代码信息(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
- <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记录
- 第一个历程: 准备两台服务器并且均配置好负载均衡服务 (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 1781668237@qq.com
- 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 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
- ...
- 第一步:安装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 rsync_backup@172.16.1.41::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. 配置--分派策略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。