1.信頼性の高いコンセプト
HA(ご利用可能)、高可用性クラスタは、一般に、2つの以上のノードがあり、アクティブノードとバックアップ・ノードに、有効なビジネス継続性ソリューションです。
2.信頼性の高いソフトウェアkeepalivedの
キープアライブは、通常で展開、高い信頼性を実現することができるソフトウェアである2 、サーバー上の主なものに分かれています。keepalivedのは、一旦、機械上の検出処理を行うことができるマスターは、プロセスの問題を検出し、に自分自身を切り替えますバックアップし、別のノード通知に切り替え、状態マスター状態。
3.keepalivedインストール
ダウンロード keepalivedの公式ウェブサイト:のhttp://keepalived.org
keepalivedのにエキスは/ usr / local / srcにするディレクトリ
タール-zxvf keepalivedの-1.2.19.tar.gz -Cは/ usr / local / srcに
/usr/local/src/keepalived-1.2.19 ディレクトリ
CD /usr/local/src/keepalived-1.2.19
ようになった設定
./configure --prefix =は/ usr / local / keepalivedの
#コンパイルとインストール
作る&& make installを
4. keepalivedのサービスは、(serviceコマンドで起動することができます)システム内に追加しました
実行可能ファイルをコピーします。
CPは/ usr / local / keepalivedの/ sbinに/ keepalivedのは/ usr / sbinに/
init.dディレクトリのファイルをにコピーさなどの下に、ブートエントリを追加します
CP /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
keepalivedのは、うにファイルをコピーするなどの下で
CPは/ usr / local / keepalivedのの/ etc /のsysconfig / keepalivedのは/ etc /のsysconfig /
作成 keepalivedのフォルダを
ます。mkdir -pの/ etc / keepalivedの
keepalivedのコピーへの設定ファイルなどの下で
CP /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
実行権限を追加します。
chmodの+ X /etc/init.d/keepalived
## 以上のワンタイムコマンド実行のすべて:
CPは/ usr / local / keepalivedの/ sbinに/ keepalivedのは/ usr / sbinに/ CP /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived CPは/ usr / local / keepalivedのの/ etc /のsysconfig / keepalivedのは/ etc /のsysconfig / ます。mkdir -pの/ etc / keepalivedの CP /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf chmodの+ X /etc/init.d/keepalived chkconfigを--add keepalivedの chkconfigのは、上のkeepalivedの |
追加 keepalivedの自動的にアクティブ化を起動します
chkconfigを--add keepalivedの
chkconfigのは、上のkeepalivedの
5.仮想IP keepalivedのを設定
設定ファイルを変更します。 /etc/keepalived/keepalived.confを
#MASTERのノード
global_defs { } vrrp_instance VI_1 { 状態MASTER#が指定Aがノードにスペアノード上に設けられている主ノードであるBACKUP へ インターフェイスeth0の#バインド仮想IPのネットワーク・インタフェース #VRRPがvirtual_router_id 51 に配置されたグループ名は、各ノードが同じに属することを示すために同じ2つのノードでなければならないのVRRP グループ 優先順位100#の優先順位(マスタノード1から254までの間)、ノードは待機ノードの優先度よりも低くなければなりません advert_int 1つの#マルチキャスト送信間隔(ハートビート検出間隔)、同じ2つのノードが提供されなければなりません 認証{#提供された認証情報、両方のノードが同意しなければなりません AUTH_TYPE PASS auth_pass 1111 } virtual_ipaddress { #指定虚拟IP(用户可见的ip地址), 两个节点设置必须一样 192.168.33.60/24 #如果两个nginx的ip分别是192.168.33.61,,...62,则此处的虚拟ip跟它俩同一个网段即可 } } |
#BACKUP节点
global_defs { } vrrp_instance VI_1 { state BACKUP # 备用节点 interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.33.60/24 } } |
#分别启动两台机器上的keepalived
service keepalived start
测试:
杀掉master上的keepalived进程,你会发现,在slave机器上的eth0网卡多了一个ip地址
查看ip地址的命令: ip addr
6.配置keepalived对管理的nginx进行心跳检测
原理:
Keepalived并不跟nginx耦合,它俩完全不是一家人
但是keepalived提供一个机制:让用户自定义一个shell脚本去检测用户自己的程序,返回状态给keepalived就可以了
#MASTER节点
global_defs { }
vrrp_script chk_health { script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" # 自定义脚本内容 返回1表示nginx挂了,返回0表示没挂 interval 1 #每隔1秒执行上述的脚本,去检查用户的程序ngnix weight -2 # 如果本机器的nginx挂了,就降低自己的权重2 }
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 1 priority 100 advert_int 2 authentication { auth_type PASS auth_pass 1111 }
track_script { chk_health # 用户自定义的脚本名 }
virtual_ipaddress { 10.0.0.10/24 }
notify_master "/usr/local/keepalived/sbin/notify.sh master" # 当切换到master状态时,要执行的脚本 notify_backup "/usr/local/keepalived/sbin/notify.sh backup" # 当切换到backup状态时,要执行的脚本 notify_fault "/usr/local/keepalived/sbin/notify.sh fault" # 当出现异常时,要执行的脚本 } |
#添加切换通知脚本
vi /usr/local/keepalived/sbin/notify.sh
#!/bin/bash
case "$1" in master) /usr/local/nginx/sbin/nginx exit 0 ;; backup) /usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx exit 0 ;; fault) /usr/local/nginx/sbin/nginx -s stop exit 0 ;; *) echo 'Usage: notify.sh {master|backup|fault}' exit 1 ;; esac |
#添加执行权限
chmod +x /usr/local/keepalived/sbin/notify.sh
global_defs { }
vrrp_script chk_health { script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" interval 1 weight -2 }
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 }
track_script { chk_health }
virtual_ipaddress { 10.0.0.10/24 }
notify_master "/usr/local/keepalived/sbin/notify.sh master" notify_backup "/usr/local/keepalived/sbin/notify.sh backup" notify_fault "/usr/local/keepalived/sbin/notify.sh fault" } |
#在第二台机器上添加notify.sh脚本
#分别在两台机器上启动keepalived
service keepalived start