MyCat 高可用性ロード バランシング クラスターの実装

_MyCat 高可用性ロード バランシング クラスターの実装 (HAProxy+Keepalived+MyCat)

 

 

このコースで対処する質問:

 

1. ソフトウェアバージョン

オペレーティング システム: CentOS-6.6-x86_64
JDK バージョン: jdk1.7.0_72
Keepalived バージョン: keepalived-1.2.18.tar.gz
HAProxy バージョン: haproxy-1.5.16.tar.gz
MyCat バージョン: Mycat-server-1.4-release- 20151019230038-linux.tar.gz
MySQL バージョン: mysql-5.6.26.tar.gz

2. 導入環境の計画

名前 IP CPU名 構成
HAProxy ホスト 1 VIP:192.168.175.220|192.168.175.202 mini2 (デフォルトマスター) -
HAProxy ホスト 2 VIP:192.168.1.220|192.168.175.203 mini3 (デフォルトのバックアップ) -
MyCat ホスト 1 192.168.175.200 華超 -
MyCat ホスト 2 192.168.175.201 ミニ1 -
MySQLマスターノード 192.168.175.200 華超 -
MySQLスレーブノード 192.168.175.201 ミニ1 -

3. MyCat 高可用性ロード バランシング クラスターの展開アーキテクチャ図は次のとおりです。

MySQL 高可用性クラスター分離アーキテクチャ

図による説明:
(1) HAProxy は MyCat マルチノード クラスターの高可用性と負荷分散を実現しますが、HAProxy 自体の高可用性は Keepalived を通じて実現できます。したがって、HAProxy と Keepalived の両方を HAProxy ホストにインストールする必要があります。Keepalived はサーバーの vip (仮想 IP) をプリエンプトする役割を果たします。vip がプリエンプトされた後は、元の IP を介して、または vip を介して直接ホストにアクセスできます (仮想)。
(2) Keepalived は、keepalived.conf 設定の priority 属性によって決定される優先度で vip をプリエンプトします。ただし、一般に、最初に開始されたホスト上の Keepalived サービスは VIP を取得します。それがスレーブであっても、最初に開始されていれば、VIP を取得することもできます (Keepalived のリソースのプリエンプション問題を回避するように注意してください)。
(3) HAProxy は、VIP へのリクエストを MyCat クラスター ノードに分散する役割を果たし、負荷分散の役割を果たします。同時に、HAProxy は MyCat が生きているかどうかも検出でき、HAProxy は生き残っている MyCat にのみリクエストを転送します。
(4) Keepalived+HAProxy 高可用性クラスター内の 1 つのサーバーがダウンした場合、クラスター内の別のサーバー上の Keepalived が直ちに vip を捕捉し、サービスを引き継ぎます。このとき、vip を捕捉した HAProxy ノードは継続できます。サービスを提供するため。
(5) MyCat サーバーがダウンしている場合、HAPorxy はダウンしている MyCat にリクエストを転送しないため、MyCat は引き続き使用できます。要約すると、MyCat の高可用性とロード バランシングは HAProxy によって実装され、HAProxy の高可用性は Keepalived によって実装されます。

4. HAProxy ノード 2 のデプロイメント

HAProxy ホスト 2 (edu-haproxy-02、192.168.175.201)
ピアツーピア展開および対応する構成については、前のコース「高可用性アーキテクチャ - セクション 16 - MyCat クラスター展開 (HAProxy+MyCat)」を参照してください。
構成ファイルの調整に注意してください。
複数のノードをデプロイする場合、haproxy.cfg 構成ファイル内のノードと説明の構成値をそれに応じて調整する必要があります。
HAProxy ノード 1 のステータス情報ページ: http://192.168.175.202:48800/admin-status

HAProxy ノード 2 のステータス情報ページ: http://192.168.175.203:48800/admin-status

