Keepalivedは、C言語で記述されたルーティングソフトウェアであり、lvsの拡張プロジェクトであり、主にRealServerのヘルスチェック、およびLoadBalanceホストとBackUPホスト間のフェイルオーバーの実装に使用されます。 Keepalivedは、レイヤー3、4、7の交換メカニズムに似たソフトウェアです。これは、通常、レイヤー3、4、7の交換と呼ばれます。この記事では、参考のために主にインストールプロセスを紹介します。
1、 インストールソフトウェアを入手する
ダウンロードリンク:[http://www.keepalived.org/download.html](http://www.keepalived.org/download.html)
最新バージョン1.2.13を直接ダウンロードすることも、wgetから自動的にダウンロードすることもできます。
# wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
2、 インストールの前提条件
a。ipvsがインストールされていることを確認します
# 次のように、ipvsadmを実行して、ipvsがインストールされているかどうかを確認します。(現在、ほとんどのLinuxはデフォルトでインストールされています)[root@HKBO ~]# ipvsadm
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:Port Scheduler Flags
- > RemoteAddress:Port Forward Weight ActiveConn InActConn
# 現在ロードされているカーネルモジュールをチェックして、ipがあるかどうかを確認します_vsモジュール
[ root@HKBO ~]# lsmod|grep ip_vs
ip_vs 1221130
b。対応する依存関係パッケージをインストールします
# yum -y install gcc gcc-c++ gcc-g77 ncurses-devel bison libaio-devel \
> cmake libnl* libpopt* popt-static openssl-devel
3、 keepalivedをインストールします
[ root@HKBO ~]# more /etc/issue
CentOS release 5.9(Final)
# mkdir /usr/local/keepalived
# cd /usr/local/src
# wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
# tar -xvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
# . /configure --disable-fwmark --prefix=/usr/local/keepalived
...............
Keepalived configuration
------------------------
Keepalived version :1.2.13
Compiler : gcc
Compiler flags :-g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib :-lssl -lcrypto -lcrypt
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
fwmark socket support : No
Use VRRP Framework : Yes
Use VRRP VMAC : No
SNMP support : No
SHA1 support : No
Use Debug flags : No
# make && make install
# ls /usr/local/keepalived/ #インストールが完了すると、4つのディレクトリが生成されます
bin etc sbin share
# cd /usr/local/keepalived/etc
[ root@HKBO etc]# tree
.|- - keepalived
||- - keepalived.conf #keepalivedの構成例
|`- - samples
| |- - client.pem
| |- - dh1024.pem
| |- - keepalived.conf.HTTP_GET.port
| |- - keepalived.conf.IPv6
| |- - keepalived.conf.SMTP_CHECK
| |- - keepalived.conf.SSL_GET
| |- - keepalived.conf.fwmark
| |- - keepalived.conf.inhibit
| |- - keepalived.conf.misc_check
| |- - keepalived.conf.misc_check_arg
| |- - keepalived.conf.quorum
| |- - keepalived.conf.sample
| |- - keepalived.conf.status_code
| |- - keepalived.conf.track_interface
| |- - keepalived.conf.virtual_server_group
| |- - keepalived.conf.virtualhost
| |- - keepalived.conf.vrrp
| |- - keepalived.conf.vrrp.localcheck
| |- - keepalived.conf.vrrp.lvs_syncd
| |- - keepalived.conf.vrrp.routes
| |- - keepalived.conf.vrrp.scripts
| |- - keepalived.conf.vrrp.static_ipaddress
| |- - keepalived.conf.vrrp.sync
| |- - root.pem
| `- - sample.misccheck.smbcheck.sh
|- - rc.d
|`- - init.d
| `- - keepalived
`- - sysconfig
`- - keepalived
# cd /usr/local/keepalived/sbin
# . /keepalived --help #keepalivedで助けを得る
Usage:./keepalived [OPTION...]-f,--use-file=FILE Use the specified configuration file
- P,--vrrp Only run with VRRP subsystem
- C,--check Only run with Health-checker subsystem
- l,--log-console Log messages to local console
- D,--log-detail Detailed log messages
- S,--log-facility=[0-7] Set syslog facility to LOG_LOCAL[0-7]-V,--dont-release-vrrp Don't remove VRRP VIPs and VROUTEs on daemon stop
- I,--dont-release-ipvs Don't remove IPVS topology on daemon stop
- R,--dont-respawn Don't respawn child processes
- n,--dont-fork Don't fork the daemon process
- d,--dump-conf Dump the configuration data
- p,--pid=FILE Use specified pidfile for parent process
- r,--vrrp_pid=FILE Use specified pidfile for VRRP child process
- c,--checkers_pid=FILE Use specified pidfile for checkers child process
- v,--version Display the version number
- h,--help Display this help message
# mkdir /etc/keepalived/
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
# service keepalived restart
Stopping keepalived:[FAILED]
Starting keepalived:[ OK ]
# service keepalived status
keepalived(pid 12092) is running...
# chkconfig keepalived on
# ip addr
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:84:04:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.66/24 brd 192.168.1.255 scope global eth0
inet 192.168.200.16/32 scope global eth0
inet 192.168.200.17/32 scope global eth0
inet 192.168.200.18/32 scope global eth0
inet6 fe80::250:56ff:fe84:42c/64 scope link
valid_lft forever preferred_lft forever
3: sit0:<NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
4、 keepalived.confに関連する構成アイテム
[ root@HKBO keepalived]# more keepalived.conf
! Configuration File for keepalived
# グローバル定義ブロックには、メール定義部分が含まれています。
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL //ロードバランサー識別子。ネットワーク内で一意である必要があります}
# ロードバランサー間のフェイルオーバーを担当するVRRPインスタンス定義ブロック
vrrp_instance VI_1 {
state MASTER //MASTERとBACKUPの状態は2つだけで、マスターはMASTER、スレーブはBACKUP、大文字のinterfaceeth0を使用します。//監視対象のネットワークインターフェイス
virtual_router_id 51//同じインスタンスでの仮想_router_idは同じでなければなりません
priority 100//優先度を定義します。数値が大きいほど、優先度が高くなります。
advert_int 1//MASTERとBACKUPロードバランサー間の同期チェックの時間間隔(秒単位)
authentication {//認証タイプとパスワード
auth_type PASS
auth_pass 1111}
virtual_ipaddress {//仮想IPアドレス仮想_ipaddress,192以上を定義できます.168.200.16192.168.200.17192.168.200.18}}
# 仮想サーバー定義ブロック
virtual_server 192.168.200.100443{//仮想サーバーを定義する
delay_loop 6//delay_ループ、ヘルスチェック間隔(秒単位)
lb_algo rr //ロードスケジューリングアルゴリズム、ここではrrに設定されています。つまり、ポーリングアルゴリズムであり、インターネットアプリケーションは多くの場合wlcまたはrrを使用します。
lb_kind NAT //負荷分散転送ルール。通常、DRが含まれます,NAT,TUN 3種類、私の計画では、すべてDRを使用しています
nat_mask 255.255.255.0//サブネットマスク
persistence_timeout 50//セッション保持時間(秒単位)(セッションを維持するために時間を適切に延長できます)
protocol TCP //転送プロトコルタイプには、tcpとudpの2種類があります
real_server 192.168.201.100443{//実サーバーのIPとポート
weight 1//デフォルトは1です,0は無効です
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3}}}
virtual_server 10.10.10.21358{
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.2001358
real_server 192.168.200.21358{
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3}}
real_server 192.168.200.31358{
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3}}}
5、 アクティブおよびスタンバイのkeepalivedを構成します
a、アクティブおよびスタンバイのkeepalivedを構成します
# メイン、keepalivedは主に以下にリストされています.confの違いの部分
vrrp_instance VI_1 {
state MASTER
interfaceeth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.220192.168.1.230}}
# 準備された、以下は主にkeepalivedをリストします.confの違いの部分
vrrp_instance VI_1 {
state BACKUP
interfaceeth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.220192.168.1.230}}
b、メインとスタンバイのキープアライブをテストします
# メインサーバーでkeepalivedサービスを開始します
[ root@MASTER ~]# service keepalived start
Starting keepalived:[ OK ][root@SZ-SYS-APP01 ~]# ip addr
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:84:1f:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.65/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.220/32 scope global eth0 #220と230の仮想IPを見ることができます
inet 192.168.1.230/32 scope global eth0
inet6 fe80::250:56ff:fe84:1f37/64 scope link
valid_lft forever preferred_lft forever
3: sit0:<NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
# スタンバイサーバーでkeepalivedサービスを開始します
[ root@BACKUP ~]# service keepalived start
Starting keepalived:[ OK ]
# 以下のクエリ結果では、仮想IP220および230はバックアップサーバーに表示されません。
[ root@HKBO ~]# ip addr
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:84:04:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.66/24 brd 192.168.1.255 scope global eth0
inet6 fe80::250:56ff:fe84:42c/64 scope link
valid_lft forever preferred_lft forever
3: sit0:<NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
# メインサービスのkeepalivedサービスを閉じ、VIPがバックアップサービスにドリフトするかどうかを確認します
[ root@MASTER ~]# service keepalived stop
Stopping keepalived:[ OK ][root@MASTER ~]# ip addr #閉じた後、コマンドは220と230の仮想IPがメインサーバーに存在しなくなったことを確認できます。
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:84:1f:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.65/24 brd 192.168.1.255 scope global eth0
inet6 fe80::250:56ff:fe84:1f37/64 scope link
valid_lft forever preferred_lft forever
3: sit0:<NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
# このとき、ドリフトするVIPアドレスはスタンバイサーバーで表示されていました
[ root@BACKUP ~]# ip addr
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:84:04:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.66/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.220/32 scope global eth0
inet 192.168.1.230/32 scope global eth0
inet6 fe80::250:56ff:fe84:42c/64 scope link
valid_lft forever preferred_lft forever
3: sit0:<NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
# メインサーバーのkeepalivedサービスが再度開始されると、VIPは検証なしで自動的にメインサーバーにドリフトします。
# Author : Leshami
# Blog :http://blog.csdn.net/leshami
6、 デュアルマスターキープアライブを構成する
デュアルマスターkeepalivedモードは、実際には、単一の障害点を回避するための相互のマスターとバックアップです。
# アクティブおよびスタンバイのkeepalivedを構成します
MasterA:192.168.1.65, VirtualIP:192.168.1.220
MasterB:192.168.1.66, VirtualIP:192.168.1.230
# メイン、keepalivedは主に以下にリストされています.confの違いの部分
vrrp_instance VI_1 {
state MASTER
interfaceeth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.220}}
vrrp_instance VI_2 {
state BACKUP
interfaceeth0
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.230}}
# 準備された、以下は主にkeepalivedをリストします.confの違いの部分
vrrp_instance VI_1 {
state BACKUP
interfaceeth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.220}}
vrrp_instance VI_2 {
state MASTER
interfaceeth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111}
virtual_ipaddress {192.168.1.230}}
# 上記の構成ファイルからわかるように、vrrpインスタンスが実際に追加されます
# 検証プロセスはわずかです
7、 コンパイル時エラーいいえSO_MARK
# コンパイル中にSOが発生しない場合_次のように、MARKエラー
# . /configure
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
...........
checking for nl_socket_alloc in-lnl-3... no
checking for nl_socket_modify_cb in-lnl... no
configure: WARNING: keepalived will be built without libnl support.
checking for kernel version...2.6.18
checking for IPVS syncd support... yes
checking for kernel macvlan support... no
checking whether SO_MARK is declared... no
configure: error: No SO_MARK declaration in headers
# 無効化を増やすことができます-解決するfwmarkパラメーター
- - disable-fwmark compile without SO_MARK support
Recommended Posts