阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS+Keepalived搭建MyCAT高可用负载均衡集群

452次阅读
没有评论

共计 10817 个字符,预计需要花费 28 分钟才能阅读完成。

LVS+Keepalived 介绍

LVS

LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种 IP 负载均衡技术(VS/NAT、VS/TUN 和 VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived 在这里主要用作 RealServer 的健康状态检查以及 Master 主机和 BackUP 主机之间 failover 的实现

下面,搭建基于 LVS+Keepalived 的 MyCAT 高可用负载均衡集群,其中,LVS 实现 MyCAT 的负载均衡,但是,简单的 LVS 不能监控后端节点是否健康,它只是基于具体的调度算法对后端服务节点进行访问。同时,单一的 LVS 又存在单点故障的风险。在这里,引进了 Keepalived,可以实现以下几个功能:

1. 检测后端节点是否健康。

2. 实现 LVS 本身的高可用。

配置环境:

角色                                    主机 IP                    主机名               操作系统版本     软件版本

VIP                                    192.168.244.10

LVS-DR-Master                   192.168.244.146    keepalived01     CentOS7.1        Keepalived v1.2.13,LVS 1.2.1

LVS-DR-Backup                  192.168.244.147    keepalived02     CentOS7.1        Keepalived v1.2.13,LVS 1.2.1

mycat-Realserver                192.168.244.148    mycat01            CentOS7.1       mycat v1.5 

mycat-Realserver                192.168.244.149    mycat02            CentOS7.1       mycat v1.5 

一、安装 keepalived 和 ipvsadm

      注意:ipvsadm 并不是 lvs,它只是 lvs 的配置工具,因 lvs 在 3.10(CentOS7.1 的内核版本)的内核中是默认支持的。所以在这里就不需要重新安装。

      为了方便起见,在这里我们使用 yum 的安装方式

      分别在 keepalived01 和 keepalived02 两台主机上安装 keepalived 和 ipvsadm

      # yum install -y keepalived ipvsadm

      除了这种简易方式外,也可直接编译官方的源码包。

      LVS:http://www.linuxvirtualserver.org/software/index.html

      Keepalived:http://www.keepalived.org/download.html

      RHEL 5.4 下部署 LVS(DR)+Keepalived 实现高性能高可用负载均衡安装步骤可参考:http://www.linuxidc.com/Linux/2012-05/61117.htm

二、配置 Keepalived

     keepalived01,即 LVS-DR-Master 上,其配置如下:

     [root@keepalived01 ~]# vim /etc/keepalived/keepalived.conf

 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc     #设置报警邮件地址,可以设置多个,每行一个。failover@firewall.loc    #需开启本机的 sendmail 服务
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc  #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置 smtp server 地址
   smtp_connect_timeout 30    #设置连接 smtp server 的超时时间
   router_id LVS_DEVEL        #表示运行 keepalived 服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定 keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器
    interface eno16777736     #指定 HA 监测网络的接口
    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个 vrrp 实例使用唯一的标识。即同一 vrrp_instance 下,MASTER 和 BACKUP 必须是一致的
    priority 100              #定义优先级,数字越大,优先级越高,在同一个 vrrp_instance 下,MASTER 的优先级必须大于 BACKUP 的优先级
    advert_int 1              #设定 MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {          #设置验证类型和密码
        auth_type PASS        #设置验证类型,主要有 PASS 和 AH 两种
        auth_pass 1111        #设置验证密码,在同一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {       #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
        192.168.244.10 
    }
}

virtual_server 192.168.244.10 8066 {  #设置虚拟服务器,需要指定虚拟 IP 地址和服务端口,IP 与端口之间用空格隔开
    delay_loop 6              #设置运行情况检查时间,单位是秒
    lb_algo rr                #设置负载调度算法,这里设置为 rr,即轮询算法
    lb_kind DR                #设置 LVS 实现负载均衡的机制,有 NAT、TUN、DR 三个模式可选
    nat_mask 255.255.255.0 
    persistence_timeout 50    #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的 session 共享提供了一个很好的解决方案。#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。#需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果 50 秒内没有执行任何操作
                              #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受 50 秒的时间限制
    protocol TCP              #指定转发协议类型,有 TCP 和 UDP 两种

    real_server 192.168.244.148 8066 { #配置服务节点 1,需要指定 real server 的真实 IP 地址和端口,IP 与端口之间用空格隔开
        weight 1              #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                              #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
        TCP_CHECK {           #realserver 的状态检测设置部分,单位是秒
            connect_timeout 3    #表示 3 秒无响应超时
            nb_get_retry 3       #表示重试次数
            delay_before_retry 3 #表示重试间隔
            connect_port 8066
        } 
    }
    real_server 192.168.244.149 8066 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8066
        }
    }
}
 

      将该文件 scp 到 keepalived02 上,修改如下:

 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP   #将 state 从 MASTER 改为 BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 99  #修改优先级 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {192.168.244.10
    }
}

virtual_server 192.168.244.10 8066 {delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.244.148 8066 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8066
        }
    }
    real_server 192.168.244.149 8066 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8066
        }
    }
}

在上面这两个配置文件中,有一个地方尤其需要注意,即 interface,网上的相关部署文档都是 eth0,在 CentOS7 之前,网络接口的确都是 eth0,但在 CentOS7 中,该接口为 eno16777736。所以需要根据生产实际情况进行相应的修改。

三、安装,配置,启动 MyCAT

     分别在 mycat01 和 mycat02 两台主机上部署 MyCAT,具体可参考:http://www.linuxidc.com/Linux/2016-01/127382.htm

     注意:为了便于观察后续 MyCAT 负载均衡的效果,MyCAT 的配置文件并没有进行修改,均是指向本地的 MySQL 实例。

