第 6 章 在多个站点间部署单个逻辑服务以进行故障转移
使用 Service Interconnect 的典型场景是在两个站点上部署服务器进程,如果一个站点失败,另一个站点会无缝处理任何进一步的请求。在这种情况下,主服务器会响应所有请求,而该服务器可用并且流量仅在主服务器不可用时定向到次要服务器。该流程描述了两台服务器,但这种技术适用于许多服务器。
先决条件
- 两个或多个未链接站点。
- 对 Service Interconnect 及其网络模型的基本了解。
流程
-
使用
skupper init
创建站点。 - 在不同站点上部署服务器。
在第一个站点上生成令牌:
$ skupper token create token.yaml
此文件包含一个密钥以及创建它的站点的位置。
注意通过访问此文件,可以访问服务网络。对其进行恰当的保护。
使用您要从中连接的集群中的令牌:
创建到第一个站点的链接:
$ skupper link create token.yaml --cost 99999
高成本设置意味着在正常情况下不会定向到此站点。但是,如果没有其他服务器可用,则所有流量都会定向到此站点。
为两个站点公开服务网络上的服务器。
创建服务:
$ skupper service create <name> <port>
其中
-
<
;name> 是您要创建的服务的名称。 -
<
port> 是服务使用的端口。
默认情况下,该服务现在在两个站点上可见,尽管没有可用于处理对该服务的请求的服务器。
注意默认情况下,如果您在一个站点上创建服务,它将在所有站点上可用。但是,如果
enable-service-sync
被设置为false
,则需要在两个站点上创建该服务。-
将服务与两个站点上的服务器绑定。
$ skupper service bind <service-name> <target-type> <target-name>
其中
-
<service-name>
是服务网络上的服务名称 -
<target-type>
是您要公开的对象:deployment
,statefulset
,pods
, 或service
。 -
<target-name>
是集群服务的名称
例如:
$ skupper service bind hello-world-backend deployment hello-world-backend
-
- 您可以使用控制台检查流量流或使用您的工具监控服务。客户端可以连接到该站点,并且该站点上的服务器处理请求,直到服务器不可用为止。进一步的请求由其他站点的服务器处理。
如果原始站点上的服务器可用,它将处理所有进一步的请求。但是,到次要或备份服务器的现有 TCP 连接将保留,直到这些 TCP 连接关闭为止。