以前のバージョンの GKE On-Prem のドキュメントを表示しています。最新のドキュメントをご覧ください

Seesaw による負荷分散

このページでは、GKE On-Prem クラスタに Seesaw ロードバランサを構成する方法について説明します。

GKE On-Prem クラスタは、統合または手動のいずれかの負荷分散モードで実行できます。Seesaw ロードバランサを使用するには、手動負荷分散モードを使用します。

すべての手動負荷分散に共通の手順

Seesaw ロードバランサを設定する前に、手動の負荷分散設定に共通する次の手順を行います。

Seesaw VM の IP アドレスと VIP の予約

1 組のSeesaw VM 用に 2 つの IP アドレスを予約します。また、Seesaw VM のペアに 1 つの VIP を予約します。これら 3 つのアドレスはすべて、クラスタノードと同じ VLAN 上にある必要があります。

Seesaw VM の作成

Seesaw のアクティブ/パッシブペアを実行するため、vSphere 環境に 2 つのクリーンな VM を作成します。Seesaw VM には、Ubuntu 18.04 の Linux カーネル 4.15 をおすすめしますが、他の OS バージョンも利用できます。

2 つの VM の要件は次のとおりです。

  • 各 VM には、ens192 という NIC があります。この NIC には VM の IP アドレスが設定されています。

  • 各 VM には、ens224 という NIC があります。この NIC には IP アドレスは必要ありません。

  • VM は、クラスタノードと同じ VLAN 上にある必要があります。

  • ens224 のポートグループは、MAC アドレスの変更偽の送信を許可する必要があります。これは、Seesaw VM が Virtual Router Redundancy Protocol(VRRP)を使用するためです。つまり、Seesaw にはネットワーク インターフェースの MAC アドレスを設定できる機能が必須です。具体的には、MAC アドレスを 00-00-5E-00-01- [VRID] の形式の VRRP MAC アドレスに設定する必要があります。ここで、[VIRD] は Seesaw ペアの仮想ルーター識別子です。

    これは、vSphere ユーザー インターフェースのポートグループにあるポリシー設定で構成できます。

    MAC アドレスの変更と Forged commit を許可するスクリーンショット
    MAC アドレスの変更と Forged commit の許可(クリックして拡大)

Seesaw のコンパイル

Seesaw バイナリをビルドするには、Golang がインストールされているマシンで次のスクリプトを実行します。

#!/bin/bash

set -e

DEST=$PWD/seesaw_files
export GOPATH=$DEST/seesaw
SEESAW=$GOPATH/src/github.com/google/seesaw

mkdir -p $GOPATH
cd $GOPATH
sudo apt -y install libnl-3-dev libnl-genl-3-dev

git clone https://github.com/google/seesaw.git $SEESAW

cd $SEESAW
GO111MODULE=on GOOS=linux GOARCH=amd64 make install

cp -r $GOPATH/bin $DEST/
mkdir -p $DEST/cfg
cp etc/seesaw/watchdog.cfg etc/systemd/system/seesaw_watchdog.service $DEST/cfg/

sudo rm -rf $GOPATH

これにより、Seesaw バイナリと設定ファイルを格納する seesaw_files ディレクトリが生成されます。ファイルを表示するには、tree コマンドを実行します。

tree seesaw_files

出力には、生成されたディレクトリとファイルが表示されます。

seesaw_files/
├── bin
│   ├── seesaw_cli
│   ├── seesaw_ecu
│   ├── seesaw_engine
│   ├── seesaw_ha
│   ├── seesaw_healthcheck
│   ├── seesaw_ncc
│   └── seesaw_watchdog
└── cfg
    ├── seesaw_watchdog.service
    └── watchdog.cfg

2 directories, 9 files

環境変数のエクスポート

Seesaw VM を設定する前に、いくつかの環境変数をエクスポートする必要があります。

各Seesaw VM で、次の環境変数をエクスポートします。

  • NODE_IP: Seesaw VM の IP アドレス。

  • PEER_IP: 他の Seesaw VM の IP アドレス。

  • NODE_NETMASK: クラスタノードの CIDR 範囲の接頭辞の長さ。

  • VIP: VM のSeesawペア用に予約した VIP。

  • VRID:Seesaw ペアに使用する仮想ルーター識別子。

以下に例を示します。

export NODE_IP=203.0.113.2
export PEER_IP=203.0.113.3
export NODE_NETMASK=25
export VIP=203.0.113.4
export VIRD=128

Seesaw VM の構成

seesaw_files ディレクトリを 2 つのSeesaw VM にコピーします。

各Seesaw VM で、seesaw_files ディレクトリで次のスクリプトを実行します。

# execute_seesaw.sh
#!/bin/bash
set -e

DIR=./seesaw_files

# Tools
apt -y install ipvsadm libnl-3-dev libnl-genl-3-dev

# Module
modprobe ip_vs
modprobe nf_conntrack_ipv4
modprobe dummy numdummies=1
echo options ip_vs > /etc/modprobe.d/ip_vs.conf
echo options nf_conntrack_ipv4 > /etc/modprobe.d/nf_conntrack_ipv4.conf
echo options dummy numdummies=1 > /etc/modprobe.d/dummy.conf

