Linuxクラスタの概要と高可用性ソフトウェアkeepalivedの構成、テスト
5435 ワード
一、Linuxクラスタの概要
1)、機能によって二つの種類に分けられる:高可用性と負荷均衡高可用性クラスタは通常2台のサーバーであり、1台は仕事であり、もう1台は冗長である.サービスを提供する機械がダウンした場合、冗長は代わりにサービスを提供する.
2)、高可用性を実現するオープンソースソフトウェアは、heartbeat、keepalivedheartbeat:多くのBUGがあり、長い間更新されていないので、お勧めしません.3)、ロードバランシングクラスタは配布器として1台のサーバーが必要で、それはユーザーの要求をバックエンドのサーバーに配布する処理を担当して、このクラスタの中で、配布器のほかに、ユーザーにサービスを提供するサーバーで、これらのサーバーの数は少なくとも2のためにロードバランシングを実現するオープンソースソフトウェアはあります:LVS、keepalived、haproxy、nginx、ビジネスのF 5、Netscalerはコストが高くて、優勢:もっと高い同時量、安定性がよい.
二、高可用性のオープンソースソフトウェアkeepalived紹介
1)、heartbeatはcentos 6にいくつかの問題があり、実験効果に影響するため、keepalivedを使用して高可用性クラスタを実現した.2)、keepalivedはVRRP(Virtual Router Redundancy Protocl)によって高可用性を実現する.3)、このプロトコルでは複数の機能が同じルータを1つのグループに構成し、このグループにはmasterロール1つとN(N>=1)個のbackupロールがあります.masterは、VRRPプロトコルのパケットをマルチキャストで各backupに送信し、backupがmasterから送信されたVRRPパケットを受信できない場合、masterがダウンタイムしたとみなされます.この場合、各backupの優先度に基づいて、誰が新しいマスターになるかを決定する必要がある.4)、Keepalivedにはcore、check、vrrpの3つのモジュールが必要です.coreモジュールはkeepalivedの核心であり、メインプロセスの起動、メンテナンス、グローバルプロファイルのロードと和解を担当する.checkモジュールは健康検査を担当する.vrrpモジュールはVRRPプロトコルを実装するために使用される.
三、keepalivedで高可用性を構成する
1)、2台の機械aとbを用意し、aをmasterとし、bをbackupとする.両機器ともyum install-y keepalived 2を実行し、両機器ともnginxをインストールし、nginxをインストールする:yum install-y nginxをインストールする(どのサービスが高可用性を実現するかは我々の実験ではnginxを使用し、nginxは負荷均衡を行うことができる)3)、プロファイル設定vipを100編集a上のkeepalivedプロファイルに変更する[root@a ~]# >/etc/keepalived/keepalived.conf#クリアの内容は以下の内容を加えます. global_defs { #
notification_email { #
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { #
script "/usr/local/sbin/check_ng.sh" #shell
interval 3 # 3S
}
vrrp_instance VI_1 { # master
state MASTER
interface ens33 #
virtual_router_id 51 # ID
priority 100 #
advert_int 1 #
authentication {
auth_type PASS #
auth_pass aminglinux>com
}
virtual_ipaddress { # IP , 。
192.168.188.100
}
track_script { #
chk_nginx
}
}
コンテンツはhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf取得
aマシンのモニタリングスクリプトの編集:vi/usr/local/sbin/check_ng.shは以下の内容を定める. #!/bin/bash
# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
内容はhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.shチェックスクリプト755へのアクセス権の取得:chmod 755/usr/local/sbin/check_ng.shsystemctl start keepalived aマシン起動サービスpa aux|grep keepそのログファイルを起動するかどうかを確認します:/var/logs/messagesそれからそのIPアドレスを確認します:ip addファイアウォールが開いているかどうかを確認し、私たちはそれらを閉じる必要があります.iptables -nvLgetenforcesystemctl stop firewalld
4)、Bマシンからプロファイルを編集するように構成する:元のkeepalivedをクリアする.confファイル内容:>/etc/keepalived/keepalived.conf編集:vi/etc/keepalived/keepalived.confは以下の内容を追加します.global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.188.100
}
track_script {
chk_nginx
}
}
内容はhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf私たちが修正しなければならない点は、重みを90に変更し、仮想IPをホストと同じ100に変更し、idを維持することです.
Bマシンモニタスクリプト、vi/usr/local/sbin/check_を上から編集ng.shは以下の内容を加える.# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
コンテンツhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.shスクリプト755へのアクセス権Bを取得してサービスsystemctl start keepalivedps aux|grep keepも起動する
6)、yumでインストールnginxアクセスページディレクトリは:/usr/share/nginx/html/index.html
四、高可用性テスト
まず、curl-Iでnginxバージョンを表示できるなど、2台のマシンのnginxの違いを特定します.
テスト1:masterのnginxサービスをオフにします.
keepalivedサービスを開始すると、nginxはオフになりません.検出スクリプト:テスト2:masterにiptablesルールを追加iptables-I OUTPUT-p vrrp-j DROPはマシンの切替サービステストにテストできません3:masterのkeepalivedサービスを閉じてIP 100にアクセスし、直接ジャンプしました.テスト4:master上のkeepalivedサービスを起動してIP 100にアクセスし、直接プライマリにジャンプします.
nginx以外は高可用性を構成できますが、mysqlなどは可能です.
1)、heartbeatはcentos 6にいくつかの問題があり、実験効果に影響するため、keepalivedを使用して高可用性クラスタを実現した.2)、keepalivedはVRRP(Virtual Router Redundancy Protocl)によって高可用性を実現する.3)、このプロトコルでは複数の機能が同じルータを1つのグループに構成し、このグループにはmasterロール1つとN(N>=1)個のbackupロールがあります.masterは、VRRPプロトコルのパケットをマルチキャストで各backupに送信し、backupがmasterから送信されたVRRPパケットを受信できない場合、masterがダウンタイムしたとみなされます.この場合、各backupの優先度に基づいて、誰が新しいマスターになるかを決定する必要がある.4)、Keepalivedにはcore、check、vrrpの3つのモジュールが必要です.coreモジュールはkeepalivedの核心であり、メインプロセスの起動、メンテナンス、グローバルプロファイルのロードと和解を担当する.checkモジュールは健康検査を担当する.vrrpモジュールはVRRPプロトコルを実装するために使用される.
三、keepalivedで高可用性を構成する
1)、2台の機械aとbを用意し、aをmasterとし、bをbackupとする.両機器ともyum install-y keepalived 2を実行し、両機器ともnginxをインストールし、nginxをインストールする:yum install-y nginxをインストールする(どのサービスが高可用性を実現するかは我々の実験ではnginxを使用し、nginxは負荷均衡を行うことができる)3)、プロファイル設定vipを100編集a上のkeepalivedプロファイルに変更する[root@a ~]# >/etc/keepalived/keepalived.conf#クリアの内容は以下の内容を加えます. global_defs { #
notification_email { #
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { #
script "/usr/local/sbin/check_ng.sh" #shell
interval 3 # 3S
}
vrrp_instance VI_1 { # master
state MASTER
interface ens33 #
virtual_router_id 51 # ID
priority 100 #
advert_int 1 #
authentication {
auth_type PASS #
auth_pass aminglinux>com
}
virtual_ipaddress { # IP , 。
192.168.188.100
}
track_script { #
chk_nginx
}
}
コンテンツはhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf取得
aマシンのモニタリングスクリプトの編集:vi/usr/local/sbin/check_ng.shは以下の内容を定める. #!/bin/bash
# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
内容はhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.shチェックスクリプト755へのアクセス権の取得:chmod 755/usr/local/sbin/check_ng.shsystemctl start keepalived aマシン起動サービスpa aux|grep keepそのログファイルを起動するかどうかを確認します:/var/logs/messagesそれからそのIPアドレスを確認します:ip addファイアウォールが開いているかどうかを確認し、私たちはそれらを閉じる必要があります.iptables -nvLgetenforcesystemctl stop firewalld
4)、Bマシンからプロファイルを編集するように構成する:元のkeepalivedをクリアする.confファイル内容:>/etc/keepalived/keepalived.conf編集:vi/etc/keepalived/keepalived.confは以下の内容を追加します.global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.188.100
}
track_script {
chk_nginx
}
}
内容はhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf私たちが修正しなければならない点は、重みを90に変更し、仮想IPをホストと同じ100に変更し、idを維持することです.
Bマシンモニタスクリプト、vi/usr/local/sbin/check_を上から編集ng.shは以下の内容を加える.# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
コンテンツhttps://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.shスクリプト755へのアクセス権Bを取得してサービスsystemctl start keepalivedps aux|grep keepも起動する
6)、yumでインストールnginxアクセスページディレクトリは:/usr/share/nginx/html/index.html
四、高可用性テスト
まず、curl-Iでnginxバージョンを表示できるなど、2台のマシンのnginxの違いを特定します.
テスト1:masterのnginxサービスをオフにします.
keepalivedサービスを開始すると、nginxはオフになりません.検出スクリプト:テスト2:masterにiptablesルールを追加iptables-I OUTPUT-p vrrp-j DROPはマシンの切替サービステストにテストできません3:masterのkeepalivedサービスを閉じてIP 100にアクセスし、直接ジャンプしました.テスト4:master上のkeepalivedサービスを起動してIP 100にアクセスし、直接プライマリにジャンプします.
nginx以外は高可用性を構成できますが、mysqlなどは可能です.
global_defs { #
notification_email { #
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { #
script "/usr/local/sbin/check_ng.sh" #shell
interval 3 # 3S
}
vrrp_instance VI_1 { # master
state MASTER
interface ens33 #
virtual_router_id 51 # ID
priority 100 #
advert_int 1 #
authentication {
auth_type PASS #
auth_pass aminglinux>com
}
virtual_ipaddress { # IP , 。
192.168.188.100
}
track_script { #
chk_nginx
}
}
#!/bin/bash
# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.188.100
}
track_script {
chk_nginx
}
}
# ,
d=`date --date today +%Y%m%d_%H:%M:%S`
# nginx
n=`ps -C nginx --no-heading|wc -l`
# 0, nginx, nginx ,
# 0, nginx , keepalived
if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
まず、curl-Iでnginxバージョンを表示できるなど、2台のマシンのnginxの違いを特定します.
テスト1:masterのnginxサービスをオフにします.
keepalivedサービスを開始すると、nginxはオフになりません.検出スクリプト:テスト2:masterにiptablesルールを追加iptables-I OUTPUT-p vrrp-j DROPはマシンの切替サービステストにテストできません3:masterのkeepalivedサービスを閉じてIP 100にアクセスし、直接ジャンプしました.テスト4:master上のkeepalivedサービスを起動してIP 100にアクセスし、直接プライマリにジャンプします.
nginx以外は高可用性を構成できますが、mysqlなどは可能です.