linux集群项目实践

第1章 rsync

1、服务端

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
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to backup!
path = /backup/
EOF

2、rsync客户端

cat >>/server/scripts/bak.sh<<EOF
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=111111
IP=$(hostname -i)
mkdir -p /backup/${IP}
filename=${IP}_$(date +"%F_%w")

#1.tar
tar zcfh /backup/${IP}/${filename}.tar.gz /var/spool/cron /etc/rc.local /server/scripts &>/dev/null && \
touch /backup/${IP}/${filename}.flag && \
#2.check
md5sum /backup/${IP}/${filename}.tar.gz > /backup/${IP}/${filename}.flag && \
#3.clear
find /backup -type f -mtime +7|xargs rm -rf && \
#4.backup
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
EOF
crontab -e
#####backup#####
00 00 * * * /bin/sh /server/scripts/bak.sh
for n in `seq 1 30`;do date -s "2020/04/$n";/bin/sh /server/scripts/bak.sh;done

3、服务端

cat >>/server/scripts/del.sh<<EOF
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
find /backup -type f -mtime +180|xargs rm -rf && \
find /backup -type f ! -name "*_1.tar.gz" -mtime +7|xargs rm -rf
EOF
crontab -e
#####del#####
00 00 * * * /bin/sh /server/scripts/del.sh

第2章 nfs

1、服务端

yum install nfs-utils.x86_64 rpcbind.x86_64 -y

systemctl start rpcbind.service
systemctl enable rpcbind.service
rpcinfo -p 127.0.0.1

systemctl start nfs
systemctl enable nfs

cat >>/etc/exports<<EOF
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)
EOF

systemctl reload nfs
showmount -e 172.16.1.31

useradd -u 1111 -s /sbin/nologin -M www
chown www.www /data /data1

2、客户端

yum install nfs-utils.x86_64 rpcbind.x86_64 -y
systemctl start rpcbind.service
systemctl enable rpcbind.service

mkdir -p /data /data1
showmount -e 172.16.1.31

开机自动挂载
方法1:
cat >>/etc/rc.local<<EOF
/usr/bin/mount -t nfs 172.16.1.31:/data /data
/usr/bin/mount -t nfs 10.0.0.31:/data1 /data1
EOF

chmod +x /etc/rc.local
reboot

方法2:
cat >>/etc/fstab<<EOF
172.16.1.31:/data /data nfs defaults,soft 0 0
10.0.0.31:/data1 /data1 nfs defaults,intr 0 0
EOF

systemctl list-unit-files |grep remote
systemctl start remote-fs.target
systemctl enable remote-fs.target
reboot
注意,当使用soft或hard,intr时,需要关闭remote-fs.target

第3章 inotify实时备份

1、backup服务器已配置完成rsync

2、nfs01服务器配置inotify-tools

1、确认nfs01能push数据到backup
export RSYNC_PASSWORD=111111
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup

2、确认nfs01能安装inotify-tools
uname -r >2.6.13
ls -ltr /proc/sys/fs/inotify存在以下三个文件
-rw-r--r-- 1 root root 0 May  7 15:31 max_user_watches  #单进程能监控的文件数
-rw-r--r-- 1 root root 0 May  7 15:31 max_user_instances #每个用户可以运行的进程数
-rw-r--r-- 1 root root 0 May  7 15:31 max_queued_events #事件队列可容纳的事件数

3、安装,测试inotify-tools
yum install inotify-tools -y
inotifywait -mrq --timefmt '%y%m%d %H:%M:%S' --format '%T %w%f' -e delete,close_write /data
4、编写脚本实现实时备份
cat >/server/scripts/monitor.sh<<EOF
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=111111
inotifywait -mrq --format '%w%f' -e delete,close_write /data|\
while read line
do
   [ ! -e $line ] && \
   rsync -az --delete /data/ rsync_backup@172.16.1.41::backup && continue
   rsync -az --delete $line rsync_backup@172.16.1.41::backup
done
EOF

5、后台运行,开始监控/data/文件夹事件
/bin/sh /server/scripts/monitor.sh &

第4章 ansible

1、安装ansible

rpm -qa libselinux-python
yum install ansible -y

2、解决第一次远程连接输入yes/no,即取消StrictHostKeyChekcing

#方法一
cp /etc/ansible/ansible.cfg{,.ori}
sed -i '71s/#//g' /etc/ansible/ansible.cfg
awk 'NR==71{print $0}' /etc/ansible/ansible.cfg
#方法二
sed -i -r '375s/#(.*)/\1 -o StrictHostKeyChecking=no/g' /etc/ansible/ansible.cfg
awk 'NR==375{print $0}' /etc/ansible/ansible.cfg

2、配置批量管理主机组

2.1、基于密码实现

cp /etc/ansible/hosts{,.ori}
cat >/etc/ansible/hosts<<EOF
[back_nfs]
172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456
EOF

#可加上特殊端口
172.16.1.31 ansible_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
#验证批量管理是否成功
ansible back_nfs -m command -a "ifconfig"

