当前位置:首页 > CN2资讯 > 正文内容

云服务器nat 云服务器nas搭建

4天前CN2资讯


使用阿里云产品搭建高可用sftp服务器(ECS主机、SLB负载均衡器、NAS存储)使用的是阿里云的vpc网络环境

服务器架构简图如下:

A、购买阿里云的NAS存储包,并配置。

1、购买存储包

2、设置NAS存储的访问权限组,新建权限组(授权地址填写两台ECS主机的ip地址)


3、添加权限组规则

4、创建文件系统 (协议类型-NFS 绑定存储包)


5、创建完文件系统以后 管理文件系统 创建挂载地址以及选择创建的权限组


由于我这边VPC中两台ECS主机在不同的可用区A、B,所以这个VPC在A、B两个可用区都创建了交换机,所以这边可以看到两个文件系统的挂载点 即A、B区的挂载点

B、在VPC网络中购买两台ECS主机分别在A、B可用区并配置

1、登录centos系统安装相关软件,由于ECS主机挂载NAS文件需要安装nfs协议
yum install nfs-utils -y

格式
sudo mount -t nfs -o vers=4.0 <挂载点域名>:<文件系统内目录> <当前服务器上待挂载目标目录\>
2、linux系统挂载NAS存储并在NAS存储上创建目录(由于直接挂载NAS根据的权限是1777 所以先挂载NAS根目录再在NAS根目录中创建目录sftpdir,针对sftpdir目录设置权限)

mount -t nfs -o vers=4.0 :/ /alidata1mkdir -p /alidata1/sftpchmod 755 /alidata1/sftp chown root.root /alidata1/sftpumount /alidata1

注意:
由于sftp的目录的权限设定有两个要点:

目录开始一直往上到系统根目录为止的目录拥有者都只能是root
目录开始一直往上到系统根目录为止都不可以具有群组写入权限

3、设置开机自启动挂载NAS文件系统
分别登录172.31.93.38、172.31.142.157服务器执行以下命令(两台服务器的NAS挂载地址不一样)
echo 'mount -t nfs -o vers=4.0 :/sftp /alidata1' >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local

centos7 系统/etc/rc.d/rc.local没有可执行权限,需要额外赋予

mkdir -pv /alidata1/sftpdir #创建sftp用户的家目录

4、在服务器172.31.93.38配置sftp服务

vim /etc/ssh/sshd_config

\找到如下行,并注释

#Subsystem sftp /usr/libexec/openssh/sftp-server

\修改认证配置

PasswordAuthentication no 修改为yes

在最后添加以下几行

###########sftp############### Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp Match Group sftpusers #这行用来匹配用户组 ChrootDirectory /alidata1/sftpdir #用chroot将用户的根目录指定到 /alidata1/sftpdir,这样用户就只能在 /alidata1/sftpdir下活动 ForceCommand internal-sftp #指定sftp命令

5、重启sftp服务

systemctl restart sshd.service

6、在172.31.93.38创建sftp测试用户组以及用户

groupadd -g 500 sftpusersuseradd -G sftpusers -M -s /sbin/nologin -u 501 admin #创建sftp用户并不创建家目录 echo 'Admin123' | passwd --stdin admin mkdir -pv /alidata1/sftpdir/admin admin #创建用户家目录 usermod -d /alidata1/sftpdir/admin admin #修改用户家目录 chown admin.sftpusers /alidata1/sftpdir/admin 修改家目录权限

7、测试sftp用户登录

sftp [email protected]

两台服务器需要同步的文件如下

1、两台ECS必须创建指定GID的用户组
2、两台ECS也必须创建指定的UID用户
因为NAS存储的权限是根据系统用户的GID以及UID,所以两个系统必须创建相同UID以及GID的用户
注需要使用sersync2软件同步两台ECS主机的用户名文件passwd、passwd- 和用户组文件 group、group- 以及用户的密码 shadown、shadown-文件