5. Keepalived の概要 (公式 Web サイト: http://www.haproxy.org/ )

  Keepalived は、高性能サーバーの高可用性またはホット スタンバイ ソリューションです。Keepalived を使用すると、サーバーの単一点障害を防ぐことができます。Haproxy と連携することで、Web フロントエンド サービスの高可用性を実現できます。
  Keepalived は VRRP プロトコルに基づいており、VRRP プロトコルを使用して高可用性 (HA) を実現します。VRRP (Virtual Router Redundancy Protocol) プロトコルは、ルーターの冗長化を実現するために使用されるプロトコルで、複数のルーター装置を 1 台の装置に仮想化し、外部に仮想ルーター IP (1 つ以上) を提供します。この外部 IP は正常に動作します。これは MASTER であるか、アルゴリズムを通じて選択されます。MASTER は、ARP リクエスト、ICMP、データ転送など、仮想ルータ IP に対するさまざまなネットワーク機能を実装します。他のデバイスは仮想 IP を所有しておらず、ステータスは BACKUP です。MASTER から VRRP ステータス通知情報を受信することを除きます。 、外部通信は行われません、インターネット機能。ホストに障害が発生すると、BACKUP が元の MASTER のネットワーク機能を引き継ぎます。
  VRRP プロトコルは、マルチキャスト データを使用して VRRP データを送信します。VRRP データは、独自のネットワーク カードの MAC アドレスの代わりに、特別な仮想送信元 MAC アドレスを使用してデータを送信します。VRRP の実行中、MASTER ルータのみが VRRP 通知情報を定期的に送信します。 MASTERが正常に動作していることと仮想ルータのIP(グループ)を認識し、BACKUPはVRRPデータの受信のみを行いデータの送信は行わず、一定時間MASTERからの通知情報を受信しない場合、各BACKUPは自身をMASTERとして宣言し、通知情報を送信し、MASTER 選択状態を再実行します。

6. Keepalived (192.168.1.191、192.168.1.192) のインストール

キープアライブのダウンロード アドレス

  1. keepalived (keepalived-1.2.18.tar.gz) を /usr/local/src ディレクトリにアップロードまたはダウンロードします

  2. keepalived をインストールするには Openssl を解凍してインストールする必要があります
    # yum install gcc gcc-c++ openssl openssl-devel
    # cd /usr/local/src
    # tar -zxvf keepalived-1.2.18.tar.gz
    # cd keepalived-1.2.18
    # ./configure --prefix=/usr/local/keepalived
    # make && make install
  1. Linux システム サービスとして keepalived をインストールします:
    keepalived のデフォルト パスがインストールされていないため (デフォルトは /usr/local)、インストールが完了した後、いくつかの作業を行う必要があります。デフォルトの構成ファイルをデフォルトのパスにコピーし
    ます
    # mkdir /etc/keepalived
    # cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    。 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 /usr/sbin/
    # ln -s /usr/local/keepalived/sbin/keepalived /sbin/
    て keepalived サービスの開始を設定します
    # chkconfig keepalived on

  2. Keepalived設定ファイルの変更
    (1) MASTERノード設定ファイル(192.168.175.202)

# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP
router_id edu-haproxy-01 ## 标识本节点的字条串,通常为 hostname
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。
## 如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。
## 如果脚本执行结果非 0,并且 weight 配置的值小于 0,则优先级相应的减少。
## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh" ## 检测 haproxy 状态的脚本路径
interval 2 ## 检测时间间隔
weight 2 ## 如果条件成立,权重+2
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP ## 默认主设备( priority 值大的)和备用设备( priority 值小的)都设置为 BACKUP,
## 由 priority 来控制同时启动情况下的默认主备,否则先启动的为主设备
interface eth1 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth1
virtual_router_id 91 ## 虚拟路由的 ID 号,两个节点设置必须一样,可选 IP 最后一段使用,
## 相同的 VRID 为一个组,他将决定多播的 MAC 地址
priority 120 ## 节点优先级,值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 主设备( priority 值大的)配置一定要加上 nopreempt,否则非抢占也不起作用
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_haproxy ## 检查 HAProxy 服务是否存活
}
## 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.175.220 ## 虚拟 ip,可以定义多个,每行一个
}
}