2.2、基于秘钥实现

cat >/etc/ansible/hosts<<EOF
[back_nfs]
172.16.1.31
172.16.1.41
EOF
ssh-keygen -P '' -q -f ~/.ssh/id_rsa
for n in 31 41
do
   sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 172.16.1.$n
done
#验证批量管理是否成功
ansible back_nfs -m command -a "ifconfig"

3、一键安装ansible+rsync+nfs+inotify(命令行版)

1、总脚本one_click_install.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
source /etc/init.d/functions
log="/server/scripts/one_click_install.log"
remote_ip="/server/scripts/remote_ip.list"

#0.optimize local sshd
echo '#####'$(date +"%F %T")': start optimize local sshd' >>${log}
cp /etc/ssh/sshd_config{,.ori}
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
systemctl restart sshd
echo '#####'$(date +"%F %T")': end optimize local sshd' >>${log}

#1.install ansible
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -qa libselinux-python|grep libselinux-python|grep -v grep
if [ $? -ne 0 ]
then
   echo '#####'$(date +"%F %T")': start install libselinux-python#####' >>${log}
   yum install libselinux-python -y
   echo '#####'$(date +"%F %T")': end install libselinux-python#####' >>${log}
fi
echo '#####'$(date +"%F %T")': start install ansible#####' >>${log}
yum install ansible -y >>${log}
if [ $? -eq 0 ]
then
   action "ansible install successful" /bin/true >>${log}
else
   action "ansible install failure" /bin/false >>${log}
fi
echo '#####'$(date +"%F %T")': end install ansible#####' >>${log}

#2.create&&send key through sshd
echo '#####'$(date +"%F %T")': start create&&send key through sshd' >>${log}
rm -rf ~/.ssh
ssh-keygen -P '' -q -f ~/.ssh/id_rsa
for rip in `cat ${remote_ip}`
do
   sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${rip} >>${log}
done
echo '#####'$(date +"%F %T")': end create&&send key through sshd' >>${log}

#3.ansible no stricthostkeychecking
echo '#####'$(date +"%F %T")': start config ansible' >>${log}
sed -i -r '375s/^#(.*)/\1 -o StrictHostKeyChecking=no/g' /etc/ansible/ansible.cfg

#4.config hosts
cat >/etc/ansible/hosts<<EOF
[rsync_server]
172.16.1.41

[rsync_client]
172.16.1.7
172.16.1.8

[nfs_server]
172.16.1.31

[nfs_client]
172.16.1.7
172.16.1.8

[optimize_remote_ssh]
172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41
EOF
echo '#####'$(date +"%F %T")': end config ansible' >>${log}

#5.optimize remote ssh
echo '#####'$(date +"%F %T")': start optimize remote ssh' >>${log}
ansible optimize_remote_ssh -m script -a "/server/scripts/optimize_ssh.sh" >>${log}
echo '#####'$(date +"%F %T")': end optimize remote ssh' >>${log}

#6.install rsync_server
echo '#####'$(date +"%F %T")': start install rsync server' >>${log}
ansible rsync_server -m script -a "/server/scripts/install_rsync_server.sh" >>${log}
echo '#####'$(date +"%F %T")': end install rsync server' >>${log}

#7.cron rsync_server
echo '#####'$(date +"%F %T")': start cron rsync server' >>${log}
ansible rsync_server -m copy -a "src=/server/scripts/cron_rsync_server.sh dest=/server/scripts/del.sh" >>${log}
ansible rsync_server -m cron -a "name='clean history' minute=00 hour=08 job='/bin/sh /server/scripts/del.sh &>/dev/null'" >>${log}
echo '#####'$(date +"%F %T")': end cron rsync server' >>${log}

#8.cron rsync_client
echo '#####'$(date +"%F %T")': start cron rsync client' >>${log}
ansible rsync_client -m copy -a "src=/server/scripts/cron_rsync_client.sh dest=/server/scripts/bak.sh" >>${log}
ansible rsync_client -m cron -a "name='client backup' minute=00 hour=00 job='/bin/sh /server/scripts/bak.sh &>/dev/null'" >>${log}
echo '#####'$(date +"%F %T")': end cron rsync client' >>${log}

#9.verify rsync server and client
echo '#####'$(date +"%F %T")': start verify rsync server and client' >>${log}
ansible rsync_client -m script -a "/server/scripts/verify_rsync_client.sh" >>${log}
ansible rsync_server -m shell -a "/bin/sh /server/scripts/del.sh" >>${log}
ansible rsync_server -m shell -a "/usr/bin/ls -ltrR /backup"  >>${log}
echo '#####'$(date +"%F %T")': end verify rsync server and client' >>${log}

#9.install nfs_server
echo '#####'$(date +"%F %T")': start install nfs server' >>${log}
ansible nfs_server -m script -a "/server/scripts/install_nfs_server.sh" >>${log}
echo '#####'$(date +"%F %T")': end install nfs server' >>${log}

