部署web之资源映射共享+数据实时同步备份

模拟跳板机管理部署web项目并实现网络存储数据同步

从0开始
代号master/jump10机器远程一键脚本化部署这5台机器代号13-17

13-15部署web项目并挂载
安装nginx nfs工具,挂载nfs到nginx资源根目录
注意细节:创建系统进程用户和nfs映射用户Uid和Pid相同免映射。以便提供目录权限
服务跑起 nginx

rsync-17
安装部署rysnc服务
创建配置rsync同步备份模块目录 认证用户密码文件及600权限修改
服务跑起 rysnc

nfs-16 + lsync实时同步
安装rsync确保lsyncd能同步到备份服务器 nfs共享目录
配置nfs共享模块及映射用户和目录权限,及可挂载映射范围
lsyncd配置本地nfs共享目录检测能实时同步到rsync备份模块
服务跑起 lsync nfs

检查整体架构的应用可用性
nginx入口资源访问
写入到nfs
同步备份到rsync

部署流程图解

在这里插入图片描述

脚本部署

##master/jump与被管理机安全
1.master-10机器关掉密码认证,有且只能通过交换公私钥登录
2.所有主机的ssh端口全修改隐私为端口10086
3.被管理的机器关掉密码认证,只能公钥模式登录(默认开启)。且只能通过内网连接会话

PC端安装git配置ssh免密连接jump10。进行jump安全设置,关掉密码登录。

ssh-keygen.exe
ssh-copy-id root@10.0.0.10
vim /etc/ssh/sshd_config 修改为PasswordAuthentication no
logout 登出会话重新登录
ssh root@10.0.0.10

在jump10配置ssh免密到13-17

【坑】注意脚本需在测试环境跑一遍验证使用情况,检查命令代码是否有误,bash执行相对作用域权限范围小点。跑之前保证机器在线

++++++++++++vim autoPreNoPasswdSsh.sh+++++++++++++++

#!/bin/bash
#定义内网字符串数组 var=(“” “”)
servers=(“root@172.16.1.13” “root@172.16.1.14” “root@172.16.1.15” “root@172.16.1.16” “root@172.16.1.17”)

#测试为普通文件则为真
if [ -f /root/.ssh/id_rsa ];
then
echo “密钥对已经存在,请检查远端’${servers[@]}'是否已免密化”
exit 1
fi

#非交互式生成密钥对 名字尽量和默认生成名字一样这是固定默认条件,不然默认找不到密钥文件 参数 -t --type -n --newPass
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N “”

#安装ssh非交互输入式密码输入工具sshpass ;
yum -y install sshpass
#【坑】字符串数组 整体引用 “ v a r s [ @ ] " f o r s e r v e r i n " {vars[@]}" for server in " vars[@]"forserverin"{servers[@]}”; do
#防止由于服务器名中包含空格或特殊字符""括起来
echo “正在发送公钥搭到KaTeX parse error: Expected 'EOF', got '#' at position 10: server" #̲【坑】-o StrictHos…server” -o StrictHostKeyChecking=no > /tmp/noPasswdSsh.log 2>&1
done

echo “公密钥已分发,正在验证登录******”
for server in “${servers[@]}”;do
echo “ssh $server hostname:$server免密验证成功”
done

这里讲一讲脚本,shell环境。配置文件和alias关系

#脚本。是本质是定义变量和定义命令的集合。
#脚本执行.=source不创建独立子shell环境;bash 和文件内部#!/bin/bash指定解释器为bash则会创建独立子shell环境
#配置文件。这里讲用户配置文件用户登录时会加载系统和用户配置文件。
#理解
在这里插入图片描述请添加图片描述

请添加图片描述

#运行环境:./和bash执行脚本=固定创建了指定独立的解释器shell环境。
#而source.没有新建shell会话,而source file 能直接再加载一遍当前shell系统用户配置文件
#配置文件应用范围。source .执行时共享shell解释器和及自定义配置文件内容;指定bash环境则独#立继承出一个临时的作用域shell环境。所以不会直接加载父shell配置文件定义。不会解析用户alias配置。更不会加载系统级配置文件定义。
#alias别名。原理本质上一次性解析映射对应的命令字符,所以不可以从变量中提取拼接映射,而变量提取的字符拼接可以自动为执行命令。所以alias适用用户交互式 Shell 会话,并不适用于脚本。子shell也不会解析用户alias配置,但是可以加载出变量定义