(2) BACKUP ノード設定ファイル (192.168.175.203):
# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id edu-haproxy-02
}
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 91
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.175.220
}
}

特別な注意: 非プリエンプティブ モードが有効にならない場合、Keepalived の障害ノードが回復した後、再びプリエンプティブ vip につながるため、
vip 切り替えによるフラッシュ切断のリスクがあります (ビデオ説明)。上記の設定によりKeepalivedのノンプリエンプティブモードが設定されており、その設定と注意点は以下の通りです。

(1) マスターデバイスとスレーブデバイスの状態は両方ともBACKUPに設定されます。
(2) mcast_src_ipは設定しないでください。 (マスター デバイスとスレーブ デバイスの両方のローカル IP アドレス)
(3) デフォルトのマスター デバイス (優先度の値が大きいキープアライブ ノード) は nopreempt で設定する必要があります。そうしないと、非プリエンプションは機能しません
。224.0.0.18
(マスターおよびバックアップ ヘルス チェックの通信 IP
# iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
# iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
) (eth0 はホストのネットワーク カード デバイスの名前であり、運用環境のサーバーはマルチキャストやハートビート検出などを処理するために独立したネットワーク カードを使用できます) ファイアウォールを再起動します
# service iptables save
。 :
# service iptables restart

  1. Haproxy ステータス検出スクリプト /etc/keepalived/haproxy_check.sh を作成します (keepalived.conf で既に構成されています)
    スクリプトには次のものが必要です: haproxy が実行を停止した場合は起動を試行し、起動に失敗した場合はローカルの keepalived プロセスを強制終了し、keepalived
    バインドを実行します。仮想 IP は BACKUP マシンに設定されます。内容は以下の通りです。
    # mkdir -p /usr/local/keepalived/log
    # vi /etc/keepalived/haproxy_check.sh
#!/bin/bash
START_HAPROXY="/etc/rc.d/init.d/haproxy start"
STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"
LOG_FILE="/usr/local/keepalived/log/haproxy-check.log"
HAPS=`ps -C haproxy --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check haproxy status" >> $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
$START_HAPROXY >> $LOG_FILE 2>&1
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
echo "start haproxy failed, killall keepalived" >> $LOG_FILE
killall keepalived
fi
fi

保存後、スクリプトの実行許可を与えます。
# chmod +x /etc/keepalived/haproxy_check.sh

  1. 启アニメーション Keepalived
    # service keepalived start
    keepalived の開始: [ OK ]

Keepalived サービス管理コマンド:
停止:service keepalived stop
開始:service keepalived start
再起動:service keepalived restart
ステータスの表示:service keepalived status

7. Keepalived + Haproxy の高可用性テスト

  1. 192.168.1.191 で Haproxy をシャットダウンすると、Keepalived が再起動します。
    # service haproxy stop

  2. 192.168.1.191 で Keepalived をオフにすると、VIP (192.168.1.190) が 192.168.1.192 によってプリエンプトされます。
    # service keepalived stop

    画像.png


    Keepalived が停止されると、192.168.1.191 ノードのネットワーク インターフェイスの VIP (192.168.1.190) が表示されなくなります。

    画像.png


    現時点で VIP に対応する MAC を表示するには、Windows で CMD コマンドを使用して表示します。

    画像.png


    これは、この時点で VIP が物理ホスト 192.168.1.192 に移動し、
    VIP 経由で Haproxy クラスターにアクセスし、そのアクセスも 192.168.1.192
    http://192.168.1.190:48800/admin-statusであることを意味します。

おすすめ

転載: blog.csdn.net/zxl2016/article/details/106272892