四、在 MyCAT 服务器上为 lo:0 绑定 VIP 地址、抑制 ARP 广播

      分别在 mycat01 和 mycat02 两台主机上执行以下脚本。

      [root@mycat01 ~]# cat realserver.sh

 
#!/bin/bash
#description: Config realserver

VIP=192.168.244.10
 
/etc/rc.d/init.d/functions
 
case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
 
exit 0
 

      [root@mycat01 ~]# sh realserver.sh start

      [root@mycat02 ~]# sh realserver.sh start

      执行 ip addr 查看 VIP 是否绑定成功

     LVS+Keepalived 搭建 MyCAT 高可用负载均衡集群

五、分别在 keepalived01 和 keepalived02 上启动 Keepalived 服务

      [root@keepalived01 keepalived]# service keepalived start

      [root@keepalived02 keepalived]# service keepalived start

      通过 ipvsadm - L 命令查看 VIP 是否能成功映射到后端 mycat 服务。如果失败了,可通过 /var/log/messages 日志定位 keepalived 启动失败的原因。

[root@keepalived01 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.244.10:8066 rr persistent 50
  -> 192.168.244.148:8066         Route   1      0          0         
  -> 192.168.244.149:8066         Route   1      0          0
 
 
[root@keepalived02 keepalived]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.244.10:8066 rr persistent 50
  -> 192.168.244.148:8066         Route   1      0          0         
  -> 192.168.244.149:8066         Route   1      0          0

从输出的结果来看,VIP 已成功映射到后端 mycat 服务,下面,具体测试一下

六、测试 MyCAT 高可用负载均衡集群的可用性。

      测试 MyCAT 集群的负载均衡

     通过 mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e ‘select @@hostname’ 命令来判断当前访问的是哪个 mycat 节点。

     但是很奇怪的时,连续执行三次,每次都是访问 mycat02 节点。

[root@mysql-server1 ~]# mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+
[root@mysql-server1 ~]# mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+
[root@mysql-server1 ~]# mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+

   通过 ipvsadm - L 命令查看这三个连接确实都被转发到 mycat02 上了。

[root@keepalived01 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.244.10:8066 rr persistent 50
  -> 192.168.244.148:8066         Route   1      0          0         
  -> 192.168.244.149:8066         Route   1      0          3

   原来,这个与配置文件中的 persistence_timeout 有关,指的是在一定的时间内来自同一 IP 的连接将会被转发到同一 realserver 中。而不是严格意义上的轮询。默认为 50s,具体的失效时间还是比较复杂,可参考:LVS 持久性工作原理和配置  http://www.linuxidc.com/Linux/2016-03/129232.htm

   在这里,为了观察到明显的轮询效果。将该值设为 0。重启 keepalived 服务。

   重新测试,结果如下

[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+
[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat01    |
+------------+
[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+
[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat01    |
+------------+

  实现了严格意义上的轮询,ipvsadm - L 的输出结果如下:

[root@keepalived01 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.244.10:8066 rr
  -> 192.168.244.148:8066         Route   1      0          2         
  -> 192.168.244.149:8066         Route   1      0          2

  每个节点对应 2 个连接,与上述通过 mysql 客户端得到的结果相符。

  测试 LVS 的高可用

  手动断开 LVS-DR-Master 节点的 Keepalived 服务

[root@keepalived01 ~]# service keepalived stop
Redirecting to /bin/systemctl stop  keepalived.service
[root@keepalived01 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

 可以发现,mysql 客户端依旧可以通过 mycat 连接到 mysql 服务端

[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB  -e 'select @@hostname'
Warning: Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| mycat02    |
+------------+

  重启 LVS-DR-Master 节点的 Keepalived 服务后,不难检测出 keepalived01 又重新作为了 Master 节点(因为 BACKUP 节点的 persistence_timeout 没有修改,所以可根据轮询的特点来判断哪个节点是 master 节点)。

  测试 Keepalived 对于 MyCAT 服务的监控检测

  手动关闭 mycat01 节点的 mycat 服务

[root@mycat01 ~]# cd /usr/local/mycat/
[root@mycat01 mycat]# bin/mycat stop
Stopping Mycat-server...
Stopped Mycat-server.

 通过 LVS-DR-Master 节点节点上的 ipvsadm - L 可以看出 VIP 的映射关系中已剔除了 mycat01 节点。

[root@keepalived01 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.244.10:8066 rr
  -> 192.168.244.149:8066         Route   1      0          0

至此,基于 LVS+Keepalived 的 MyCAT 集群搭建完毕。

 

在整个搭建过程中,有以下几点需要注意:

1. VIP 的端口,必须和后端服务的端口是对应的,我在测试的过程中,将 VIP 的端口改为 7066,结果无法连接上 mycat。

[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P7066 -utest -ptest -DTESTDB
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.244.10' (111)
[root@mysql-server1 ~]#  mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.244.10' (111

2. LVS 和后端的 realserver 还是要物理上分开,刚开始是放到一个机器上测试,但无法得到预期的效果。

3. interface eno16777736 这里是个坑,刚开始写的是 eth0,结果,ping 都 ping 不通,所以还是要与网卡的实际名称相对应。

4. Keepalived 还是蛮强大的,即便不使用 LVS,也可基于它做高可用集群。譬如,常见的 MySQL 的双主高可用集群。

5. 关于是否要启动 Linux 内核中的路由转发功能,经测试,无论是 LVS 还是后端 MyCAT 服务节点,均可不启动。

LVS/DR + Keepalived 搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived 实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived 高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS 构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建 LVS 负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对 LVS 的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-03/129231.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10817字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7958689
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...