基于 CentOS 实现两台应用服务器程序同步的步骤
在运维基于 CentOS 系统的应用服务器时,确保两台服务器之间程序的同步至关重要。这里我们将使用 rsync 工具来实现高效的程序同步,以下是详细的操作步骤:
一、环境准备
服务器环境:
源服务器:操作系统为 CentOS 7,IP 地址为 192.168.1.100。请确保该服务器已正确配置网络,能够正常访问外部网络,并且防火墙设置允许与目标服务器通信。如果服务器启用了防火墙,可通过以下命令开放必要端口(假设使用默认 SSH 端口 22):
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload
目标服务器:操作系统为 CentOS 7,IP 地址为 192.168.1.101。同样,要保证目标服务器网络正常、防火墙设置正确,且具有与源服务器通信的权限。
安装 rsync:
在源服务器和目标服务器上都执行以下命令安装 rsync:
yum install -y rsync
该命令会自动从 CentOS 的官方软件源下载并安装 rsync 及其依赖包。安装完成后,可通过rsync --version
命令检查安装是否成功。如果安装成功,会显示 rsync 的版本信息,例如:rsync version 3.1.2 protocol version 31
。若安装过程中出现错误,可能是网络问题导致无法连接到软件源,可检查网络连接或尝试更换软件源地址。
二、配置 SSH 免密登录(可选但推荐)
为了实现自动化同步,建议配置源服务器到目标服务器的 SSH 免密登录。
在源服务器上生成 SSH 密钥对:
ssh-keygen -t rsa
执行此命令后,系统会提示你输入保存密钥的位置,直接回车将使用默认路径~/.ssh/id_rsa
。接着会提示你输入密码短语(passphrase),可以留空不输入(不设置密码短语在自动化场景中更方便,但安全性会稍低,若有更高安全需求可设置复杂密码短语)。生成的密钥对位于~/.ssh/
目录下,其中id_rsa
是私钥,id_rsa.pub
是公钥。
2. 将源服务器的公钥复制到目标服务器:
ssh-copy-id -i \~/.ssh/id\_rsa.pub username@192.168.1.101
这里username
是目标服务器上的用户名。执行该命令后,系统会提示你输入目标服务器用户密码。输入正确密码后,公钥将被复制到目标服务器的~/.ssh/authorized_keys
文件中。如果~/.ssh/
目录在目标服务器上不存在,系统会自动创建。若复制公钥过程中出现权限问题,可能是目标服务器~/.ssh/
目录权限设置不正确,应确保该目录权限为 700,authorized_keys
文件权限为 600。可通过以下命令在目标服务器上调整权限:
chmod 700 \~/.ssh/
chmod 600 \~/.ssh/authorized\_keys
验证免密登录:
在源服务器上执行ssh username@``192.168.1.101
,如果无需输入密码即可登录到目标服务器,则说明免密登录配置成功。登录后,你可以看到目标服务器的命令行提示符,表示已成功登录。若无法免密登录,可检查公钥是否正确复制到目标服务器、目标服务器的 SSH 配置文件/etc/ssh/sshd_config
中PubkeyAuthentication
是否设置为yes
(默认是yes
,若被修改可能导致免密登录失败),修改后需重启 SSH 服务使配置生效:
systemctl restart sshd
三、使用 rsync 进行程序同步
简单同步命令:
假设源服务器上程序文件位于/var/www/myapp
目录,要同步到目标服务器的/var/www/
目录下,在源服务器上执行以下命令:
rsync -avz /var/www/myapp/ username@192.168.1.101:/var/www/
参数说明:
-a
:归档模式,保持文件的权限、时间戳、所有者等属性,相当于-rlptgoD
选项的组合,确保同步后的文件与源文件在属性上一致。
-v
:详细输出,显示同步过程中的信息,例如正在传输的文件名、传输进度等,方便查看同步状态。
-z
:压缩传输数据,在网络传输过程中对数据进行压缩,减少网络带宽的占用,提高传输效率。
执行该命令时,如果出现权限不足的错误,可能是目标服务器/var/www/
目录的权限设置不允许源服务器用户写入。此时,需要在目标服务器上调整/var/www/
目录的权限,例如将其权限设置为 777(不推荐在生产环境中对重要目录设置这么宽松的权限,可根据实际需求设置合适的用户组和权限):
chmod -R 777 /var/www/
定时同步(使用 crontab):
如果需要定期同步程序文件,可以使用 crontab 设置定时任务。在源服务器上编辑 crontab 文件:
crontab -e
该命令会打开默认的文本编辑器(通常是 vi 或 nano),用于编辑当前用户的 crontab 任务列表。添加以下内容,例如每小时同步一次:
0 \* \* \* \* rsync -avz /var/www/myapp/ username@192.168.1.101:/var/www/
这里0 * * * *
表示在每小时的第 0 分钟执行任务。保存并退出编辑器后,crontab 将按照设定的时间间隔自动执行 rsync 同步任务。如果在保存 crontab 文件时遇到问题,可能是编辑器使用不熟练。若使用 vi 编辑器,按Esc
键,输入:wq
并回车可保存并退出;若使用 nano 编辑器,按Ctrl+X
,再按Y
,最后按回车即可保存并退出。
通过以上步骤,我们可以利用 rsync 工具在 CentOS 系统的两台应用服务器之间实现程序的高效同步,无论是一次性同步还是定时同步都能满足需求。,赞先收藏。