GNU/Linux >> Linux の 問題 >  >> Linux

PerconaとKeepalivedを使用してMySQLをマルチマスターする方法

はじめに

このハウツー記事では、負荷分散サービスを使用してシングルサイトマルチマスターMySQLクラスターソリューションをインストールおよび保守する手順について説明します。必要なすべてのコンポーネントがあり、MySQLクラスタリング用のアクティブ/アクティブな高可用性と高スケーラビリティのオープンソースソリューションのサポートが組み込まれているため、ベースのMySQLデータベースプラットフォームとしてPercona XtraDBClusterServerを使用します。 PerconaServerとPerconaXtraBackupをMySQL高可用性ソリューションのGaleraライブラリと単一のパッケージに統合し、費用対効果の高いMySQL高可用性クラスターを作成できるようにします。負荷分散を処理するためにKeepalivedを使用します。

Perconaは、Red Hat/CentOSおよびUbuntu/Debian用のyumおよびaptリポジトリを提供します。これらのリポジトリには、Percona Server、Percona XtraDB、Percona XtraBackup、およびPerconaToolkitが含まれます。

Keepalivedは、LVS(Linux Virtual Server)を介した負荷分散と、VRRP(Virtual Router Redundancy Protocol)を介した高可用性を提供するオープンソースのルーティングソフトウェアです。

前提条件

