错误记录
subtree_check和no_subtree_check
fns。报错
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/data".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
解释:
subtree_check'和'no_subtree_check'是针对NFS 导出项(exports)设置的可选参数。当使用'subtree_check'选项时,NFS导出系统将确保每个客户端都只能访问其访问的目录及其下的子目录,并防止客户端访问树外的目录。这会增加一些额外的性能开销,但通常是推荐的安全性设置。
而当使用'no_subtree_check'选项时,NFS导出系统将不会检查客户端访问的目录是否在其访问的树内,这意味着客户端将能够访问其访问范围之外的目录,但也会减少导出系统的负载并提高性能。
请注意,这些选项的默认行为已在较新版本的nfs-utils中更改。在没有指定这些选项的情况下,将会默认使用'no_subtree_check'
目录
安装nfs
nfs简介
rpcb(注册中心)是什么
共享 vim /etc/exports
常用
rsync是什么
为防止都能连需加权限(脚本)
自动化NFS部署方式(NFS完)
实战演练实现LAMP架构的电商网站MySQL主从和数据实时同步
6 测试
实现 LAMP应用类京东电商网站 shopxo-v2.2.8
在2上重复挂在加载
NFS和rpcbind(注册中心)是再一起 的
安装nfs
[@rocky8 ~]#yum -y install nfs-utils.x86_64 (安装nfs及相关依赖包)mount (挂载)
[@ubuntu2004 ~]#apt install nfs-server(ubuntu中服务器和客户端是不一样的但是nfs-server服务器端包含客户端)
nfs简介
有专业的机器储存 直连储存 简称DAS 计算机和储存的直连 存储区网络 简称SAH 分出固定的储存给别人 网络附加储存 简称 NAS 类似K8S的etcd共享,虽说是分开但是还是 你中我我中你二合一 ceph 三合一有专业工程师 一般小公司没有
rpcb(注册中心)是什么
将你定义的socket连接符和你定义的端口号进行绑定;如果没有这个绑定,下一步的listen(监听)中,就不知道去监听哪个端口了,系统中有很多端口的,vim /etc/init.d/rpcbind里面有详细的说明。
它是一个RPC服务,主要d是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务。
共享 vim /etc/exports
- /data/nfs1 *(rw,no_root_squash) 任何人(指定),加权限,不把他压榨成普通用户(不加默认压榨nobody)
- 普通用户过去ID是什么就是对面得什么,你没有这个用户就是ID号
- /data/nfs1 *(rw,no_root_squash,anonuid=66,anongid=66) 不管谁过来都压榨成指定用户 组 66自己创建
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync (1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 7以前的版本为nfsnobody
no_root_squash 远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
mount.nfs 相关选项
fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft #非持续请求
intr #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络服务时不挂载NFS资源
vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0
10.0.0.100:/data/nfs1 /var/www/html nfs _netdev 0 0 手动
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0 开机自动
常用
nobody客户端访问服务器转换的用户
apt install acl 安装加权限包
setfacl -Rm u:nobody:rwx /data/nfs1/ 给他加权限
setfacl -bR /data/nfs1/ 取消权限
vim /etc/exports 共享文件
exportfs -r 加载生效
exportfs -au 暂停共享
exportfs -a 恢复共享
xportfs -v 查看
showmount -e 10.0.0.100 查看ip的共享目录
mount 10.0.0.100:/data/nfs1 /var/www/html/ 客户端挂在
umount /var/www/html 取消挂载
mount -a 自动挂载相关
df 客户端查看
rsync是什么
rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。
它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。
除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
rsync认证方式
rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。 在平时使用过程,我们使用最多的是rsync-daemon方式。 注意:在使用rsync时,服务器和客户端都必须安装rsync程序。
rsync-daemon 认证 客户服务不用分开
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync (r 森可)常用
rsync -av 10.0.0.100:/data/www/ /data/backup 把100的数据同步到本地
如果需要定时拷贝建议打通ssh 列:
[root@backup-server ~]#ssh-keygen (都回车)
[root@backup-server ~]#ssh-copy-id 10.0.0.100 发过去 /ok了
[root@backup-server ~]#crontab -e 计划任务里 设置什么时候执行
* * * * * rsync -a 10.0.0.100:/data/www/ /data/backup/ &> /dev/null 不家V也有信息直接扔
[root@backup-server ~]#systemctl status cron.service 计划任务服务是否启动
[root@backup-server ~]#vim /etc/rsyslog.d/50-default.conf 开启计划任务日志,不然都在syslog里看
cron.* /var/log/cron.log
上述的缺点就是谁都能连,
为防止都能连需加权限(脚本)
- [root@data-server ~]#10.0.0.100
- [root@backup-server ~] #10.0.0.101
vim /etc/rsyncd.conf 权限脚本
uid = root #以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobody
gid = root #默认为nobody,Ubuntu中为nogroup (组指定为root)
max connections = 0 #最大连接数0不限制
ignore errors #忽略错误
exclude = lost+found/ #排除不想同步的文件夹
log file = /var/log/rsyncd.log #生成的日志放在那里
pid file = /var/run/rsyncd.pid #pid文件放在哪里
lock file = /var/run/rsyncd.lock #锁文件放在那里
reverse lookup = no #是否做反向解析
#hosts allow = 10.0.0.0/24 #限制网段谁能连,不写都能连
[backup] #共享出来的标识,对外发部的名称
path = /data/backup/ #实际路径
comment = backup dir
read only = no #默认是yes,即只读 设置可读可写
auth users = rsyncuser #验证账号,必须是这个用户名,切验证密码在能连接
secrets file = /etc/rsync.pas #验证密码放在单独文件里
- [root@backup-server ~]#echo "rsyncuser:123456" > /etc/rsync.pas 密码写文件里
- [root@backup-server ~]#chmod 600 /etc/rsync.pas 密码文件改权限。安全
- [root@backup-server ~]#mkdir /data/backup/ -p 目录文件
- [root@backup-server ~]#systemctl restart rsync.service 重启
- [root@data-server ~]#rsync -a /etc/hosts这样的输密码
- [root@data-server ~]#echo "123456" > /etc/rsync.pas 把密码写到文件里
- [root@data-server ~]#chmod 600 /etc/rsync.pas 给其权限只让管理员访问
- [root@data-server ~]##rsync --password-file=/etc/rsync.pas -a /etc/networks rsyncuser@10.0.0.101::backup #非交互式推共享目录
自动化NFS部署方式(NFS完)
- tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
- [root@data-server ~]#cd /usr/local/
- [root@data-server local]#mv GNU-Linux-x86/ sersync
- [root@data-server ~]#ln -s /usr/local/serync/sersync2 /usr/bin/ #创建软连接
- servync2 -h #查看相关命令参数
- [root@data-server sersync2]#vim confxml.xml #复制粘贴 配置相关
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/data/www/"> #数据
<remote ip="10.0.0.106" name="backup"/> #iD号
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> #密码文件
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
- [root@data-server ~]#mkdir /data/www/ -p 创建指定文件夹将来存放ns数据
- [root@data-server ~]#echo 123456 > /etc/rsync.pas 创建密码文件改期权限600
- [root@data-server ~]#chmod +x /etc/rsync.pas
- [root@data-server ~]#screen 开启后台
- [root@data-server sersync2]#./sersync2 -dro ./confxml.xml #以后台守护进程方式运行
实战演练实现LAMP架构的电商网站MySQL主从和数据实时同步
- [root@mysql-master ~]# 3 mysql 主
- [root@mysql-slave ~]# 4 mysql 从
- [root@data-server ~]# 5 server主
- [root@backup-server ~]# 6 server备份
1 和2是客户端 [root@ubuntu2004 ~]# 1
1 在3和4安装mysql
2 集体更新apt update
3 在3和4上的vim/etc/my.cof下添加
- default_authentication_plugin=mysql_native_password 旧密码
- gtid_mode=ON
- enforce_gtid_consistency=ON
4 重启systemctl restart mysqld
5 创建授权
- [root@mysql-master ~]# mysql -p123456
- mysql> create user repluser@'10.0.0.%' identified by '123456';
- mysql> grant replication slave on *.* to repluser@'10.0.0.%';
- 6 在4上mysql -p123456里执行
change master to MASTER_HOST = '10.0.0.103',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
- start slave;
- show slave status \G; 主从完成
6 测试
- mysql> create database shpxo;
- mysql> create user shopxo@'10.0.0.%' identified by '123456';
- mysql> grant all on shopxo.* to shopxo@'10.0.0.%';
- 另一台机器查看 mysql> show databases;
7 在5上apt install nfs-server rsync 6上安装reync
8 在1和2上执行apt install nfs-common -y
9 在6上的vim /etc/rsyncd.conf
uid = root #以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobody
gid = root #默认为nobody,Ubuntu中为nogroup (组指定为root)
max connections = 0 #最大连接数0不限制
ignore errors #忽略错误
exclude = lost+found/ #排除不想同步的文件夹
log file = /var/log/rsyncd.log #生成的日志放在那里
pid file = /var/run/rsyncd.pid #pid文件放在哪里
lock file = /var/run/rsyncd.lock #锁文件放在那里
reverse lookup = no #是否做反向解析
#hosts allow = 10.0.0.0/24 #限制网段谁能连,不写都能连
[backup] #共享出来的标识,对外发部的名称
path = /data/backup/ #实际路径
comment = backup dir
read only = no #默认是yes,即只读 设置可读可写
auth users = rsyncuser #验证账号,必须是这个用户名,切验证密码在能连接
secrets file = /etc/rsync.pas #验证密码放在单独文件里
- [root@backup-server ~]#echo "rsyncuser:123456" > /etc/rsync.pas
- [root@backup-server ~]#chmod 600 /etc/rsync.pas 密码文件其权限
- [root@backup-server ~]#mkdir /data/backup/ -p 目录文件
- [root@backup-server ~]#systemctl restart rsync.service
- [root@backup-server ~]#ss -ntl 查看873口 完成测试
- 在5上[root@data-server ~]#rsync /etc/hosts rsyncuser@10.0.0.106::backup
- [root@backup-server ~]#ll /data/backup/
在5上解压 tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
- [root@data-server ~]#cd /usr/local/
- [root@data-server local]#mv GNU-Linux-x86/ sersync
- [root@data-server ~]#ln -s /usr/local/serync/sersync2 /usr/bin/ #创建软连接
- servync2 -h #查看相关命令参数
- [root@data-server sersync2]#vim confxml.xml #复制粘贴 配置相关
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/data/www/"> #数据
<remote ip="10.0.0.106" name="backup"/> #iD号
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> #密码文件
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
- [root@data-server ~]#mkdir /data/www/ -p 创建指定文件夹将来存放ns数据
- [root@data-server ~]#echo 123456 > /etc/rsync.pas 创建密码文件改期权限600
- [root@data-server ~]#chmod +x /etc/rsync.pas
- [root@data-server ~]#screen 开启后台
- [root@data-server sersync2]#./sersync2 -dro ./confxml.xml #以后台守护进程方式运行
四台机器已经做完
实现 LAMP应用类京东电商网站 shopxo-v2.2.8
10 在1和2上安装相关包apt -y install apache2 php7.4-fpm libapache2-mod-php7.4 php7.4-mysql php7.4-json php7.4-xml php7.4-mbstring php7.4-zip php7.4-gd php7.4-curl
- [root@ubuntu2004 ~]#unzip shopxo-v2.3.0.zip 解开shopxo
- [root@ubuntu2004 ~]#rm -f /var/www/html/* 把文件删干净烤过去
- [root@ubuntu2004 ~]#mv shopxo-v2.3.0/* /var/www/html/
- 在100上安装DNS指向101
- [root@ubuntu2004 ~]#systemctl restart apache2 php7.4-fpm.service 在101重启
- [root@ubuntu2004 ~]#chown -R www-data. /var/www/html 改期权限
- mysql> flush privileges; 登不上刷新权限
- mysql> create user shop@'10.0.0.%' identified by '123456'; 或者在创建一个
- mysql> grant all on *.* to shop@'10.0.0.%'; 给其权限
在2上apt -y install apache2 php7.4-fpm libapache2-mod-php7.4 php7.4-mysql php7.4-json php7.4-xml php7.4-mbstring php7.4-zip php7.4-gd php7.4-curl
- [root@ubuntu2004 ~]#systemctl restart apache2 php7.4-fpm.service
- [root@ubuntu2004 ~]#scp shopxo-v2.3.0.zip 10.0.0.102: 从1把安装包穿在2上
- unzip shopxo-v2.3.0.zip 解开
- [root@ubuntu2004 ~]#mv shopxo-v2.3.0/* /var/www/html/
- [root@ubuntu2004 ~]#chown -R www-data. /var/www/html/ 授权
- [root@ubuntu2004 ~]#rm -f /var/www/html/index.html 其权限太高删除后就可以正常访问
在100里面vim /etc/bind/wang.org.zone 添加进去
- www A 10.0.0.102
- [root@ubuntu2004 ~]#rndc reload 重新加载
在101上执行
在1上scp -r /var/www/html/public/static/upload/* 10.0.0.105:/data/www/ 把东西传到5上 (挂在共享用)
#服务器
[root@ubuntu2004 ~]#apt install nfs-kernel-server 装个nfs在5上
[root@ubuntu2004 ~]#systemctl status nfs-server
- [root@data-server www]#vim /etc/exports 在5上在里面加上权限
/data/www/ 10.0.0.0/24(rw,all_squash,anonuid=33,anongid=33)
- [root@data-server www]#exportfs -r 在5上启动下
- [root@data-server www]#exportfs v
- [root@data-server www]#systemctl status nfs-server.service 在5上查看是否启动成功
- [root@ubuntu2004 upload]#vim /etc/fstab 把文件写系统里
- 10.0.0.105:/data/www/ /var/www/html/public/static/upload/ nfs _netdev 0 0
- [root@ubuntu2004 html]#mv public/static/upload/* /opt/ 把里面原有的文件移出来
- [root@ubuntu2004 html]#mount -a 挂一下
在2上重复挂在加载
[root@ubuntu2004 upload]#vim /etc/fstab 把文件写系统里
10.0.0.105:/data/www/ /var/www/html/public/static/upload/ nfs _netdev 0 0
[root@ubuntu2004 html]#mv public/static/upload/* /opt/ 把里面原有的文件移出来
[root@ubuntu2004 html]#mount -a 挂一下
[root@ubuntu2004 ~]#ls /var/www/html/public/static/upload/ 查看是否成功
[root@data-server ~]#chown -R www-data. /data/www/ 在5加上给其2的权限
完