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

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

总体架构介绍

序号 类型 名称 外网地址 内网地址 软件
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守护进程

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服务

20200524103104227

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:WindowsSystem32driversetchosts文件
后面追加
10.0.0.7            www.cxt.com

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

20200524151112236

(六)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.进行访问测试

20200524151816183

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

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

20200524160139243

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

20200524174127243

20200524174755629

20200524174828531

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

 

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

20200605101702320

 

六、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

20200601111352539

(五)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

客户端:其他服务器

(一)部署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         --- 角色目录

 

(二)Rsync剧本

(三)NFS剧本

未完待续...

 

八、网站监控服务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

20200606155859880

20200606160307835

20200606160323649

(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

 

 

 

 

 

 

没有账号? 忘记密码?

社交账号快速登录