#10.install nfs_client
echo '#####'$(date +"%F %T")': start install nfs client' >>${log}
ansible nfs_client -m script -a "/server/scripts/install_nfs_client.sh" >>${log}
echo '#####'$(date +"%F %T")': end install nfs client' >>${log}

#11.inotify
echo '#####'$(date +"%F %T")': start install inotify' >>${log}
ansible nfs_server -m script -a "/server/scripts/install_inotify.sh"  >>${log}
ansible nfs_server -m copy -a "src=/server/scripts/monitor_inotify.sh dest=/server/scripts/monitor_inotify.sh" >>${log}
ansible nfs_server -m shell -a "nohup /bin/sh /server/scripts/monitor_inotify.sh &"  
echo '#####'$(date +"%F %T")': end install inotify' >>${log}
echo "$(date +"%F %T"): all done" >>${log}

2、remote_ip.list

172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41

3、optimize_ssh.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ip=$(hostname -i)
cp /etc/ssh/sshd_config{,.ori}
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
sed -i "s/#ListenAddress 0.0.0.0/ListenAddress ${ip}/g" /etc/ssh/sshd_config
systemctl restart sshd

4、install_rsync_server.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -qa rsync|grep rsync|grep -v grep
if [ $? -ne 0 ]
then
   yum install rsync -y
fi
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
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to backup!
path = /backup/
EOF

useradd -s /sbin/nologin -M rsync
mkdir -p /backup
chown rsync.rsync /backup

echo "rsync_backup:111111">/etc/rsync.password
chmod 600 /etc/rsync.password

systemctl start rsyncd
systemctl enable rsyncd

5、cron_rsync_server.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
find /backup -type f -mtime +180|xargs rm -rf && \
find /backup -type f ! -name "*_1.tar.gz" -mtime +7|xargs rm -rf

6、cron_rsync_client.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=111111
IP=$(hostname -i)
mkdir -p /backup/${IP}
filename=${IP}_$(date +"%F_%w")

#1.tar
tar zcfh /backup/${IP}/${filename}.tar.gz /var/log/cron /etc/rc.local /server/scripts &>/dev/null && \
touch /backup/${IP}/${filename}.flag && \

#2.md5sum
md5sum /backup/${IP}/${filename}.tar.gz > /backup/${IP}/${filename}.flag && \

#3.clean
find /backup -type f -mtime +7|xargs rm -rf && \

#4.backup
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null

7、verify_rsync_client.sh

for i in `seq 1 30`;do date -s "2020/04/$i";/bin/sh /server/scripts/bak.sh;done
for i in `seq 1 10`;do date -s "2020/05/$i";/bin/sh /server/scripts/bak.sh;done
/usr/bin/ls -ltrR /backup
/usr/sbin/ntpdate ntp.aliyun.com

8、install_nfs_server.sh

#!/bin/sh
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
source /etc/init.d/functions
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nfs-utils.x86_64 rpcbind.x86_64 -y
if [ $? -eq 0 ]
then
   action "nfs-utils.x86_64 rpcbind.x86_64 install successful" /bin/true
else
   action "nfs-utils.x86_64 rpcbind.x86_64 install failure" /bin/false
fi

systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs

cat>/etc/exports<<EOF
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(rw,async)
EOF

systemctl reload nfs
useradd -u 1111 -s /sbin/nologin -M www
mkdir -p /data /data1
chown www.www /data
chown nfsnobody.nfsnobody /data1

9、install_nfs_client.sh

#!/bin/sh
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
source /etc/init.d/functions
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nfs-utils.x86_64 rpcbind.x86_64 -y
if [ $? -eq 0 ]
then
   action "nfs-utils.x86_64 rpcbind.x86_64 install successful" /bin/true
else
   action "nfs-utils.x86_64 rpcbind.x86_64 install failure" /bin/false
fi
systemctl start rpcbind
systemctl enable rpcbind

cat>>/etc/fstab<<EOF
172.16.1.31:/data  /data nfs  defaults,soft  0 0
10.0.0.31:/data1  /data1 nfs  defaults,hard,intr 0 0
EOF

useradd -u 1111 -s /sbin/nologin -M www
mkdir -p /data /data1

systemctl enable remote-fs.target
mount -t nfs -o defaults,soft 172.16.1.31:/data
mount -t nfs -o defaults,hard,intr 10.0.0.31:/data1  /data1

10、install_inotify.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
source /etc/init.d/functions

yum install inotify-tools -y
if [ $? -eq 0 ]
then
   action "inotify-tools install successful" /bin/true
else
   action "inotify-tools install failure" /bin/false
fi

11、monitor_inotify.sh

#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=111111

inotifywait -mrq --format '%w%f' -e delete,close_write /data|\
while read line
do
  [ ! -e $line ] && \
  rsync -az --delete /data/ rsync_backup@172.16.1.41::backup && continue
  rsync -az --delete $line  rsync_backup@172.16.1.41::backup
done

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值