echo “alias正在为您设置快捷登录命令”
#保持配置文件备份习惯
cp /root/.bashrc{,.bak}
cat >> /root/.bashrc << ‘EOF’
alias ssh13=“ssh root@172.16.1.13 -p 10086”
alias ssh14=“ssh root@172.16.1.14 -p 10086”
alias ssh15=“ssh root@172.16.1.15 -p 10086”
alias ssh16=“ssh root@172.16.1.16 -p 10086”
alias ssh17=“ssh root@172.16.1.17 -p 10086”
EOF
#【坑】这里子shell可以起到刷新配置文件作用。如果是系统配置文件 子shell无权刷新,简而言之独立子shell作用域范围稍微低一点点
#刷新用户配置文件
source /root/.bashrc

#双数组下标引用。具体引用某一个数组元素${logmds[i]}
logcmds=(“ssh13” “ssh14” “ssh15” “ssh16” “ssh17”)
#利用下标引用俩个数组 | KaTeX parse error: Expected '}', got '#' at position 2: {#̲servers[@]}表示数组…{#servers[@]}; i++)); do
echo “ s e r v e r s [ i ] 快捷登录命令: {servers[i]}快捷登录命令: servers[i]快捷登录命令:{logcmds[i]}设置成功”
done

#修改远端ssh端口10086,关掉端口不影响公钥模式登录,添加入口规则只有内网IP可以放行
#入口安全控制iptables Access source --package数据包协议 iptables -P INPUT DROP
#ssh13 “iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 10086 -j ACCEPT”
#ssh17 “iptables -A INPUT -s 172.16.1.10 -p tcp --dport 10086 -j ACCEPT”;“iptables-save > /etc/sysconfig/iptables”

#远程修改端口
##ssh 10.0.0.14 没有指定用户名,系统会默认使用当前本地用户的用户名来尝试连接远程主机
for ip in {13…17}; do
echo "修改172.16.1. i p s s h 为 10086 端口中 . . . " s s h 172.16.1. {ip}ssh为10086端口中..." ssh 172.16.1. ipssh10086端口中..."ssh172.16.1.{ip} “sed -i -r ‘/^#?Port 22/c Port 10086’ /etc/ssh/sshd_config”
done
echo ‘=端口修改完成=======’

#远程修改ssh配置文件 不允许密码登录允许公钥登录
for ip in {13…17}; do
echo "禁用密码验证登录…机器172.16.1. i p " s s h 172.16.1. {ip}" ssh 172.16.1. ip"ssh172.16.1.{ip} “sed -i -r ‘/^#?PasswordAuthentication/c PasswordAuthentication no’ /etc/ssh/sshd_config”
echo "允许公钥登录中…机器172.16.1. i p " s s h 172.16.1. {ip}" ssh 172.16.1. ip"ssh172.16.1.{ip} “sed -i -r ‘/^#?PubkeyAuthentication/c PubkeyAuthentication yes’ /etc/ssh/sshd_config”
done

echo “"
#[domain noproblem]【坑】修改监听端口绑定在本地哪个网卡ip地址,监听外界请求;部署入口流量端口控制
for ip in {13…17}; do
echo "修改程序端口在指定ip上监听中…机器172.16.1. i p " s s h 172.16.1. {ip}" ssh 172.16.1. ip"ssh172.16.1.{ip} “sed -i -r '/^#?ListenAddress 0.0.0.0/c ListenAddress 172.16.1.${ip} ’ /etc/ssh/sshd_config”
done
echo "

#批量验证ssh修改情况
for ip in {13…17}; do
echo "请核实配置文件修改情况,正在拉取172.16.1. i p s s h d 安全配置如下 " s s h 172.16.1. {ip}sshd安全配置如下" ssh 172.16.1. ipsshd安全配置如下"ssh172.16.1.{ip} “grep -E ‘^(Port|PasswordAuthentication|PubkeyAuthentication|ListenAddress)’ /etc/ssh/sshd_config”
echo ‘===================================================================’
done

echo “重启sshd服务中===================================”
for ip in {13…17}; do
#或者不重启重载配置systemctl daemon-reload&&systemctl reload sshd
ssh 172.16.1. i p " s y s t e m c t l r e s t a r t s s h d " e c h o " 172.16.1. {ip} "systemctl restart sshd" echo "172.16.1. ip"systemctlrestartsshd"echo"172.16.1.{ip}重新服务成功"
done