客户端连接的时候会因为known_hosts 文件冲突,连接失败。
客户端解决方法:
有以下两个解决方案:

  • 手动删除修改known_hsots里面的内容;
  • 修改ssh的客户端配置文件 vim /etc/ssh/ssh_config
    StrictHostKeyChecking no
    因为需要和第三方对接,无法让第三方的生产服务器做ssh客户端的配置要求,所以采用服务端解决方法。
    服务端解决方式:
    需要同步两台ECS主机下/etc/ssh/下配置文件

    C、配置同步服务(以172.31.93.38为准同步文件到172.31.142.157)
    1、在172.31.93.38服务器上安装sersync2,下载之后直接解压放到/usr/local/sersync目录之下,sersync目录下有两个文件 confxml.xml 为配置文件 sersync2为服务文件

    2、在172.31.142.157服务器上安装rsync服务并修改配置文件/etc/rsyncd.conf

    ```# /etc/rsyncd: configuration file for rsync daemon mode #See rsyncd.conf man page for more options. #configuration example: #uid = nobody #gid = nobody use chroot = yes max connections = 40 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log *hosts allow = 172.31.93.38* #允许哪个服务器同步过来 hosts deny = * #exclude = lost+found/ #transfer logging = yes #timeout = 900 #ignore nonreadable = yes #dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #[ftp] #path = /home/ftp #comment = ftp export are ################# 同步etc中配置文件 ####################### *[etc-ssh] #同步任务名 path = /etc/ssh/ #需要同步到本地的目录 comment = Synchronous directory /etc/ssh/ ignore errors read only = no write only = yes* [etc] #同步任务名 path = /etc/ #需要同步到本地的目录 comment = Synchronous directory /etc/ssh/ ignore errors read only = no write only = yes*3、重启rsyncd服务 systemctl restart rsyncd 4、在172.31.93.38服务器上修改serysnc配置文件 echo ‘Abcd123’ > /etc/rsync.pas #创建同步用户的密码文件 5、修改/usr/local/sersync的配置文件 如下: etc_ssh_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="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <localpath watch="/etc/ssh/"> #同步的目录 <remote ip="172.31.142.157" name="etc_ssh"/> #定义在同步对方的任务名 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-artuz --bwlimit=100"/> <auth start="true" users="root" passwordfile="/etc/rsync.pas"/> #指定同步的用户和密码 <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/usr/local/sersync/script/cron_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//site/"> <cdninfo domainname="" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> </head>` 创建etc_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="true"> <exclude expression="((?!\bpasswd\b|\bpasswd-\b|\bshadow\b|\bshadow-\b|\bgroup\b|\bgroup-\b).)+"></exclude> #指定同步的文件 <!-- <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> <exclude expression="^[a-yA-Y]*"></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="/etc"> <remote ip="172.31.142.157" name="etc"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-atuz --bwlimit=100"/> <auth start="true" users="root" passwordfile="/etc/rsync.pas"/> <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/usr/local/sersync/script/etc_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="true" 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//site/"> <cdninfo domainname="" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> </head>` 6、编写启动sersync2脚本start.sh 如下

    /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/conf/etc_ssh_confxml.xml
    /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/conf/etc_confxml.xml

    7、编写sersync2服务监控脚本 check_sersync.sh

    #!/bin/bash
    cat /usr/local/sersync/start.sh|grep -v "^#" | grep -v grep | while read line;do
    ps -ef | grep "$line"| grep -v grep
    if [ $? -ne 0 ];then
    $line
    fi
    done

    8、设置定时检查脚本执行 */5 * * * * /bin/bash /usr/local/sersync/check_sersync.sh 9、测试同步是否正常 10、测试sftp用户是否轮询登录到两台ECS


    转载于:https://blog.皇冠云.com/gavin0/2069858

      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/22270.html

      分享给朋友:

      “云服务器nat 云服务器nas搭建” 的相关文章

      ColoCrossing数据机房评测:高性能VPS和安全保障让业务更高效

      ColoCrossing是一家在美国市场上已有多年历史的数据机房提供商。我在了解这家公司时,深深被它在数据托管领域的地位所吸引。实际上,ColoCrossing提供的服务不止是简单的服务器租用,他们一手打造了多个高质量的数据中心,涵盖了VPS及服务器托管等业务。随着最近他们在爱尔兰都柏林新增了机房,...

      如何选择与配置VPS服务器并确保其安全性与性能优化

      VPS服务器概述 当我们提到VPS(虚拟专用服务器)时,简直是开启了一个全新的技术世界。它把一台物理服务器分割成多个独立的虚拟环境,每个VPS都有自己的操作系统和资源分配。这种方式给用户带来了更多的灵活性和控制权,也意味着即使在较低的成本下,我们也能拥有自己专属的服务器。 VPS的魅力在于其独立性。...

      Digital-VM评测:性价比高的VPS主机服务与全球数据中心优势分析

      Digital-VM是一家在2018年成立于美国的主机商,专注于提供VPS主机服务。自成立以来,Digital-VM致力于为全球用户提供高效、低价的云计算解决方案。随着虚拟主机市场的快速发展,Digital-VM不断扩展其服务和产品线,逐渐成长为一家具备竞争力的主机商。在技术方面,Digital-V...

      VPS IP被封怎么办?常见原因与解决方案分析

      在使用VPS的过程中,有时候会遇到VPS IP被封的情况,这对很多用户来说,会带来一些困扰。虽然情况不同,但通常来说,下列几个原因是比较常见的,了解这些原因能够帮助我们更好地避免封禁。 首先,敏感操作常常是导致IP被封的重要原因之一。比如,如果你进行了一些网络爬虫、频繁请求某个网站内容,或者试图访问...

      P100 GPU价格分析及购买指南 - 如何选择性价比最高的GPU

      在如今的计算技术中,P100 GPU扮演了一个至关重要的角色。尤其是对于那些需要进行大量并行计算的任务,比如深度学习、科学模拟和数据分析,P100 GPU是一款极具吸引力的选项。作为NVIDIA推出的高性能计算单元,P100 GPU不仅具备强大的计算能力,还拥有一系列先进的技术规格,使其在行业中脱颖...

      dataonline3:高效的数据管理与分析工具

      1. dataonline3概述 在当今这个数据驱动的时代,dataonline3作为一个先进的数据管理工具,受到了广泛关注。它整合了丰富的数据处理功能,使用户能够轻松地收集、分析和展示数据。用户无论是在科研、企业还是个人项目中,dataonline3都提供了便利和强大的支持。 dataonline...