始める前に、まず次のものを用意する必要があります。

  • 3台のCentOS6.xサーバー。すべて同じローカルエリアネットワーク(LAN)上にあります。 (2つのMySQLノードと1つの負荷分散ノード。)
  • 同期サービスを有効にするには、MySQLサーバーに少なくとも2GBのRAMが必要です。
  • 次のMySQLユーザー用の3つの一意の安全なパスワード:
    • MySQLルートユーザー
    • SST(状態スナップショット転送)サービス同期ユーザー(「sst-sync-user」)
    • キープアライブユーザー(「キープアライブ」)
  • セキュリティで保護されたCentOS6.xファイアウォール構成(この項目はベストプラクティスの推奨事項であり、厳密には必須ではありません。このガイドではiptablesを使用しているため、別のソリューションを使用する場合は、必要に応じて調整してください。

パッケージと構成手順の概要

  • 基本的なPerconaサーバーの準備(ノード#1および#2)
  • MySQLノード#1:構成
  • MySQLノード#2:構成
  • キープアライブノード#3:リポジトリからのインストール
  • キープアライブノード#3 :(オプション)ソースからのコンパイル

セットアップ図

以下は、この記事を読み終えた後の期待される結果の図です。この記事と図で使用されているすべてのIPアドレスは、RFC 5737 –ドキュメント目的でのみ予約されているIPv4アドレスブロックであることに注意してください。

マルチマスターMySQLクラスターネットワーク図

1 –基本的なPerconaサーバーの準備(ノード#1および#2)

まず、rootユーザーアカウントとしてウェブサーバーにログインしていることを確認します。

 sudo su-

次に、Perconaソフトウェアパッケージを簡単にインストールして更新できるように、必要なyumリポジトリをインストールします。

 yum install -y http://linux.mirrors.es.net/fedora-epel/6/i386/epel-release-6-8.noarch.rpmyum install -y http://www.percona.com /downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpmyum clean allyum update 
  • EPEL :Enterprise Linux用の追加パッケージは、Enterprise Linux用の追加パッケージの高品質セットを作成、維持、および管理するFedora SpecialInterestGroupです。
  • ペルコナ :PerconaXtraDBソフトウェアリポジトリ。


次に、Percona XtraDBクラスターサービスと競合するため、SELINUX(Security-Enhanced Linuxカーネル)を無効にします。まず、/etc/selinux/configを開きます 選択したテキストエディタを使用した構成ファイル(この記事ではnanoを使用します)。

 nano / etc / selinux / config 

次に、構成変数SELINUX=enforcingを変更します SELINUX=disabledへ 、以下のように。

#このファイルは、システム上のSELinuxの状態を制御します。#SELINUX =は、次の3つの値のいずれかを取ることができます。ポリシーがロードされます。SELINUX=disabled#SELINUXTYPE =は、次の2つの値のいずれかを取ることができます。 

変更を有効にするためにサーバーを再起動します。

iptablesファイアウォールサービスを実行している場合(ほとんどのCentOS6.xインストールでデフォルトで有効になっています )、MySQL接続を許可し、クラスター化されたノード間でサービスを同期するには、各ノードサーバーで必要なサービスポートを有効にする必要があります。

 iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp -m multiport --dports 4567:4568 -j ACCEPTiptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 4444 -j ACCEPT iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPTservice iptables save 

注: これらのコマンドは、デフォルトのINPUTルールの直後の行番号5に、これらの各ファイアウォールルールを挿入します。この手順の前にiptablesルールに変更を加えた場合は、iptables構成に関連する行番号でこれらのコマンドを調整してください。 。ヘルプや復習が必要な場合は、基本的なIPTablesに関する記事を参照してください。


これで、各MySQLサーバーノードにPerconaXtraDBClusterパッケージをインストールする準備が整いました。

 yum install -y Percona-XtraDB-Cluster-56 

2 – MySQLノード#1:構成

まず、次の手順でMySQLユーザーパスワード(上記の前提条件のセクションで説明)が手元にあることを確認してください。

次に、/etc/my.cnfを作成する必要があります クラスタリング構成設定を含む構成ファイル。

 nano /etc/my.cnf 

次に、これらの基本構成設定をコピーして構成ファイルに貼り付けます。

注: 以下の「クラスタ構成」および「状態スナップショット転送」セクションで、ネットワーク/構成に関連する値に置き換える必要があります。

  • wsrep_cluster_name –クラスター名はすべてのノードで同じである必要がありますが、独自の命名規則に置き換えることができます。
  • wsrep_cluster_address –各参加ノード(このホストを含​​む)のIPアドレスを使用します。その前に「gcomm://」を付ける必要があります。)
  • wsrep_node_address –このホストのIPアドレスを使用します。
  • wsrep_node_name –独自の命名規則に置き換えることができます。
  • wsrep_sst_auth –このフィールドのユーザー名とコロンの後に上記のSSTユーザーアカウントのパスワードを置き換えます。 SSTユーザーの代わりに独自の命名規則を使用することもできます。以下のMySQLにユーザーを追加するときは、必ず同じユーザー名を更新してください。

 [mysqld]#GENERAL #datadir =/ var / lib / mysqluser =mysql#LOGGING ## log-error =/var/log/mysql/error.log# log-queries-not-using-indexes =1# slow-query-log =1#slow-query-log-file =/var/log/mysql/mysql-slow.log#データストレージ#default_storage_engine =InnoDBbinlog_format =ROW#クラスター構成#wsrep_cluster_name =mysql_clstr01wsrep_cluster_address =gcomm://192.0 .2.11,192.0.2.12wsrep_node_address =192.0.2.11wsrep_node_name =mysql-node-01wsrep_provider =/usr/lib64/libgalera_smm.so# STATE SNAPSHOT TRANSFER #wsrep_sst_method =xtrabackup-v2wsrep_sst_auth ="sst-sync-user:<%sst生成されたパスワード%> "#MyISAMデータベースレプリケーション## MyISAMストレージエンジンは、現時点では実験的なサポートしかありません。 ## wsrep_replicate_myisam =1# Settings / Tunning Options #innodb_locks_unsafe_for_binlog =1 innodb_autoinc_lock_mode =2 # innodb_flush_log_at_trx_commit =2# innodb_flush_method =O_DIRECT# innodb_file_per_table =1# innodb_buffer_pool_size =1386971136# innodb_buffer_pool_size =6G# innodb_log_file_size =256M# key_buffer =208045670# max_allowed_pa​​cket =67108864# thread_stack =192K#thread_cache_size =10#query_cache_limit =1M#query_cache_size =16M 

これらの構成設定の多くはコメント化されています。これらは、データベースのパフォーマンスを微調整および/またはデバッグしたい場合に備えて含まれています。完了したら、ファイルを保存して終了します。

これで、クラスター内のプライマリノードを「ブートストラップ」する準備が整いました。

ブートストラップとは、最初のクラスタノードを初期化して実行することを指します。ブートストラップによって、どのノードに初期情報があり、他のすべてのノードが(SSTを介して)同期する必要があるかを定義しています。クラスタ全体のクラッシュ(またはシャットダウン)が発生した場合、プライマリノードのブートストラップは同じように機能します。最初のノードを選択することで、基本的に、続行するデータベースが含まれているクラスタノードを決定します。

クラスターメンバーシップはこの設定では定義されませんが、適切なwsrep_cluster_nameでクラスターに参加するノードによって定義されます。 可変設定。

 /etc/init.d/mysql bootstrap-pxc 

また、サーバーの再起動時にMySQLサービスが自動起動するように設定していることを確認する必要があります。

 chkconfig mysql on 

これで、最初のノードデータベースサービスが動作します。

これで、MySQLデータベースのインストールを保護する準備が整いました。デフォルトでは、MySQLデータベースの初期インストールはパスワードで保護されていません。 MySQLのインストールを保護するために、次のコマンドを実行し、インラインプロンプトに従います。このプロセス中に、rootパスワードの入力を求められます。このプロセスでは、上記のMySQLrootパスワードを使用してください。 Enterキーを押して、残りのプロンプトのデフォルトを受け入れ、安全なインストールを完了することができます。

 / usr / bin / mysql_secure_installation 

データベースサーバーを保護したので、いくつかのユーザーアカウントを設定する必要があります。最初のアカウントはSST同期サービスに使用され、2番目のアカウントはKeepalivedサービスチェックスクリプトに使用されます。

MySQLCLIコンソールにログインします。

 mysql -u root -p 

次に、ユーザーアカウントを作成し、アカウントにセキュリティ権限を付与する必要があります。

 CREATE USER'sst-sync-user' @'localhost' IDENTIFIED BY'<%sst generate password%>'; GRANT RELOAD、LOCK TABLES、REPLICATION CLIENTON*。*TO'sst-sync-user'@ ' localhost'; CREATE USER' keepalived'@'%'IDENTIFIED BY' <%keepalivedgenerated password%>'; FLUSH PRIVILEGES; 

これで、Keepalived負荷分散サーバーから受信したMySQL接続に直接応答するようにこのノードを設定する準備が整いました。直接ルーティングLinux仮想サーバー(LVS)セットアップでは、LVSルーター(キープアライブサーバー)は着信MySQL接続要求を受信し、処理のために適切な実サーバーに送信する必要があります。その場合、実サーバーは直接する必要があります。 応答データを、データを要求しているクライアントに送り返します。直接ルーティングを構成するには、各実サーバーでホストにVIP(仮想IP)アドレスを構成する必要がありますが、ローカルネットワークでARP要求に応答することはできません。

まず、VIPアドレスに対するARP要求に応答しないようにサーバーを設定します。

 echo "net.ipv4.conf.lo.arp_ignore =1">> /etc/sysctl.confecho "net.ipv4.conf.lo.arp_announce =2">> /etc/sysctl.confsysctl -p 

次に、ループバックアダプタにVIPアドレスを作成します。 lo:1を作成します インターフェイス構成ファイルを作成し、起動時に自動起動するように設定します。

 nano / etc / sysconfig / network-scripts / ifcfg-lo:1 

次の構成をインターフェイス構成に貼り付けます。 例のVIPアドレスを使用するアドレスに置き換えてください。

 DEVICE =lo:1BOOTPROTO =staticONBOOT =yesIPADDR =192.0.2.10NETMASK =255.255.255.255 

構成ファイルを保存したら、VIPアドレスを表示できます。

 ifup lo:1 

これで、最初のMySQLクラスターノードが完成しました。

3 – MySQLノード#2:構成

繰り返しになりますが、次の手順では、MySQLユーザーパスワード(上記の前提条件のセクションで説明)が手元にあることを確認してください。

次に、/etc/my.cnfを作成する必要があります クラスタリング構成設定を含む構成ファイル。

 nano /etc/my.cnf 

次に、これらの基本構成設定をコピーして構成ファイルに貼り付けます。

注: 以下の「クラスタ構成」および「状態スナップショット転送」セクションで、ネットワーク/構成に関連する値に置き換える必要があります。

  • wsrep_cluster_name –クラスター名はすべてのノードで同じである必要がありますが、独自の命名規則に置き換えることができます。
  • wsrep_cluster_address –各参加ノード(このホストを含​​む)のIPアドレスを使用します。その前に「gcomm://」を付ける必要があります。)
  • wsrep_node_address –このホストのIPアドレスを使用します。
  • wsrep_node_name –独自の命名規則に置き換えることができます。
  • wsrep_sst_auth –このフィールドのユーザー名とコロンの後に上記のSSTユーザーアカウントのパスワードを置き換えます。 SSTユーザーの代わりに独自の命名規則を使用することもできます。以下のMySQLにユーザーを追加するときは、必ず同じユーザー名を更新してください。

 [mysqld]#GENERAL #datadir =/ var / lib / mysqluser =mysql#LOGGING ## log-error =/var/log/mysql/error.log# log-queries-not-using-indexes =1# slow-query-log =1#slow-query-log-file =/var/log/mysql/mysql-slow.log#データストレージ#default_storage_engine =InnoDBbinlog_format =ROW#クラスター構成#wsrep_cluster_name =mysql_clstr01wsrep_cluster_address =gcomm://192.0 .2.11,192.0.2.12wsrep_node_address =192.0.2.12wsrep_node_name =mysql-node-02wsrep_provider =/usr/lib64/libgalera_smm.so# STATE SNAPSHOT TRANSFER #wsrep_sst_method =xtrabackup-v2wsrep_sst_auth ="sst-sync-user:<%sst生成されたパスワード%> "#MyISAMデータベースレプリケーション## MyISAMストレージエンジンは、現時点では実験的なサポートしかありません。 ## wsrep_replicate_myisam =1# Settings / Tunning Options #innodb_locks_unsafe_for_binlog =1 innodb_autoinc_lock_mode =2 # innodb_flush_log_at_trx_commit =2# innodb_flush_method =O_DIRECT# innodb_file_per_table =1# innodb_buffer_pool_size =1386971136# innodb_buffer_pool_size =6G# innodb_log_file_size =256M# key_buffer =208045670# max_allowed_pa​​cket =67108864# thread_stack =192K#thread_cache_size =10#query_cache_limit =1M#query_cache_size =16M 

これらの構成設定の多くはコメント化されています。これらは、データベースのパフォーマンスを微調整および/またはデバッグしたい場合に備えて含まれています。完了したら、ファイルを保存して終了します。

これで、クラスタの2番目のノードを開始する準備が整いました。また、サーバーの再起動時にMySQLサービスが自動起動するように設定していることを確認する必要があります。

 service mysql start chkconfig mysql on 

最初の起動時に、2番目のサーバーがプライマリノードとの同期プロセスを開始します。数分後、2番目のノードのMySQLサービスが動作可能になります。

上記のプライマリノードと同様に、Keepalived負荷分散サーバーから受信したMySQL接続に直接応答するようにこのノードを設定します。まず、VIPアドレスに対するARP要求に応答しないようにサーバーを設定します。

 echo "net.ipv4.conf.lo.arp_ignore =1">> /etc/sysctl.confecho "net.ipv4.conf.lo.arp_announce =2">> /etc/sysctl.confsysctl -p 

次に、ループバックアダプタにVIPアドレスを作成します。 lo:1を作成します インターフェイス構成ファイルを作成し、起動時に自動起動するように設定します。

 nano / etc / sysconfig / network-scripts / ifcfg-lo:1 

次の設定をインターフェイス設定ファイルに貼り付けます。 例のVIPアドレスを使用するアドレスに置き換えてください。

 DEVICE =lo:1BOOTPROTO =staticONBOOT =yesIPADDR =192.0.2.10NETMASK =255.255.255.255 

構成ファイルを保存したら、VIPアドレスを表示できます。

 ifup lo:1 

これで、2番目のMySQLClusterノードが完成しました。

次に、両方のサーバーが動作可能で同期されていることを検証します。各ノードから、次のコマンドを実行します(MySQLのrootパスワードが必要です):

 mysql -h localhost -u root -p -e "SHOW STATUS;" | grep "wsrep_ready" 

「ON」という応答が返ってきます。他の応答を受け取った場合、そのノードはクラスターのメンバーではありません。

4 –キープアライブノード#3:リポジトリからのインストール

このセクションでは、CentOSリポジトリからのKeepalivedのインストールについて説明します。このバージョンのKeepalivedは、最新バージョンよりも数回遅れています。単純な展開では機能しますが、最新バージョンとそれが提供するサポート修正(たとえば、IPv6とVRRPv3のサポートの改善)が必要になる可能性がある場合は、それらの変更ログを確認してください。ソースから最新バージョンをコンパイルする手順は以下に含まれています。

まず、iptablesファイアウォールサービスを実行している場合(ほとんどのCentOS6.xインストールでデフォルトで有効になっています )、MySQL接続を有効にする必要があります。

 iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPTservice iptables save 

注: これらのコマンドは、デフォルトのINPUTルールの直後の行番号5に、これらの各ファイアウォールルールを挿入します。この手順の前にiptablesルールに変更を加えた場合は、iptables構成に関連する行番号でこれらのコマンドを調整してください。 。ヘルプや復習が必要な場合は、基本的なIPTablesに関する記事を参照してください。

これで、Keepalivedパッケージをインストールできます。

 yum install keepalived 

次に、新しい/etc/keepalived/keepalived.confを作成します。 構成ファイル。インストールされているデフォルトの構成を削除するか、必要に応じて後で参照できるようにバックアップファイルに移動できます。この例では、バックアップファイルに移動します。

 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.baknano /etc/keepalived/keepalived.conf 

次に、以下の構成をコピーしてkeepalived.confに貼り付けます。 ファイル。

以下のIPアドレスの例は、上記の手順で構成した仮想IPアドレスと実際のIPアドレスに必ず置き換えてください。また、必要に応じて、キープアライブユーザーパスワードを上から追加する必要があります。

! keepalivedglobal_defsの構成ファイル{router_idLVS_MYSQL_CLSTR1}###VRRP仮想IP構成vrrp_instanceVI_1{状態MASTERインターフェイスeth0virtual_router_id51優先度100advert_int1認証{auth_typePASSauth_pass keepalived} virtual_ipaddress {192.0.2.10}} ### LVS Configurationvirtual_server {delay_loop 2 ## LBモード:ラウンドロビンlb_algo rr##直接ルーティング応答lb_kindDRプロトコルTCP#すべてのreal_serverがダウンしたときに追加する実サーバー#sorry_server   real_server 192.0.2.11 3306 {weight 10 MISC_CHECK { misc_path "/etc/keepalived/check_scripts/check_db 192.0.2.11 keepalived <%keepalived password%>" misc_timeout 5 misc_dynamic}} real_server 192.0.2.12 3306 {weight 10 MISC_CHECK {misc_path "/etc/keepalived/check_scripts/check_db 192.0.2.12 keepalived <%keepalived passwo rd%> "misc_timeout 5 misc_dynamic}}} 

次に、MISC_CHECKを作成します。 この構成が呼び出すスクリプト(デフォルトでは存在しません)。まず、ディレクトリを作成し、次にスクリプトファイルを作成して、ファイルモードを実行可能ファイルに設定します。

 mkdir -p / etc / keepalived / check_scriptstouch / etc / keepalived / check_scripts / check_dbchmod + x / etc / keepalived / check_scripts / check_dbnano / etc / keepalived / check_scripts / check_db 

次に、以下のbashコードをコピーしてファイルcheck_dbに貼り付けます。 。

#!/ bin / bashmysql_host ="$ {1}"; mysql_user ="$ {2}"; mysql_pass ="$ {3}"; node_response =$(mysql -h $ {mysql_host} -u $ { mysql_user} -p $ {mysql_pass} -e "SHOW GLOBAL VARIABLES;" | grep "wsrep_node_address" | awk'{print $ 2}'); if ["$ {node_response}" =="$ {mysql_host}"] then# echo"ホスト名が一致しました"; exit 0; else#echo"ホスト名が一致しません";出口1;fi

ファイルを保存して終了します。

これで、Keepalivedサービスを開始する準備が整いました。また、システムの再起動時に自動起動するように設定します。

 chkconfig keepalived on / etc / init.d / keepalived start 

キープアライブサーバーが動作可能になりました。キープアライブ構成をカスタマイズする方法の詳細については、ユーザーガイドを確認してください。

これで、接続用の単一のVIPを備えた、完全に機能するマルチマスターMySQLクラスターができました。クライアント接続をVIPアドレス(192.0.2.10)にポイントすると、接続はラウンドロビンモードでクラスター内の各実サーバーに渡されます。

キープアライブをVRRPVIP構成で使用したため、2番目のキープアライブサーバーとしてネットワークに簡単に追加して、ロードバランサーのセットアップとMySQLクラスターの完全な冗長性を提供できます。

キープアライブノード#3 :(オプション)ソースからのコンパイル

最新バージョンのKeepalivedが必要な場合は、ソースからKeepalivedパッケージをビルドするために必要なツールをインストールする必要があります。

 yum install -y kernel-headers kernel-devel gcc make popt-devel openssl-devel ipvsadm net-snmp-devel git mysql; 
  • popt-devel:コマンドライン解析に使用されます
  • OpenSSL:このライブラリはMD5およびSSLサポートに必要です
  • ipvsadm:Linuxカーネルの仮想サーバーテーブルを維持または検査するために使用されます
  • net-snmp:SNMP監視を提供します


依存関係が整ったら、最新バージョンのソースコードをダウンロードする必要があります。最新バージョンはKeepalived.orgダウンロードページで見つけることができます。または、GITリポジトリを使用して最新のビルドをダウンロードすることもできます。このインストールにはGITリポジトリを使用します。

 mkdir -p / tmp / keepalivedgit clone https://github.com/acassen/keepalived.git / tmp / keepalivedcd / tmp / keepalived 

ソースコードをダウンロードして抽出したので、Linuxカーネル用にKeepalivedパッケージをコンパイルする準備が整いました。

 ./ configure --enable-snmpmakemake install 

各コマンドの後で、出力を再確認して、各プロセス中にエラーが発生していないことを確認する必要があります。すべてが正しくコンパイルされると、必要なシンボリックリンクを作成する準備が整います。

 ln -s / usr / local / etc / sysconfig / keepalived / etc / sysconfig / ln -s /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ln -s / usr / local / etc / keepalived / / etc / keepalived 

次に、/etc/init.d/keepalivedを更新する必要があります デーモンの正しいパスを呼び出すための起動スクリプト。

 nano /etc/init.d/keepalived 

ここで、アプリケーションの呼び出し行daemon keepalivedを置き換えます 以下のように、アプリケーションへのフルパスを使用します。

#!/ bin / sh ##キープアライブデーモンの起動スクリプト#... start(){echo -n $ "Starting $ prog:"デーモン/ usr / local / sbin / keepalived $ {KEEPALIVED_OPTIONS} RETVAL =$? echo [$ RETVAL -eq 0] &&touch / var / lock / subsys / $ prog} ... 

これで、Keepalivedデーモンを起動し、上記のように構成を再開できるはずです。

Atlantic.Net

Atlantic.netは、VPSホスティングと、ホスティングパッケージにビジネスに不可欠なマネージドサービスのレイヤーを含むマネージドサーバーホスティングサービスを提供します。詳細については、今すぐお問い合わせください。


Linux
  1. PHP5FastCGIとMySQLを使用してFedora16にlighttpdをインストールする方法

  2. PHP-FPMとMySQLを使用してFedora16「Verne」にNginxをインストールする方法

  3. openSUSE12.1にPHP5FastCGIとMySQLを使用してlighttpdをインストールする方法

  1. MySQLWorkbenchを使用してMySQLでデータベースを作成する方法

  2. Ubuntu11.10にPHP5とMySQLを使用してNginxをインストールする方法

  3. Ubuntu11.04にPHP5とMySQLを使用してLighttpdをインストールする方法

  1. 例を使用してMySQLでインデックスを作成または追加する方法

  2. openSUSE12.1にPHP-FPMとMySQLを使用してNginxをインストールする方法

  3. RsyslogとMySQLを使用してLogAnalyzerをセットアップする方法