准备:
五台服务器 一台管理服务器m01:172.16.1.61、两台应用服务器web01:172.16.1.7和web02:172.16.1.8、一台存储服务器nfs:172.16.1.31、一台实时备份服务器rsync:172.16.1.41
要求:通过m01管理机,实现nfs服务器共享一个目录给两台web服务器
实现nfs服务器数据实时同步到rsync服务器
实现web01、web02、nfs三台服务器重要文件全网备份到rsync
实战:
一、搭建管理机m01
#!/bin/sh
yum install openssh openssl -y &&\
systemctl restart sshd &&\
systemctl enable sshd &&\
yum install epel-release -y &&\
yum install ansible -y &&\
Yum install exportfs -y &&\
yum install libselinux-python
3、rpm -qa|greprpm -qa|grep libselinux-python 检查是否有这个,如果没有,(yum install libselinux-python)
4、cp /etc/ansible/hosts{,.ori} 先备份ansible的配置文件
5、cat >/etc/ansible/hosts<<EOF
#[ ]为主机列表
#1代表服务端2代表客户端
[oldboy]
172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41
[rsync1]
172.16.1.41
[rsync2]
172.16.1.7
172.16.1.8
172.16.1.31
[nfs1]
172.16.1.31
[nfs2]
172.16.1.7
172.16.1.8
[sersync]
172.16.1.31
EOF
6、编辑脚本:生成并分发公钥,最好创建在/server/scripts/下
Vim fenfa.sh
#!/bin/bash
#yum install sshpass -y
#因为前边已经下载了ansible,自带sshpass
#创建公钥不指定密码,即使用原密码
ssh-keygen -f~/.ssh/id_rsa -P '' -q
for ip in 7 8 31 41
do
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip
done
#上边为一个for循环,分发给四个服务器公钥
7、vim /etc/ansible/ansible.cfg +71
取消71行的注释,然后找到374行,取消注释,并在行尾添加 -o StrictHostKeyChecking=no
8、sh fenfa.sh 执行编辑过的脚本,分发公钥给对应ip
9、ansible oldboy -m command -a "free -m" 控制测试
10、本地优化ssh (有问题,待修改)
cat >>/etc/ssh/sshd_config<<EOF
Use DNS no
GSSAPIAuthentication no
PermitEmptyPasswords no
EOF 修改完参数配置,然后重启
systemctl restart sshd
11、ansible oldboy -m copy -a "src=/etc/ssh/sshd_config dest=/etc/ssh/sshd_config backup=yes”
把优化的ssh发送给其他服务器,backup=yes 备份源文件,。
二、编写nfs(共享目录)服务端及客户端脚本
服务端脚本:nfs1.sh
#!/bin/bash
yum install nfs-utils rpcbind -y &&\
Yum install rpcbind -y
systemctl start rpcbind.service &&\
systemctl enable rpcbind.service &&\
systemctl start nfs &&\
systemctl enable nfs &&\
cat >/etc/exports<<EOF
/data 172.16.1.0/24(rw,async,all_squash)
EOF
mkdir -p /data &&\
chown -R nfsnobody.nfsnobody /data &&\
exportfs -r
#下载安装nfs服务和rpc服务并设置启动和开机自启动(先rpc后nfs)
#编辑nfs配置文件设置共享目录和相对应可共享的主机以及权限
#别忘了自己的共享目录是否原本存在,如果不存在先创建
#在这里并没有创建和指定用户,所以默认使用nfsnobody用户
#设置共享目录的属主属组为nfsnobody
#平滑重启
客户端脚本:nfs2.sh
#!/bin/sh
yum install nfs-utils rpcbind -y &&\
systemctl start rpcbind.service &&\
systemctl enable rpcbind.service &&\
mount -t nfs 172.16.1.31:/data /mnt
#下载安装rpc服务和nfs服务理论上讲只需要下载rpc服务即可
#开启并开机自启动rpc服务
#挂载nfs服务端提供的共享目录到本地的(根据情况指定挂载点)
#在此没有设置开机自动挂载
三、编写rsync(推拉服务)服务端和客户端
1. rsync服务端:rsync1.sh
#!/bin/bash
systemctl stop firewalld &&\
systemctl disable firewalld &&\
yum install rsync -y &&\
cp /etc/rsyncd.conf{,.ori} &&\
cat >/etc/rsyncd.conf<<EOF
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 200
timeout = 600
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
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup!
path = /backup/
EOF
useradd -M -s /usr/bin/nologin rsync &&\
mkdir -p /backup &&\
chown -R rsync.rsync /backup/ &&\
echo "rsync_backup:123456" >/etc/rsync.password &&\
chmod 600 /etc/rsync.password &&\
systemctl start rsyncd &&\
systemctl enable rsyncd
#关闭防火墙其他基本优化这里不在写出
#下载安装并备份rsync
#根据需求编辑rsyncd.conf
#创建一个不可登陆的用户
#创建backup目录,并设置属主属组为指定用户
#配置密码文件并把权限设置为600
#启动并设置开机自启动rsync服务
编写rsync客户端:rsync2
#!/bin/bash
yum install rsync -y &&\
echo "123456" >/etc/rsync.password &&\
chmod 600 /etc/rsync.password &&\
systemctl restart rsyncd &&\
systemctl enable rsyncd &&\
echo “export RSYNC_PASSWORD=123456” >>/etc/bashrc &&\
exportfs -r
#下载安装rsync服务
#写入rsync服务端密码到配置文件并设置权限为600
#开启并设定开机自启动rsync服务
#写入密码到变量里边,平滑重启
四、编辑sercync实时同步脚本:sersync.sh
!/bin/bash
echo 'export RSYNC_PASSWORD=123456' >>/etc/bashrc &&\
source /etc/bashrc &&\
yum install epel-release -y &&\
yum install inotify-tools -y &&\
touch /server/scripts/monitor.sh
cat >/server/scripts/monitor.sh<<EOF
#!/bin/sh
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data|while read line
do
cd /data && rsync -az --delete ./ rsync_backup@172.16.1.41::backup
done
EOF
#输入rsync推拉密码到变量然后重新启动变量
#下载epel源,下载inotify机制
#创建实时同步命令脚本
#编辑实时同步命令脚本
五、编辑一键实施安装部署各种服务到对应服务器
vim one.ok.sh
!/binsh
ansible rsync1 -m script -a "/server/scripts/rsync1.sh" &&\
ansible rsync2-m script -a "/server/scripts/rsync2.sh" &&\
ansiblenfs1-m script -a "/server/scripts/nfs1.sh" &&\
ansiblenfs2 -m script -a "/server/scripts/nfs2.sh" &&\
ansiblesersync-m script -a "/server/scripts/sersync.sh"
执行一键安装部署脚本
sh one.ok.sh