紹介と作品keepalivedの
Webサーバがある場合はkeepalivedのアクションがダウンしている、または作業が失敗し、keepalivedのが検出され、故障したサーバがシステムから削除され、代わりに、サーバーの操作の他のサーバ間、ときサーバー、状態検出サーバーですkeepalivedのは、自動的にサーバーファームにサーバーを参加します、すべての作業の後に自動的に行われた作業は、人間の介入なしに、手動で行う必要が失敗したサーバーの修復です。
原則VRRPプロトコルに基づいてIP / TCPプロトコルスタックのIP層、TCP層とアプリケーション層でのkeepalivedの仕事、。
ネットワーク層(レイヤ3):サービスのアドレスが活性化されていないkeepalivedの定期送信データパケットICMPサーバファームサーバーに(両方とも私たちは通常、pingプログラムを使用)、あなたがIPを見つけた場合、keepalivedのは、このサーバーを報告します障害が発生し、それがサーバーファームから削除されます。
サーバークラスタからkeepalivedの状態のTCPサーバポート正常に動作しているか否かを決定するために、検出keepalivedのポート80が起動していない場合、Webサーバサービスポート80は、典型的には、あるとして、keepalivedのこのサーバ:輸送層(層4)除外。
アプリケーション層(レイヤ5):限り、そのような、またはnginxのスクリプト検出にGETリクエストURLとしてアプリケーションに検出法の数のような、ユーザの検出結果が提供される場合、ユーザによる特定のサービスのための可能な状態の検出は、カスタムスクリプトを追加します与えられた一貫性のない、このサーバーは、サーバーファームから削除しました。
VRRPプロトコルと動作原理
スタンバイモードでは、VRRP(仮想ルータ冗長プロトコル)VRRPは、ネットワーク装置が故障した場合、デバイスはホストとハンドオーバ手順の間の通信は、ユーザが比較的にある場合に影響を与えることなく切り替えることができる、フォールト・トレラント・プロトコルである場合透明。
VRRPルータ機能をオンにした後、それは優先順位によってVRRPグループ内のそれぞれの役割を決定します。優先度の高いルータがアクティブルータになり、優先度が低いスタンバイルータになります。主なルータは、ネットワークのさまざまな機能を実現するために、仮想IPおよび仮想MACを持っており、正常に動作しているバックアップルータに他のルータに通知するために、VRRPアドバタイズメントを送信し、バックアップルータが広告パケットを待つためにタイマーを開始します。プリエンプションモードスタンバイはVRRP広告パケットを受信したとき、その優先順位は、優先度の高いパケットと比較されます。そのパケットの優先度がアクティブルータになると、それ以外の場合は待機します。ノンプリエンプティブモード、限り、アクティブルータに障害が発生すると、バックアップルータの優先度はさらに高く、常にスタンバイ状態を維持します。バックアップルータがVRRPアドバタイズメントを送信するためにマスタルータのタイマーのタイムアウトが届かない場合は考慮されているマスタルータは、選挙ルータ優先マスタに応じて、バックアップグループ内のルータ正しく動作することができませんでした。
- VRRPルータが一意の識別子を有する:VRID、外部フォーマット固有の仮想MACアドレスの0-255ルータ性能の範囲は、アドレスは00-00-5E-00-01- [VRID] ..
- ルータは、複数のバックアップグループに参加することができ、ルータが他のルータはバックアップVRRPグループとして、バックアップグループルータマスターとして使用することができるように、異なるバックアップグループに異なる優先度を有します。
- プレーンテキスト認証とIPヘッダー認証:これは、2つのセキュリティ認証対策を提供します。
VRRPの選挙メカニズム
- 仮想IPの所有者は、同じ仮想ルータとルータのVIPアドレスIPアドレスならば、これは、メインルータによって選択されます。
- 優先度の高い、仮想IPの所有者は、優先度の値を持つルータが選出されていない場合は、0〜255の優先度の範囲。
- 高いとして優先順位は、ルータの大規模な数値IPアドレスが選出された場合、IPアドレスは、大きいです。
からなるkeepalivedの設定
global_defsは、グローバルパラメータを設定するために作られています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
global_defs {
notification_email {
# 接受邮件地址
}
notification_email_from [email protected]
# 邮件头地址
smtp_server 192.168.200.1
# 邮件服务smtp地址
smtp_connect_timeout 30
# smtp连接超时时间
router_id LVS_DEVEL
# 本地机器的id,可以为本地主机名
vrrp_skip_check_adv_addr
# 检查收到的通告中的所有地址会非常耗时,设置此参数就不会检查收到过的主路由器的通告
vrrp_strict
# 严格遵守VRRP协议,开启这个功能会在iptables中添加下面一条规则,导致VIP ping不通
# Chain INPUT (policy ACCEPT)
# target prot opt source destination
# DROP all -- 0.0.0.0/0 172.30.100.200
vrrp_garp_interval 0
# 一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0
vrrp_gna_interval 0
# 一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_iptables
# 设置此项则不会开启任何iptables规则
vrrp_mcast_group4 224.0.0.18
# 主备间通告状态信息的组播地址,通常为224网段
}
|
vrrp_scriptは単に健康テストスクリプトのクラスタ・サービスを定義し、状態監視の結果に基づいて、優先順位の動的調整を可能にする、高可用性nginxのまたは使用haproxy必要を行うこの方法。
1
2
3
4
5
6
7
8
|
vrrp_script chk_nginx {
script
# 添加要定期执行的检测脚本,它的退出代码将被记录在监视它的所有VRRP实例中
interval 2
# 两次脚本调用的间隔,默认为1秒
weight -20
# 如果检测条件成立,权重-20
}
|
vrrp_instance仮想ルーティングインスタンス設定部は、現在の操作の役割またはスタンバイメインkeepalivedのノードを定義する優先度を定義し、現在のノードのように提供される仮想IP情報のために使用されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
vrrp_instance VI_1 {
# 定义虚拟路由器,实例名称VI_1主备必须相同
state MASTER
# 定义此节点为MASTER
interface eth0
# 绑定为当前虚拟路由器使用的物理接口
virtual_router_id 51
# 设置虚拟路由id,范围0~255,主备必须相同
priority 100
# 设置此节点优先级
advert_int 1
# 设置主备节点间vrrp通告状态的时间间隔
authentication {
# 设置主备间验证方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 设置虚拟路由VIP
172.30.200.1
}
track_script {
# 添加监控脚本,脚本名为vrrp_script中定义的脚本
chk_nginx
}
}
|
操作と情報LVSスケジューリングアルゴリズムのVIRTUAL_SERVER定義されたモードは、real_serverバックエンドサーバの実際の定義です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
virtual_server 172.30.200.1 80 {
# 定义虚拟主机IP与端口
delay_loop 6
# 健康状态检测时间间隔
lb_algo rr
# lvs调度算法
lb_kind NAT
# lvs工作类型
persistence_timeout 50
# lvs持久连接超时时间
protocol TCP
# 定义服务协议
sorry_server 172.30.10.14 80
# 当后端所有主机不可达时,就会被定义这台主机,只是为了展示sorry页面
real_server 172.30.10.12 80 {
# 配置后端主机
weight 1
# 调度权重
HTTP_GET {
# 应用层检测
url {
path
/testurl/test
.jsp
# 定义被检测的URL
status_code 200
# 判断上述URL健康状态的响应码
digest 640205b7b0fc66c1ea91c463fac6334d
# 判断上述URL健康状态的内容的hash码
}
connect_timeout 3
# 检测连接的超时时间
nb_get_retry 3
# 重试次数
delay_before_retry 3
# 重试前等待时间
}
TCP_CHECK {
connect_ip 172.30.10.12
# 选择要连接的IP地址。默认值为realserver IP
connect_port 80
# 选择要连接的端口。默认值为realserver PORT
bindto 172.30.10.11
# 用于发起连接的可选源地址
bind_port 10000
# 用于发起连接的可选源端口
connect_timeout 3
# 连接超时时间
}
}
real_server 172.30.10.12 80 {
weight 1
HTTP_GET {
url {
path
/testurl/test
.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
|