Adachinですっ。
今回はロードバランサー(ipvsadm)の運営は経験あったんですが構築はそういえばないな〜と。KVMを使って検証したので、構築方法をブログします。
もちろんOSは
CentOS Linux release 7.2.1511 (Core)
になります。
そもそも今回はDSRで構築するため、非常にレガシーな技術ですがやってみたいと思います。最近はhaproxy(NAT)が定番で、AWSのELBにも採用されてます。
・関連記事
■構成図
一旦LVSは一台の構成でやります。(後にKeepalivedの設定するので)
※環境によって違うと思いますので、よしなに理解していきましょう。
ちなみにKVMなのでホストサーバにボンディングの設定をしています。(仮想ポート)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@host5 network-scripts]# cat ifcfg-br2xx DEVICE=br2xx BOOTPROTO=static IPADDR=172.19.10.60 NETMASK=255.255.255.0 ONBOOT=yes TYPE=Bridge [root@host5 network-scripts]# cat ifcfg-br9xx DEVICE=br9xx BOOTPROTO=none ONBOOT=yes TYPE=Bridge |
■やりたいこと
1.test01からtest02(172.19.10.63)をcurlで叩くとtest-03,04(WEB01,02)が表示できているか
1 2 3 4 5 |
# curl 172.19.10.63 WEB01 # curl 172.19.10.63 WEB02 みたいな感じ |
→ロードバランシングの確認
2.test03,04(WEB01,02)からtest01(172.19.10.21)にcurlで叩くと表示ができているか
1 2 3 |
WEB01# curl 172.19.10.21 test01 みたいな感じ |
→NATの確認
まずは上記の設定からやってみましょう。
これができたらVIPやらKeepalivedの設定をして冗長化します。(ロードバランシングが落ちても大丈夫!!)
※こちらは次回のブログでお会いしましょう
■test03,04(WEB01,02)eth1の設定(ネットワーク)
まずはWEBサーバ2台ローカルIPの設定をします。(ネットワーク帯を分けます)
WEBサーバはnginxなりapacheで構築してください(割愛)
・eth1
よしなに
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@test03 network-scripts]# cat ifcfg-eth1 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eth1 UUID=mooooooooooooooooooon DEVICE=eth1 ONBOOT=yes IPADDR=192.168.99.2 PREFIX=24 GATEWAY=192.168.99.1 |
・eth0
基本eth0は無効化にします。これによりsshが繋がらなくなるので、
LVSからipvsadmでsshのポートを適当に開放しないといけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@test03]# cat ifcfg-eth0 # Generated by dracut initrd NAME="eth0" HWADDR=mooooooooooonn ONBOOT=no NETBOOT=yes UUID="mooooooooooooooonn" BOOTPROTO=static TYPE=Ethernet DEFROUTE=no IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPADDR=172.19.10.xx PREFIX=24 #GATEWAY=172.19.10.63 PEERDNS=yes PEERROUTES=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes |
■test01にipvsadmのインストール
1 2 3 4 5 6 7 |
# yum -y install ipvsadm # echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.conf # sysctl -p net.ipv4.ip_forward = 1 # touch /etc/sysconfig/ipvsadm # systemctl start ipvsadm # systemctl enable ipvsadm |
・test01のeth0に対してweb03,04(eth1)をipvsadmに追加する
1 2 3 |
# ipvsadm -A -t 172.19.10.63:80 -s wlc # ipvsadm -a -t 172.19.10.63:80 -r 192.168.99.2:80 -m # ipvsadm -a -t 172.19.10.63:80 -r 192.168.99.3:80 -m |
・先ほど上記であげたsshも設定します
1 2 3 4 5 |
# ipvsadm -A -t 172.19.10.63:10123 -s wlc # ipvsadm -a -t 172.19.10.63:10123 -r 192.168.99.2:22 -m # ipvsadm -A -t 172.19.10.63:10124 -s wlc # ipvsadm -a -t 172.19.10.63:10124 -r 192.168.99.3:22 -m |
・sshログイン
変わるので焦らないように
1 2 |
$ ssh -p 100123 172.19.10.63 $ ssh -p 100124 172.19.10.63 |
・確認
1 2 3 4 5 6 7 8 9 10 11 |
# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags > RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.19.10.63:80 wlc > 192.168.99.2:80 Masq 1 0 0 > 192.168.99.3:80 Masq 1 0 0 TCP 172.19.10.63:10123 wlc > 192.168.99.2:22 Masq 1 0 0 TCP 172.19.10.63:10124 wlc > 192.168.99.3:22 Masq 1 0 0 |
これでロードバランシングされます。
・curlで叩けるか確認
1 2 3 4 |
[root@test01 ~]# curl 172.19.10.63 WEB01 [root@test02 ~]# curl 172.19.10.63 WEB02 |
ちゃんと分散されてる
■まとめ
これで外から中の確認ができたので、中から外の設定(NAT)をしていきましょう。やっぱりネットワークの設定でハマった汗
参考:https://www.server-world.info/query?os=CentOS_7&p=lvs
0件のコメント