mkdir -p /var/log/seesaw
mkdir -p /etc/seesaw
mkdir -p /usr/local/seesaw
cp $DIR/bin/* /usr/local/seesaw/
chmod a+x /usr/local/seesaw/*
cp $DIR/cfg/watchdog.cfg /etc/seesaw

cat > /etc/seesaw/seesaw.cfg <<EOF
[cluster]
anycast_enabled = false
name = bundled-seesaw-onprem
node_ipv4 = $NODE_IP
peer_ipv4 = $PEER_IP
vip_ipv4 = $VIP
vrid = $VRID

[config_server]
primary = 127.0.0.1

[interface]
node = ens192
lb = ens224
EOF

cat > /etc/seesaw/cluster.pb <<EOF
seesaw_vip: <
  fqdn: "seesaw-vip."
  ipv4: "$VIP/$NODE_NETMASK"
  status: PRODUCTION
>
node: <
  fqdn: "node.$NODE_IP."
  ipv4: "$NODE_IP/$NODE_NETMASK"
>
node: <
  fqdn: "node.$PEER_IP."
  ipv4: "$PEER_IP/$NODE_NETMASK"
>
EOF

cp $DIR/cfg/seesaw_watchdog.service /etc/systemd/system
systemctl --system daemon-reload

Seesawの再設定

次の構成では、クラスタノードの IP アドレスを指定します。また、コントロール プレーンと Ingress コントローラの VIP も指定します。記載されているように、構成では次のアドレスを指定します。

  • 100.115.222.143 は、管理コントロールプレーンの VIP です。

  • 100.115.222.144 は、管理クラスタ Ingress コントローラの VIP です。

  • 100.115.222.146 はユーザーコントロール プレーンの VIP です。

  • 100.115.222.145 は、ユーザー クラスタ Ingress コントローラの VIP です。

  • 管理クラスタノードのアドレスは、100.115.222.163、100.115.222.164、100.115.222.165、100.115.222.166 です。

  • ユーザー クラスタ ノードのアドレスは 100.115.222.167、100.115.222.168、100.115.222.169 です。

管理者とユーザー クラスタに選択した VIP と IP アドレスが含まれるように構成を編集します。次に、それぞれのSeesaw VM で、設定を /etc/seesaw/cluster.pb に追加します。

ユーザー クラスタ コントロール プレーンは、管理クラスタのServiceとして実装されています。したがって、user-1-control-plane のノード IP アドレスは管理クラスタノードのアドレスです。

vserver: <
  name: "admin-control-plane"
  entry_address: <
    fqdn: "admin-control-plane"
    ipv4: "100.115.222.143/32"
  >
  rp: "XXXX@gmail.com"
  vserver_entry: <
    protocol: TCP
    port: 443
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  backend: <
    host: <
      fqdn: "admin-1"
      ipv4: "100.115.222.163/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-2"
      ipv4: "100.115.222.164/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-3"
      ipv4: "100.115.222.165/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-4"
      ipv4: "100.115.222.166/32"
    >
  >
>
vserver: <
  name: "admin-ingress-controller"
  entry_address: <
    fqdn: "admin-ingress-controller"
    ipv4: "100.115.222.144/32"
  >
  rp: "XXXX@gmail.com"
  vserver_entry: <
    protocol: TCP
    port: 80
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  vserver_entry: <
    protocol: TCP
    port: 443
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  backend: <
    host: <
      fqdn: "admin-1"
      ipv4: "100.115.222.163/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-2"
      ipv4: "100.115.222.164/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-3"
      ipv4: "100.115.222.165/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-4"
      ipv4: "100.115.222.166/32"
    >
  >
>
vserver: <
  name: "user-1-control-plane"
  entry_address: <
    fqdn: "user-1-control-plane"
    ipv4: "100.115.222.146/32"
  >
  rp: "XXXX@gmail.com"
  vserver_entry: <
    protocol: TCP
    port: 443
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  backend: <
    host: <
      fqdn: "admin-1"
      ipv4: "100.115.222.163/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-2"
      ipv4: "100.115.222.164/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-3"
      ipv4: "100.115.222.165/32"
    >
  >
  backend: <
    host: <
      fqdn: "admin-4"
      ipv4: "100.115.222.166/32"
    >
  >
>
vserver: <
  name: "user-1-ingress-controller"
  entry_address: <
    fqdn: "user-1-ingress-controller"
    ipv4: "100.115.222.145/32"
  >
  rp: "XXXX@gmail.com"
  vserver_entry: <
    protocol: TCP
    port: 80
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  vserver_entry: <
    protocol: TCP
    port: 443
    scheduler: WLC
    mode: DSR
    healthcheck: <
      type: HTTP
      port: 10256
      mode: PLAIN
      proxy: false
      tls_verify: false
      send: "/healthz"
    >
  >
  backend: <
    host: <
      fqdn: "user-1"
      ipv4: "100.115.222.167/32"
    >
  >
  backend: <
    host: <
      fqdn: "user-2"
      ipv4: "100.115.222.168/32"
    >
  >
  backend: <
    host: <
      fqdn: "user-3"
      ipv4: "100.115.222.169/32"
    >
  >
>

Seesaw サービスの開始

各 Seesaw VM で、次のコマンドを実行します。

systemctl --now enable seesaw_watchdog.service

現在、Seesaw は両方の Seesaw VM で稼働しています。/var/log/seesaw/ でログを確認できます。

クラスタ構成ファイルの変更

クラスタを作成する前に、クラスタ構成ファイルを生成します。構成ファイルの変更の説明に従って、クラスタ構成ファイルに入力します。

特に、lbmode を [手動] に設定します。また、adminclusterusercluster の下のそれぞれの manuallbspec フィールドと vips フィールドに入力します。次に例を示します。

admincluster:

  manuallbspec:
    ingresshttpnodeport: 32527
    ingresshttpsnodeport: 30139
    controlplanenodeport: 30968

  vips:
    controlplanevip: "100.115.222.143"
    ingressvip: "100.115.222.144"

usercluster:

  manuallbspec:
    ingresshttpnodeport: 30243
    ingresshttpsnodeport: 30879
    controlplanenodeport: 30562

  vips:
    controlplanevip: "100.115.222.146"
    ingressvip: "100.115.222.145"

lbmode: "Manual"