PerconaやGaleraなどのマルチマスターMySQLサーバーのバランサーとしてHAProxyを使用する方法についての非常に短い記事。
この指示は、 Acronisの壁にZabbixを実装する過程で生まれたものです。
審査と私の研究の過程で、彼女は自分の生命の権利を証明し、毎日私たちに安全に忠実に奉仕してくれました。
HAProxyに慣れていない人のために、製品の目的についての引用:
プロジェクトの負荷または出席者の増加に伴い、遅かれ早かれ、垂直スケーリング(メモリ、ディスク速度などのサーバーリソースの増加)は特定の制限に反し、目立った増加はありません。 この場合、水平スケーリングが使用されます-新しいサーバーを追加し、それらの間で負荷を再分散します。
電力の増加に加えて、水平スケーリングはシステムに信頼性を追加します。サーバーの1つに障害が発生した場合、負荷は稼働中のサーバーと負荷の間で分散され、アプリケーションが稼働します。
言葉からアクションまで、インストールと構成は非常に簡単です。
前の記事で、私は純粋なCentOS 6.4で実行した予備操作を詳細に説明しました。私の推奨事項もここに関連します。すべてのパッケージは、 前の記事の推奨事項を考慮して示されます。
リポジトリが接続され、システムが最新の状態になっているため、HAProxyインストールに移動します。
#haproxyを置く
yum install haproxy mariadb-client php-mysql php-cli -y
#設定を書く
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old
[root @ rs-haproxy〜]#nano /etc/haproxy/haproxy.cfg
グローバル
デーモン
maxconn 4096
#デバッグ情報を表示したい場合、この項目はコメントする価値があります
静かな
#そしてこの反対、コメント解除
#デバッグ
ユーザーhaproxy
グループhaproxy
#このソケットをzabbixの監視に使用します
stats socket / var / run / haproxy
pidfile /var/run/haproxy.pid
デフォルト
モードhttp
オプションtcplog
グローバルログ
オプションdontlognull再試行3オプションredispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50,000
オプションtcplog
#サーバー上の有効なアドレスとhaproxyがリッスンするポートを指定します
MySQLをリッスンしているアドレスをリッスンします-:3306
モードtcp
#roundrobin-すべてのサーバーに順番に書き込みます。これは読み取りモードでは適切ですが、この方法でデータベースに書き込むと問題が発生する可能性があります
#ラウンドロビンのバランス
#leastconnこのモードは、haproxyをフェールオーバープロキシとして使用する場合に最適に機能します。最後に動作しているサーバーのみを使用します。
バランス最小
#httpchkは、haproxyが各リクエストを送信する前にサーバーの準備状況をチェックするようにします
オプションhttpchk
#以下は、サーバー、ポート、および実行可能性を確認するために接続が行われるポートのリストです。
サーバーアドレスアドレス:3306チェックポート50005インター12000上昇3下降3
サーバーアドレスアドレス:3306チェックポート50005インター12000上昇3下降3
#バックアップフラグ付きのサーバーは、他のサーバーが利用できない場合にのみ使用されます
サーバーアドレスアドレス:3306チェックポート50005インター12000上昇3下降3バックアップ
では、perconaまたはgaleraのサーバーに移りましょう。
#データベースをチェックするメカニズムを設定します。これには、xinetdが必要です
yum install -y xinetd
[root @ xtrabackup-node-01〜]#nano /etc/xinetd.d/mysqlchk
#デフォルト:オン
#説明:mysqlchk
サービスmysqlchk
{
無効化=いいえ
フラグ= REUSE
socket_type =ストリーム
#上記で指定した検証ポート
ポート= 50005
待機=いいえ
ユーザー=誰も
サーバー= / usr / bin / clustercheck
log_on_failure + = USERID
#MySQLサービスステータスチェックが許可されるアドレス
only_from = 10.100.100.0/24
per_source = UNLIMITED
}
#このエントリを追加することは非常に重要です。そうしないと失敗します
root @ xtrabackup-node-01〜]#nano / etc / services
mysqlchk 50005 / tcp#mysqlchk
#スタートアップにサービスを追加して開始する
chkconfig xinetd on
/etc/init.d/xinetd start
#検証ポートへのアクセスを許可
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50005 -j ACCEPT
サービスiptables保存
#clustercheck権限を追加
GRANT PROCESS ON *。* TO 'clustercheckuser' @ 'localhost' IDENTIFIED BY 'clustercheckpassword!';
特権をフラッシュします。
#すべてがうまくいったかどうかを確認してください。
[root @ xtrabackup-node-01〜]#/ usr / bin / clustercheck
HTTP / 1.1 200 OK
コンテンツタイプ:テキスト/プレーン
接続:閉じる
コンテンツの長さ:40
Percona XtraDBクラスターノードが同期されます。
#さて、haproxyホストからの動作を確認しましょう
[root @ rs-haproxy〜]#telnetアドレス50005
住所を試しています...
アドレスに接続しました。
エスケープ文字は「^]」です。
HTTP / 1.1 200 OK
コンテンツタイプ:テキスト/プレーン
接続:閉じる
コンテンツの長さ:40
Percona XtraDBクラスターノードが同期されます。
外部ホストによって接続が閉じられました。
できた! すべてのpercona / galeraノードでこの操作を行う必要があります
ZabbixでのMYSQLのHAProxyモニタリング
#これはスクリプトのメインツールです。インストールしてください
yum install -y socat
#zabbixのsudoをまだ設定していない場合は設定します
usermod -s / bin / bash zabbix
echo 'zabbix ALL =(ALL)NOPASSWD:ALL' >> / etc / sudoers
sed -i 's / Defaults \ requiretty /#Defaults \ requiretty / g' / etc / sudoers
#スクリプト用のフォルダーを作成する
mkdir -p / etc / zabbix / scripts /
chmod 750 / etc / zabbix /スクリプト/
#実際にスクリプト自体
rm -f /etc/zabbix/scripts/haproxy.mysql
nano /etc/zabbix/scripts/haproxy.mysql
if [[ -z $1 || -z $2 ]]; then servers=`echo "show stat" | sudo socat /var/run/haproxy stdio | sed 's/,/\ /g' | awk '{print $2}' | grep -v -e "pxname" -e '^$'` if [[ -n ${servers} ]]; then JSON="{ \"data\":[" for DEV in ${servers}; do JSON=${JSON}"{ \"{#SRV}\":\"${DEV}\"}," done JSON=${JSON}"]}" echo ${JSON} fi exit 0 else server="$2" # echo $server if [ ${1} = "qcur" ]; then # echo $1 echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}"| sed 's/,/\ /g' | awk '{print $3}' exit 0 fi if [ ${1} = "qmax" ]; then echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}" | sed 's/,/\ /g' | awk '{print $4}' exit 0 fi if [ ${1} = "scur" ]; then echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}" | sed 's/,/\ /g' | awk '{print $5}' exit 0 fi if [ ${1} = "smax" ]; then echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}" | sed 's/,/\ /g' | awk '{print $6}' exit 0 fi if [ ${1} = "econ" ]; then echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}" | sed 's/,/\ /g' | awk '{print $14}' exit 0 fi if [ ${1} = "qlimit" ]; then echo "show stat" | sudo socat /var/run/haproxy stdio | grep "MySQL,${server}" | sed 's/,/\ /g' | awk '{print $26}' exit 0 fi fi
スクリプト自体が利用可能なサーバーを検出し、それらをzabbixに渡します
これを確認してください:
[root @ rs-haproxy〜]#echo "show stat" | sudo socat / var / run / haproxy stdio | sed 's /、/ \ / g' | awk '{print $ 2}' | grep -v -e "pxname" -e '^ $'
前線
10.100.100.246
バックエンド
#zabbix-agentの最小設定
エコータイムアウト= 30 >> /etc/zabbix/zabbix_agentd.conf
echo Include = / etc / zabbix / zabbix_agentd.d / >> /etc/zabbix/zabbix_agentd.conf
#新しいスクリプトを実行する権利を適用します
chown zabbix:zabbix -R / etc / zabbix / scripts /
chmod + x /etc/zabbix/scripts/haproxy.mysql
#zabbixにUserParameterを渡します
mkdir -p /etc/zabbix/zabbix_agentd.d/
rm -f /etc/zabbix/zabbix_agentd.d/haproxy.mysql.conf
/etc/zabbix/zabbix_agentd.d/haproxy.mysql.confをタッチします
echo 'UserParameter = haproxy.mysql [*]、/ etc / zabbix / scripts / haproxy.mysql "$ 1" "$ 2"' >> /etc/zabbix/zabbix_agentd.d/haproxy.mysql.conf
次に、スクリプトが正しく機能するかどうかを確認します。
su zabbix
#これが自動サーバー検出の仕組みです
bash-4.1 $ /etc/zabbix/scripts/haproxy.mysql
{「データ」:[{"{#SRV}": "FRONTEND"}、{"{#SRV}": "10.100.100.246"}、{"{#SRV}": "バックエンド"}、]}
#データを要求する
bash-4.1 $ /etc/zabbix/scripts/haproxy.mysql qcur FRONTEND
115
すべて順調に進んでいるようです! サービスを再起動してログを楽しむ
/etc/init.d/zabbix-agent restart && tail -f -n 100 /var/log/zabbix/zabbix_agentd.log
これは、テンプレートがhaproxyの下でどのように見えるかです
ここで、zabbixにインポートするためのテンプレートをダウンロードできます