【CoreOS】冗長化構成　Keepalived+NginxLB+NginxWEB(1)

# CoreOSでKeepalivedを使った冗長化＋負荷分散

![スライド4.jpg](https://qiita-image-store.s3.amazonaws.com/0/93976/cdfbfc4e-255b-fc71-d754-1b3dd53569c1.jpeg)

## 前回記事構成のcoreos01及びcoreos04を利用しています。

[【CoreOS】fleet + docker + keepalived(VRRP+VIPのみ)で簡単LB](http://qiita.com/xshsaku/items/e9d13563e0e523def2db)

## 構成

(1)IPアドレス192.168.0.50のVIP（virtual ip）を持ったサーバーにアクセス
(2)Docker-Nginx 80番ポートに着信
(3)80番ポート着信後Docker-Nignx-Proxyが、Docker-nginx-webのcoreos01/coreos04のそれぞれの8080ポートにNAT転送

## Unitファイル（systemd / fleet）を作成

UNITファイルを作成 X-FLEETにはcoreos01/coreos04のそれぞれのmachine-idを入れましょう。

```bash:nginx-lb@1.service
[Unit]
Description=NginxLB
After=docker.service
Requires=docker.service
ConditionPathExists=/srv/lb/lb.conf

[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker pull nginx:1.7.10
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/bin/docker run --rm \
  --name %p \
  --net host \
  -v /srv/lb/lb.conf:/etc/nginx/nginx.conf:ro \
  nginx:1.7.10 \
  nginx
ExecStop=/usr/bin/docker stop -t 2 %p

[X-Fleet]
MachineID=5b1639bd3cc347cf8fac0b9f597369e3
```

lb.conf

```bash:lb.conf
server {
    listen       80;
    server_name  www.example.jp;
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;

    location / {
        proxy_pass http://backend;
    }
}

#ロードバランサ設定
upstream backend {
      ip_hash;
      server 192.168.0.10:8080 max_fails=3 fail_timeout=30s ;
      server 192.168.0.11:8080 max_fails=3 fail_timeout=30s ;
      server 127.0.0.1:8080  down;
}
```

## あらかじめlb.confをばら撒きます

```bash:os
#coreos01
scp lb.conf core@192.168.0.10:/home/core/
ssh core@192.168.0.10
sudo mkdir -p /srv/lb/
sudo cp -a lb.conf /srv/lb/

#coreos04
scp lb.conf core@192.168.0.11:/home/core/
ssh core@192.168.0.11
sudo mkdir -p /srv/lb/
sudo cp -a lb.conf /srv/lb/

```

## fleet(systemd)にUnitを登録します。

```bash:fleetctl
fleetctl submit nginx-lb@{1,2}
fleetctl load nginx-lb@{1,2}
fleetctl start nginx-lb@{1,2}

fleetctl list-units --full
UNIT			MACHINE						ACTIVE	SUB
keepalived@1.service	5b1639bd3cc347cf8fac0b9f597369e3/192.168.0.10	active	running
keepalived@2.service	6d28316711484f039eca4408627fdb0c/192.168.0.11	active	running
nginx-lb@1.service	5b1639bd3cc347cf8fac0b9f597369e3/192.168.0.10	active	running
nginx-lb@2.service	6d28316711484f039eca4408627fdb0c/192.168.0.11	active	running

```

ここまで設定できれば、192.168.0.50にアクセスして[502 Bad Gateway]の表示がnginxから出力されると思います。

次回はバックエンドの8080ポート(実際のWEBサービス)の設定に移ります。

### 続き
[【CoreOS】冗長化構成　Keepalived+NginxLB+NginxWEB(完)](http://qiita.com/xshsaku/items/94c914df2df87e8c6965)

### 前回記事ご紹介：
[【CoreOS】fleet + docker + keepalived(VRRP+VIPのみ)で簡単LB](http://qiita.com/xshsaku/items/e9d13563e0e523def2db)
[【CoreOS】cloud-config解説〜インストール](http://qiita.com/xshsaku/items/1ba3f930ff80bef685a6)
[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(1)](http://qiita.com/xshsaku/items/5be3837c39bb8c9bd4e7)
[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(2)](http://qiita.com/xshsaku/items/a5b57fafa0b41740bd7f)
[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(完)](http://qiita.com/xshsaku/items/3b1c92a60f3d7e401061)