for ip in {13…17}; do
echo "正在远程查看sshd端口情况,机器172.16.1. i p " s s h − p 10086 r o o t @ 172.16.1. {ip}" ssh -p 10086 root@172.16.1. ip"sshp10086root@172.16.1.{ip} “ss -tunlp|grep sshd|grep -v grep”
echo “分割线=====”
done
echo ‘脚本执行结束==========’

++++++++++++++++++++++++++++++++++++bash+++++++++++++++++++++++++++++++++++++

bash -n autoPreNoPasswdSsh.sh
bash autoPreNoPasswdSsh.sh

#快照准备 #注意bash执行别名配置不加载

远程一键部署 rsync综合备份架构

vim rsync1.sh
++++++++++++++sh+++++++++++++++++++++++++++++++++
yum install rsync -y

cat > /etc/rsyncd.conf << ‘EOF’
uid =syncDaemon
gid = Daemon
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = nfsUser
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################

配合日志看ERROR: Unknown module ‘nfs1’ Connection refused (111)等问题

rsync: failed to connect to 172.161.1.17 (172.161.1.17): Connection refused (111) 此报错是通信问题,比如地址映射正确不混肴冲突,能通rsyncd才能正确识别-传输数据

#auth failed on module nfs1 from UNKNOWN (172.28.237.65) for root: no matching rule
#rsync error: error in socket IO (code 10) at clientserver.c(126) 此报错应该是模块名或者目录问题
##这里仔细查找配置文件问题。注意模块名【坑】才是连接名,
[nfs1]
comment = nfs1
path = /nfs1
EOF
#系统软件用户
id 666
#引用上一条命令执行状态 -gt -ge -lt -le -eq -ne greater than less than
if [ $? -ne 0 ]; then
groupadd Daemon -g 666
useradd syncDaemon -g 666 -u 666 -M -s /sbin/nologin
fi
#备份模块处理
mkdir -p /nfs1
chown -R syncDaemon:Daemon /nfs1
#服务认证密码文件处理
echo ‘nfsUser:1’ > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
#服务跑起
systemctl start rsyncd
systemctl enable rsyncd
#验证端口运行
echo “查看rysnc运行Port”
netstat -tunlp|grep rsync

echo “验证密码信息。备份模块。模块权限如下”
#【坑】注意脚本是在远端执行 ssh17别名没用
cat /etc/rsync.passwd; ls -ld /nfs1 /etc/rsync.passwd
++++++++++++++++++sh++++++++++++++++++++++++++++++++++
#scpssh远程复制脚本并执行
scp -P 10086 rsync1.sh root@172.16.1.17:/opt/;
ssh17 “bash /opt/rsync1.sh”

客户端rsync处理

vim rsync2.sh
++++++++++sh+++++++++
#本端执行
echo “生成rsync客户端密码认证文件并输出验证”
ssh16 “yum -y install rsync”
ssh16 “echo ‘1’ > /etc/rsync.passwd &&chmod 600 /etc/rsync.passwd”
ssh16 “ll /etc/rsync.passwd && cat /etc/rsync.passwd”
+++++++++++sh++++++++++

nfs (nfs-utils rpcbind)网络共享存储服务一键部署

vim nfs1.sh
++++++++++++++++++++++++sh++++++++++++++++++++++++++

yum install nfs-utils rpcbind -y

创建nfs系统软件限定的用户、组。 映射用户是守护进程软件用户吗,不是,映射用户纯粹用来映射权限的。

id 666
#[ $? != 0 ] =1
if [ $? -ne 0 ] ; then
#注意同一以组名方式添加组。不统一可能就会报错
groupadd nfs -g 666
useradd nfsweb -g nfs -u 666 -M -s /sbin/nologin
fi
#创建共享目录,修改权限
mkdir /nfsweb
chown -R nfsweb.nfs /nfsweb

#创建配置文件
cat > /etc/exports << ‘EOF’

这写限制不了root用户。/nfsweb 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)所以写成如下id=必须NM。

/nfsweb 172.16.1.0/24(rw,sync,anonuid=666,anongid=666)
EOF

#启动服务
systemctl start nfs
#必要项.检查服务:共享文件系统
showmount -e 127.0.0.1
++++++++++++++++++++++sh++++++++++++++++++++++++++

nfs+lsyncd===>rysnc服务

vim nfsLsyncd.sh
+++++++++++++++++++++++++++++sh++++++++++++++++++++++++
#安装服务
yum install lsyncd -y

