新手用两台腾讯云服务器做站库分离难不难,怎么配置?

新手用两台腾讯云服务器做站库分离,难度中等。

说它难,是因为涉及网络通信、权限管理、安全组配置以及数据库远程连接的安全隐患;说它不难,是因为腾讯云控制台和主流 Linux 发行版(如 CentOS/Ubuntu)的操作逻辑非常标准化,只要按步骤来,基本不会遇到技术壁垒。

对于新手来说,最大的坑通常不在“怎么配”,而在“怎么连”和“怎么安”。下面我将从架构逻辑、具体配置步骤、关键避坑指南三个维度,给你一份实操性极强的指南。


一、 核心架构逻辑(先懂原理再动手)

在动手敲命令前,你必须明确数据流向:

  1. 应用服务器(Web Server):部署 Nginx/Apache + PHP/Java/Python 等。它只负责接收用户请求,处理业务逻辑。
  2. 数据库服务器(DB Server):部署 MySQL/MariaDB/PostgreSQL。它只负责存储和检索数据。
  3. 通信方式:应用服务器通过内网 IP 连接数据库服务器的端口(默认 3306)。

为什么强调内网 IP?

  • 速度:内网带宽通常是千兆甚至万兆,延迟极低。
  • 安全:数据库端口不对公网开放,黑客无法从互联网直接扫描你的数据库。
  • 省钱:腾讯云内网流量免费(在同地域下),而公网流量是要钱的。

二、 具体配置步骤(以 Ubuntu/CentOS + MySQL 为例)

假设你有两台服务器:

  • Server A (Web): 10.0.0.1 (内网IP)
  • Server B (DB): 10.0.0.2 (内网IP)
  • 注意:请替换为你实际的内网 IP,可在腾讯云控制台“云服务器”->“实例”中查看。

第一步:配置数据库服务器 (Server B)

  1. 安装数据库

    # Ubuntu
    sudo apt update && sudo apt install mysql-server -y
    # CentOS
    sudo yum install mysql-server -y
  2. 修改配置文件,允许远程访问(仅限内网)
    编辑 /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu) 或 /etc/my.cnf (CentOS)。
    找到 bind-address,将其改为数据库服务器的内网 IP 或 0.0.0.0(推荐指定内网 IP 更安全)。

    bind-address = 10.0.0.2
  3. 重启 MySQL 服务

    sudo systemctl restart mysql
  4. 创建允许远程连接的用户
    登录 MySQL:

    mysql -u root -p

    执行以下 SQL(将 your_password 换成强密码,web_server_ip 换成 Server A 的内网 IP):

    -- 创建一个新用户,专门给 Web 服务器用,不要用 root
    CREATE USER 'app_user'@'10.0.0.1' IDENTIFIED BY 'your_strong_password';
    
    -- 授权该用户访问特定数据库(例如 my_db)
    GRANT ALL PRIVILEGES ON my_db.* TO 'app_user'@'10.0.0.1';
    
    FLUSH PRIVILEGES;
    exit;

    关键点:'app_user'@'10.0.0.1' 中的 IP 必须精确到应用服务器的内网 IP,这样只有这台机器能连数据库。

第二步:配置安全组(腾讯云特有,至关重要)

这是新手最容易忽略的一步。光改配置文件没用,云厂商的防火墙(安全组)会拦截流量。

  1. 登录腾讯云控制台 -> 云服务器 -> 安全组。
  2. 找到绑定在 Server B (DB) 上的安全组。
  3. 添加入方向规则:
    • 协议端口:TCP, 3306
    • 来源:填写 Server A 的内网 IP (10.0.0.1) 或它的 CIDR (10.0.0.1/32)。
    • 策略:允许。
  4. 切记:绝对不要将来源设置为 0.0.0.0/0,否则全球任何人都能尝试爆破你的数据库。

第三步:配置应用服务器 (Server A)

  1. 安装 Web 环境和客户端工具
    根据你的语言安装对应的扩展。

    • PHP: sudo apt install php-mysql
    • Java: 确保 JDBC 驱动存在
    • Python: pip install pymysql
  2. 修改代码中的数据库连接字符串
    找到你项目里的配置文件(如 .env, config.php, application.yml 等)。
    将 host 从 127.0.0.1 改为 Server B 的内网 IP (10.0.0.2)。
    将 user 改为刚才创建的 app_user。
    将 password 设为对应密码。

    示例 (PHP):

    $host = '10.0.0.2'; // 数据库内网IP
    $db   = 'my_db';
    $user = 'app_user';
    $pass = 'your_strong_password';
    $dsn  = "mysql:host=$host;dbname=$db";
  3. 测试连通性
    在 Server A 上安装 telnet 或 nc 工具,测试能否通 Server B 的 3306 端口:

    telnet 10.0.0.2 3306
    # 或者
    nc -zv 10.0.0.2 3306

    如果显示成功,说明网络通畅。


三、 新手避坑与进阶建议

1. 关于“难不难”的心理建设

  • 初期:你会花大量时间在排查“为什么连不上”。90% 的情况是:安全组没开 或 MySQL 配置里 bind-address 没改对。
  • 后期:一旦打通,后续维护非常简单。

2. 性能瓶颈预警

  • 单点故障:目前两套服务器,任何一台挂了,网站就崩了。新手可以接受,但生产环境需考虑高可用。
  • 磁盘 I/O:如果数据库压力大,建议给 DB 服务器挂载高性能云硬盘(SSD),并开启自动备份。

3. 更优方案:使用腾讯云 CDB(云数据库)

作为腾讯云用户,强烈建议新手考虑直接使用腾讯云 CDB for MySQL,而不是自己买 ECS 装数据库。

  • 理由:
    • 免运维:不用管系统更新、补丁、主从切换。
    • 内置高可用:自带主备架构,坏了一台自动切换。
    • 内网互通:CDB 提供内网地址,配置方式和上面完全一样,只是省去了安装和维护数据库的过程。
    • 成本:对于小流量站点,入门级 CDB 价格可能比两台低配 ECS 还便宜,且稳定性更高。

4. 安全红线

  • 永远不要暴露 3306 到公网。
  • 定期备份:在腾讯云控制台设置数据库自动备份,并保留至少 7 天。
  • 最小权限原则:Web 程序连接的数据库账号,只给它需要的数据库权限,不要给全局 Root 权限。

总结

用两台腾讯云 ECS 做站库分离,技术上没有门槛,主要精力在于网络和安全组的配置。按照上述步骤操作,半天内即可搞定。

但如果你的目标是长期稳定运营,且不想折腾数据库底层维护,直接购买腾讯云 CDB 云数据库,配合一台 ECS 做 Web 服务,是更专业、更省心、性价比更高的选择。

未经允许不得转载:CLOUD云枢 » 新手用两台腾讯云服务器做站库分离难不难,怎么配置?