HAProxy+keepalived でwebサーバを負荷分散
HAProxy とは
前回、LVS + keepalived で負荷分散構成を作成したが、LVS は「Layer 4:トランスポート層」で動作するのに対して
HAProxy は「Layer 7:アプリケーション層」もしくは「Layer 4:トランスポート層」で動作させることができる。
- LVS(Linux Virtual Server):Layer 4
- HAProxy:Layer 7(Layer 4 での負荷分散も可能)
※構築がメインのため、説明はしない。以下参照。
1.2. haproxy Red Hat Enterprise Linux 7 | Red Hat Customer Portal
構成
以下、画像の構成で構築する。
- 踏み台サーバ
OS:CentOS8
- ロードバランサ
OS:CentOS8
冗長化:keepalived
負荷分散:HAProxy
- webサーバ
OS:CentOS8
ソフトウェア:Apache
※踏み台サーバ・webサーバは構築済みとする。
ロードバランサ の構築
keepalived の設定
インストール
[root@haproxy01 ~]# dnf install -y keepalived
設定
[root@haproxy01 ~]# cd /etc/keepalived/ [root@haproxy01 keepalived]# mv keepalived.conf keepalived.conf.orig [root@haproxy01 keepalived]# vim keepalived.conf ! Configuration File for keepalived global_defs { router_id HAProxy_server } vrrp_instance VI_1 { state MASTER # VRRPパケットを受信・送信するインタフェース interface enp0s8 virtual_router_id 100 #1号機と2号機で数値を変える(activeにしたい方を大きくする) priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 192.168.0.200 dev enp0s8 172.16.0.200 dev enp0s9 } }
サービスの起動
[root@haproxy01 ~]# systemctl start keepalived.service [root@haproxy01 ~]# systemctl enable keepalived.service
HAProxy の設定
インストール
[root@haproxy01 ~]# dnf install -y haproxy
設定
[root@haproxy01 ~]# cd /etc/haproxy/ [root@haproxy01 haproxy]# mv haproxy.cfg haproxy.cfg.orig [root@haproxy01 haproxy]# vim haproxy.cfg #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend http-in #80/tcp ポートで受け付ける bind *:80 #バックエンドを定義 default_backend backend_server #X-Forwarded-For ヘッダーを渡す option forwardfor #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- backend backend_server #ラウンドロビン方式で負荷分散 balance roundrobin #バックエンドサーバを定義 server node1 172.16.0.11:80 check #[check]オプションにより、バックエンドサーバの死活監視を行う server node2 172.16.0.12:80 check
サービスの起動
[root@haproxy01 ~]# systemctl start haproxy.service [root@haproxy01 ~]# systemctl enable haproxy.service
firewalld の無効化
[root@haproxy01 haproxy]# systemctl stop firewalld.service [root@haproxy01 haproxy]# systemctl disable firewalld.service
負荷分散の検証
踏み台サーバからロードバランサのVIPへHTTPリクエストを送信
[root@bastion ~]# curl 192.168.0.200 test_web01 [root@bastion ~]# curl 192.168.0.200 test_web02
負荷分散されていた。
Ubuntu_20.04_LTS でIPアドレスを変更する
NetworkManager で設定しない
CentOS8 では、NetworkManager を使ってIPアドレスを設定したが、Ubuntu_20.04 ではどうやら違うらしい。
LPIC の試験では、「/etc/network/interfaces」という設定ファイルを変更する。みたいな感じで書かれていたが、そもそも Ubuntu_20.04 にはそんなファイルが存在していなかった。
rev1a@rev1a-VirtualBox:~$ ls -al /etc/network/
合計 32
drwxr-xr-x 6 root root 4096 8月 8 09:29 .
drwxr-xr-x 129 root root 12288 11月 23 22:17 ..
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-down.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-post-down.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-pre-up.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-up.d
YAML ファイルを弄る
既存YAMLファイルの無効化
どうやら ubuntu_20.04 では、「/etc/netplan/」内にある yamlファイルを編集するらしい。(詳しくは知らない。)
ということで、まずデフォルトで存在している yamlファイルを無効にする。
rev1a@rev1a-VirtualBox:~$ sudo mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.disable
※デフォルトで存在しているファイルは、削除しても良いらしいが、なんかこわいのでファイル名を変更して、yamlファイルとして認識されないようにする。
新規YAMLファイルの作成
新規にyamlファイルを作成し、IPアドレス等々を設定する。
rev1a@rev1a-VirtualBox:~$ sudo vi /etc/netplan/99-netcfg.yaml
network:
ethernets:
# ネットワークインターフェース名
enp0s3:
dhcp4: no
# IPアドレス/サブネットマスク
addresses: [192.168.1.77/24]
# デフォルトゲートウェイ
gateway4: 192.168.1.1
nameservers:
# 参照するネームサーバー
addresses: [192.168.1.1]
dhcp6: no
version: 2
設定を反映する。rev1a@rev1a-VirtualBox:~$ sudo netplan apply
設定されたか確認する。rev1a@rev1a-VirtualBox:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:63:90:a5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.77/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 240d:1e:149:a400:a00:27ff:fe63:90a5/64 scope global tentative dynamic mngtmpaddr noprefixroute
valid_lft 6172sec preferred_lft 6172sec
inet6 fe80::3767:d144:d0a2:78dc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Apacheでhttpサーバをhttpsサーバにする
はじめに
Apache でwebサーバを構築すると、何もしなければ「http 80/tcp」の通信になり、セキュリティ的に推奨されていないものになってしまう。
そこてで、今回はあらかじめ作成されている「httpサーバ」に「自己証明書」を作成し、「httpsサーバ」にする。
※「httpサーバ」は作成されているものとする。
https化に必要なモジュールをインストールする。
Apache で httpsサーバを構築するには、「mod_ssl」モジュールが必要になる。
[root@web01 ~]# dnf -y install mod_ssl
メタデータの期限切れの最終確認: 1:39:30 時間前の 2020年11月15日 10時57分53秒 に実施しました。
依存関係が解決しました。
======================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
======================================================================================================================
インストール中:
mod_ssl x86_64 1:2.4.37-21.module_el8.2.0+494+1df74eae AppStream 132 k
完了しました!
サーバの秘密鍵を作る
秘密鍵を作成。
[root@web01 ~]# openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
.......................................................................+++++
e is 65537 (0x010001)
Enter pass phrase: #パスフレーズを入力
Verifying - Enter pass phrase: #パスフレーズを再入力
証明書署名要求(CSR)を作成する
基本的にすべての項目を[Enterキー]でスキップする。
[root@web01 ~]# openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
ーーーー
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
サーバ証明書を発行する
今回は、無料で証明書を発行したいため自分自身で証明書を作る。
先ほど作成した証明書署名要求「server.csr」をもとに、サーバ証明書「server.crt」を有効期限:10年間で作成する。
[root@web01 ~]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key
SSLモジュールの設定
証明書・鍵の移動
先ほど作成したサーバ証明書「server.crt」とサーバ秘密鍵「server.key」を管理しやすいように移動させる。
[root@web01 ~]# mkdir /etc/httpd/conf/ssl
[root@web01 ~]# mv server.key /etc/httpd/conf/ssl/
[root@web01 ~]# mv server.crt /etc/httpd/conf/ssl/
SSLモジュールの設定変更
証明書と鍵の場所を加える
[root@web01 ~]# vi /etc/httpd/conf.d/ssl.conf
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that restarting httpd will prompt again. Keep
# in mind that if you have both an RSA and a DSA certificate you
# can configure both in parallel (to also allow the use of DSA
# ciphers, etc.)
# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
# require an ECC certificate which can also be configured in
# parallel.
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt #コメントアウト
SSLCertificateFile /etc/httpd/conf/ssl/server.crt# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
# ECC keys, when in use, can also be configured in parallel
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key #コメントアウト
SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key
NTPサーバの構築
はじめに
NTPサーバを構築するためには、「chrony」をインストールする必要がある。
(centos8 サーバ用でインストールした際は、デフォルトでインストールされていた。)
「chrony」とは
深くは書かない。長くなりそうだから。
PCをNTPサーバ兼クライアントソフトとして動作させるための
「NTP用のソフトウェアスイート」。
- chronyd(chronyデーモン)
- chronyc
「chronyd」は、「chronyc」というコマンドラインユーティリティを使用して、管理及び監視をしている。
NTPサーバを構築
「chrony」のインストール。
主は、「centos8」を使用しているがデフォルトでインストールされていた。
一応、インストールする。
[root@ntp ~]# dnf install -y chrony
CentOS-8 - AppStream 1.5 MB/s | 5.8 MB 00:03
CentOS-8 - Base 1.8 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 5.5 kB/s | 8.6 kB 00:01
パッケージ chrony-3.5-1.el8.x86_64 はすでにインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
確認方法(最初にこれやればよかった?)
[root@ntp ~]# dnf list installed | grep chrony
chrony.x86_64 3.5-1.el8 @anaconda
設定を変更
念のためオリジナルファイルをコピーしておく。
[root@ntp ~]# cp /etc/chrony.conf /etc/chrony.conf.orig
設定ファイルを編集
[root@ntp ~]# vi /etc/chrony.conf# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst
/////////////////
# Allow NTP client access from local network.
#allow 192.168.0.0/16
↓
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#日本の標準時間を提供しているNTPサーバ(stratum 1)
server ntp.nict.jp iburst
/////////////////
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.0.0/24
サービスの起動
「chronyデーモン」を起動
[root@ntp ~]# systemctl start chronyd
[root@ntp ~]# systemctl enable chronyd
「chronyデーモン」のステータスを確認
[root@ntp ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-20 22:24:41 JST; 37min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 866 (chronyd)
Tasks: 1 (limit: 6041)
Memory: 1.7M
CGroup: /system.slice/chronyd.service
mq866 /usr/sbin/chronyd
正常に動作している。NTPサーバの時刻同期状態の確認
[root@ntp ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ vpn.ms.mff.cuni.cz 2 8 377 94 +1062us[+1062us] +/- 176ms
^- ns2.vedur.is 3 8 377 34 -8573us[-8573us] +/- 211ms
^* ott130.hkcable.com.hk 3 7 377 103 +1567us[+1776us] +/- 79ms
^+ ntpool0.603.newcontinuum> 2 8 377 37 +57us[ +57us] +/- 107ms
NTPサーバ名の前に「^+」「^*」があれば時刻を同期している。
NetworkManagerでインタフェースの設定をする
virtual box を使って、アダプタをブリッジにして追加したが、
下記のコマンドを実行したところ、インタフェースが反映されていなかった。
[root@lb01 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet 接続済み enp0s3
enp0s8 ethernet 切断済み --
enp0s9 ethernet 切断済み --
lo loopback 管理無し --
そもそもインタフェースの設定ファイルが存在していなかった。
[root@lb01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
cat: /etc/sysconfig/network-scripts/ifcfg-enp0s9: そのようなファイルやディレクトリはありません
まずは、インタフェースの設定ファイルを作成する。
[root@lb01 ~]# nmcli connection add type ethernet con-name enp0s9 ifname enp0s9
接続 'enp0s9' (36e6beb5-80c7-49b1-a18a-b49b30f76187) が正常に追加されました。
- 接続タイプは、「ethernet」
- インタフェースの接続名、「enp0s8」
※「/etc/sysconfig/network-scripts/ifcfg-xxx」←「xxx」の部分にも使われる
- インタフェース名は、「enp0s8」
上記コマンドにより、
/etc/sysconfig/network-scripts/ifcfg-enp0s9
が作成される。作成した後は、
# nmcli connection up enp0s8
により、「DHCP」で ipアドレス・NWアドレス・デフォルトゲートウェイ等が自動設定される。
設定後に確認してみる。
[root@lb01 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet 接続済み enp0s3
enp0s9 ethernet 接続済み enp0s9
enp0s8 ethernet 接続済み enp0s8
lo loopback 管理無し --
接続されたことが確認できた。インタフェースの設定を変更する。
変更点としては、
の2点とする。
- IPアドレスを変更する。
[root@lb01 ~]# nmcli connection modify enp0s9 ipv4.addresses 192.168.1.100/24
- インタフェースのデフォルトゲートウェイを変更する。
[root@lb01 ~]# nmcli connection modify enp0s9 ipv4.gateway 192.168.1.1
- 「DHCP」->「Manual(手動)」に切り替える。
[root@lb01 ~]# nmcli connection modify enp0s9 ipv4.method manual
- インタフェースを再起動し、設定を反映させる。
[root@lb01 ~]# nmcli connection down enp0s9
接続 'enp0s9' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@lb01 ~]# nmcli connection up enp0s9
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)
- IPアドレスが変更されたか確認する。
[root@lb01 ~]# ip addr show | grep "enp0s9"
4: enp0s9: mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute enp0s9
LVS+keepalivedを使ってwebサーバを負荷分散
今回作るvirual box上のネットワーク構成図。
仮想サーバを作成
上記のネットワーク図に記載した分の仮想マシンを作成する
- 踏み台サーバ×2台
- Load Balancer×2台
- webサーバ×2台
踏み台サーバを作成
- 踏み台サーバは、冗長化してアクティブ機に障害が発生してもサーバが停止しない構成とする。
- 上記を実現するため、keepalivedをインストールする。1号機をアクティブ、2号機をスタンバイとする。
- keepalivedの設定
1. keepalived をインストール [root@bastin01 ~]# dnf -y install keepalived CentOS-8 - AppStream 3.3 MB/s | 5.8 MB 00:01 CentOS-8 - Base 2.0 MB/s | 2.2 MB 00:01 CentOS-8 - Extras 9.1 kB/s | 8.1 kB 00:00 依存関係が解決しました。 | 完了しました! 2. 設定ファイルをコピー [root@bastin01 ~]# cd /etc/keepalived/ [root@bastin01 keepalived]# cp keepalived.conf keepalived.conf.orig [root@bastin01 keepalived]# vi keepalived.conf #################################### ! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER #MASTER/BACKUP(1号機:MASTER 2号機:BACKUP) interface enp0s3 virtual_router_id 51 #1、2号機で合わせる priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #virtual IPアドレスの設定 192.168.1.50/24 dev enp0s3 10.0.0.50/24 dev enp0s8 } } #################################### 3. firewalld で「VRRP」パケットを許可する [root@bastin01 ~]# firewall-cmd --permanent --add-protocol=vrrp success [root@bastin01 ~]# firewall-cmd --reload success [root@bastin01 ~]# systemctl start keepalived.service [root@bastin01 ~]# systemctl enable keepalived.service Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service. 4. 1号機に設定した virtual IPアドレスが振り分けられていることを確認する [root@bastin01 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:1c:f5:08 brd ff:ff:ff:ff:ff:ff inet 192.168.1.51/24 brd 192.168.1.255 scope global noprefixroute enp0s3 valid_lft forever preferred_lft forever inet 192.168.1.50/24 scope global secondary enp0s3 valid_lft forever preferred_lft forever inet6 240d:1e:149:a400:661b:ec36:d833:f7b4/64 scope global dynamic noprefixroute valid_lft 10411sec preferred_lft 10411sec inet6 fe80::460c:3b21:de30:5f13/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:28:af:5d brd ff:ff:ff:ff:ff:ff inet 10.0.0.51/24 brd 10.0.0.255 scope global noprefixroute enp0s8 valid_lft forever preferred_lft forever inet 10.0.0.50/24 scope global secondary enp0s8 valid_lft forever preferred_lft forever inet6 fe80::f556:a17a:a07:3543/64 scope link noprefixroute valid_lft forever preferred_lft forever
Load Balancerを作成
- webサーバへのアクセスを集中させないため負荷分散装置を作成。
- 踏み台サーバと同じくkeepalivedをインストールし、冗長化構成にする。ただ、今回はkeepalivedを使ってリアルサーバ(バックエンドサーバ)の稼働状況の監視をさせる設定を組み込む。
! Configuration File for keepalived global_defs { router_id LVS_server } vrrp_instance VI_1 { state MASTER interface enp0s3 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 10.0.0.10 dev enp0s3 172.16.0.10 dev enp0s8 } } #リアルサーバの稼働状況を監視する設定を追加 virtual_server 10.0.0.10 80 { delay_loop 6 lb_algo rr #負荷分散アルゴリズム lb_kind NAT #負荷分散方式 persistence_timeout 50 protocol TCP real_server 172.16.0.100 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 } } real_server 172.16.0.101 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 } } }
- 負荷分散装置として動作させるため、LVS(Linux Virtual Server)をインストール。(LVSの管理ユーティリティであるipvsadmをインストール)
- LVSの設定
1. ipvsadm をインストール [root@LB01 ~]# dnf install -y ipvsadm メタデータの期限切れの最終確認: 0:22:38 時間前の 2020年10月29日 21時45分41秒 に実施しました。 依存関係が解決しました。 | | | 完了しました! 2. ipvsのシステム設定ファイルを作成 [root@LB01 ~]# touch /etc/sysconfig/ipvsadm 3. ipフォワーディングを設定 [root@LB01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 4. Load Balanceの設定(-A:virtual server -a:VSに振り分け先のリアルサーバを追加 -r:リアルサーバ -m:転送方法の設定(mはNAT方式)) [root@LB01 ~]# ipvsadm -C [root@LB01 ~]# ipvsadm -A -t 10.0.0.10:80 -s wlc [root@LB01 ~]# ipvsadm -a -t 10.0.0.10:80 -r 172.16.0.100:80 -m [root@LB01 ~]# ipvsadm -a -t 10.0.0.10:80 -r 172.16.0.101:80 -m [root@LB01 ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.10:http wlc -> 172.16.0.100:http Masq 1 0 0 -> 172.16.0.101:http Masq 1 0 0
webサーバを作成
routingの設定
踏み台サーバ→webサーバへの通信はLBを経由するようにする。 [root@bastin01 ~]# ip route add 172.16.0.0/24 via 10.0.0.10 dev enp0s8
追記
上記設定では、
踏み台サーバ→ロードバランサ→webサーバ
の通信は成功するが、帰りの通信が成功しなかった。
パケットキャプチャをしたが、踏み台サーバにwebサーバからの「SYN+ACKパケット」が到達していなかった。
恐らく「firewalld」でIPマスカレード設定をしていないのが原因。
今回は、ローカルだし設定めんどくさいし...ってことで、「firewalld」自体を停止させた。
[root@LB01 ~]# systemctl stop firewalld.service
「firewalld」を停止させたら成功した。
centos8を冗長構成にする
Linuxサーバを冗長化するには、keepalivedを使用する。
冗長化する目的
- NW機器やサーバに障害が発生してとしてもサービスを提供できるようにする。
- 構成変更時、スタンバイ系の1台ずつ変更できる。結果、サービスを停止しないで作業ができる。
今回、冗長化するための構成図↓
負荷分散装置(LVS:Linux Virtual Server)については、
前回の記事を参照。
keepalivedの設定をしていく。
keepalived のインストール
dnf install -y keepalived
以下に設定ファイルが置かれる
/etc/keepalived/keepalived.conf
設定ファイルをコピー
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
設定ファイルを編集
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_server
}
vrrp_instance VI_1 { #HAクラスタ(冗長化クラスタ)の設定
state MASTER #1号機と2号機で変える(MASTER/BACKUP)
interface enp0s3 #冗長化するインタフェース
virtual_router_id 51 #1号機と2号機で合わせる
priority 100
advert_int 3 #1号機と2号機で合わせる
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {#パケットを送受信する仮想サーバ(1号機と2号機で合わせる)
192.168.1.202/24
}
}
firewalldの設定
vrrpの許可
firewall-cmd --permanent --add-protocol=vrrp
firewall-cmd --reload
設定を保存して、serviceの起動
systemctl start keepalived.service
systemctl enable keepalived.service