#生成配置文件
cat > /etc/lsyncd.conf << ‘EOF’
settings {
logfile =“/var/log/lsyncd/lsyncd.log”,
statusFile =“/var/log/lsyncd/lsyncd.status”,
inotifyMode = “CloseWrite”,
maxProcesses = 8,
}

sync {
default.rsync,
source = “/nfsweb”,
target = “nfsUser@172.16.1.17::nfs1”,
delete= true,
exclude = {“.*”},
delay=1,
rsync = {
binary = “/usr/bin/rsync”,
archive = true,
compress = true,
verbose = true,
password_file=“/etc/rsync.passwd”,
_extra={“–bwlimit=200”}
}
}
EOF

#启动
systemctl start lsyncd

#检查服务
ps -ef|grep lsyncd |grep -v grep

#测试文件
cat > /nfsweb/index.html << ‘EOF’

qwert。测试
EOF
+++++++++++++++++++++++++++++++++++++++sh++++++++++++++++++++++

#远程发送配置文件并执行
scp -P 10086 nfs1.sh nfsLsyncd.sh root@172.16.1.16:/opt/
ssh16 “bash /opt/nfs1.sh nfsLsyncd.sh”

测试rsync+nfs

ssh16 “touch /nfsweb/sss.png”;
ssh17 “ls /nfs1”

Web7/8/9机器一键部署

这里讲一下nfs的服务

在这里插入图片描述

mount | grep nfs #列出已经挂载的 NFS 文件系统,并在输出中显示正在使用的 NFS 版本
总之正常服务是
socket系统服务自带自启。停用会话或会话中操作会异常
rpcbind服务端必装接管各种nfs lockd等服务端口注册到映射表。客户端装也能使用,会影响整体兼稳性,和其他功能性扩展
nfs服务端必装运行。客户端必安装作为辅助应用挂载建立nfs会话,无需运行

客户端
vim web345.sh
++++++++++++++++++++++++++++++sh++++++++++++++++++++++++

#安装服务
yum install nginx -y
#【坑】保证nginx运行用户访问权限,且与映射id相同,即免映射作用

【坑】创建系统用户要求 -r 配置到nginx最好需要一次性创建,再修改组名;不然niginx无法正常应用识别。最好组名相同不用修改,

id 666
if [ $? -ne 0 ]; then
useradd -r -u 666 -s /sbin/nologin -M -c “Nginx web server” nfsweb
else echo"用户id 666已存在"
fi
#修改配置文件
cat > /etc/nginx/nginx.conf << ‘EOF’
user nfsweb;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

#Load dynamic modules. include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;

access_log  /var/log/nginx/access.log  main;
sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;
keepalive_timeout   65;
types_hash_max_size 4096;
include             /etc/nginx/mime.types;
default_type        application/octet-stream;

server {
listen 81;
server_name localhost;
location / {
root html;
index index.html;
}
}
}
EOF
sleep 2
#检测语法
nginx -t
#启动服务
systemctl start nginx
#同步映射组名
groupmod -n nfs nfsweb
#检查服务
sleep 2
netstat -tunlp | grep nginx

#挂载目录需要装辅助工具。安装后挂载时自动调起rpcbind.socket
#注意卸载相关程序要取消nfs挂载
yum install nfs-utils -y
mount -t nfs 172.16.1.16:/nfsweb /usr/share/nginx/html

++++++++++++++++++++++++++++sh+++++++++++++++++++++++++++++++++

#远程复制脚本并运行
for server in {13,14,15};
do
scp -P 10086 ~/web345.sh root@172.16.1. s e r v e r : / o p t s s h − p 10086 r o o t @ 172.16.1. {server}:/opt ssh -p 10086 root@172.16.1. server:/optsshp10086root@172.16.1.{server} “bash /opt/web345.sh”
done

nfs16上资源文件修改创建 整体运行测试 备份机制测试

##nfs 共享目录,分发共享到每个人webhtml目录。
#检查数据备份情况
ssh17 “ls -l /nfs1”

#检查网站情况
for web in {13,14,15}
do
curl 172.16.1.${web}:81
done

#再次修改页面,查看数据
cat >index.html<<EOF

瓦尔特
EOF
scp -P 10086 index.html root@172.16.1.16:/nfsweb

#再次修改资源文件验证
ssh16 “echo ‘测试2’ > /nfsweb/index.html”
ssh17 “ls -l /nfs1”
#浏览器访问
http://10.0.0.13:81/
http://10.0.0.14:81/
http://10.0.0.15:81/

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值