長期的に操作をスムーズにするために必要なパッケージとツールを使用して、実稼働MySQLサーバーをインストールおよび構成することは非常に重要です。問題の特定と解決に役立つ必要なツールがサーバーにインストールされていないため、運用サーバー(特にパブリックインターネットアクセスのないサーバー)のトラブルシューティングや調整が一般的に困難な場合が多くあります。
この2部構成のブログシリーズでは、システム管理者の観点から、実稼働環境で使用するためにMySQLサーバーを準備する方法に関する9つのヒントとコツを紹介します。このブログ投稿のすべての例は、CentOS7で実行されている2ノードのマスタースレーブMySQLレプリケーションセットアップに基づいています。
MySQLまたはMariaDBクライアントおよびサーバーパッケージのインストール後、MySQL / MariaDBサーバーに、これから行われるすべての管理、管理、および監視操作に対処するために必要なすべてのツールを準備する必要があります。サーバー。本番環境でMySQLサーバーをロックダウンすることを計画している場合、インターネットに接続せずにすべてを手動でインストールするのは少し難しくなります。
Linux用のMySQL/MariaDBサーバーにインストールする必要のある重要なパッケージのいくつか:
- Percona Xtrabackup /MariaDBBackup-データベースサーバーのノンブロッキング物理バックアップ。
- ntp/ntpdate-同期サーバーの時刻。
- pv-パイプラインを介してデータを監視します。スロットルにも使用できます。
- socatまたはnetcat-データストリーミングツール。ストリーミングバックアップに適しています。
- net-tools-Linux用のネットワークデバッグツールのコレクション。
- bind-utils-Linux用のDNSデバッグツールのコレクション。
- sysstat-Linux用のパフォーマンス監視ツールのコレクション。
- telnet-サービスの到達可能性をチェックするTelnetクライアント。
- mailx/mailutils-MTAクライアント。
- openssl-トランスポート層セキュリティ(TLS)およびセキュアソケット層(SSL)プロトコル用のツールキット。
- unzip-解凍ツール。
- htop-ホスト監視ツール。
- innotop-MySQL監視ツール。
- vim-構文が強調表示されたテキストエディタ(または任意のテキストエディタ)。
- python-setuptools-Pythonパッケージマネージャー。
- lm_sensors/ipmitool-サーバーコンポーネントの温度を確認します。ベアメタルサーバーのみ。
提案されたパッケージのいくつかは、CentOS用のEPELのようなデフォルト以外のパッケージリポジトリでのみ利用可能であることに注意してください。したがって、YUMベースのインストールの場合:
$ yum install epel-release
$ yum install -y wget ntp pv socat htop innotop vim mailx bind-utils net-tools telnet sysstat openssl python-setuptools lm_sensors ipmitool
APTベースのインストールの場合:
$ apt-get install ntp pv socat htop innotop vim easy_install mailutils bind-utils sysstat net-tools telnet openssl lm_sensors ipmitool
MySQLコマンドラインインターフェイスの場合、オートコンプリートと構文の強調表示を備えた、mycliなどの標準の「mysql」コマンドラインクライアント以外の別のツールを使用できます。パッケージをインストールするには、pip(Pythonパッケージマネージャー)を使用できます:
$ pip install mycli
mycliを使用すると、次のスクリーンショットに示すように、本番サーバーを処理する際の視覚化が向上し、ヒューマンエラーのベクトルを減らすことができます。
この部分はそもそも不要に見えますが、おそらく制作でばかげた間違いをすることからあなたを救うでしょう。人間として、特に本番サーバーがダウンしているときなど、激しい瞬間に破壊的なコマンドを実行すると、エラーが発生する傾向があります。
優れたPS1プロンプトは、SysAdminsが現在処理している環境、サーバー、および現在のパス。その結果、より注意深く、コマンドを実行するのに正しいパス/サーバー/ユーザーにあるかどうかを常に知ることができます。
これを実現するには、PS1(プライマリプロンプト)構成を説明する行を見つけます。通常は/ etc/bashrcの41行目です。
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[email protected]\h \W]\\$ "
そして、次の行に置き換えます:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[36m\]\u\[\e[m\]@\[\e[32m\]\h\[\e[m\]\[\e[31;47m\]Production\[\e[m\]: \[\e[33m\]\w\[\e[m\]]$ "
ターミナルからログアウトし、再度ログインします。ターミナルに次のようなものが表示されるはずです:
上のスクリーンショットに示されているように、現在のユーザー(青)、サーバーのホスト名(緑)、生産層(赤で太字、背景は白)、および現在のディレクトリのフルパス(黄色)は、重要な情報をさまざまな色で簡単に区別できる現在のセッションのより良い要約を提供します。
この無料のオンラインツールを使用して、好みに合わせてbashプロンプトをカスタマイズできます。
MOTD
MySQLやMariaDBレプリケーションなど、複数の役割を持つデータベースクラスターを管理している場合、ホストの1つを直接管理するときに、追加のチェックを実行して確認する必要があるため、常にこのような不安を感じることがよくあります。私たちがいるノードは、私たちが本当に管理したいノードです。データベースクラスターがスケールアウトするにつれて、レプリケーショントポロジはより複雑になる傾向があり、中間マスター、binlogサーバー、半同期レプリケーションを備えたバックアップマスター、読み取り専用スレーブ、バックアップ検証サーバーなど、クラスター内に多くの役割が存在する可能性があります。
>その特定のサーバーにいるときはいつでもデータベースの状態の要約を取得できれば、何を処理するのかを知ることができれば、はるかに良いでしょう。 LinuxのMessageofthe Day(MOTD)を利用して、サーバーにログインするたびにこの動作を自動化できます。デフォルトの/etc/ motdを使用することは、静的コンテンツにのみ有効です。これは、MySQLサーバーの現在の状態を報告する場合に実際に必要なことではありません。
同様の結果を達成するために、単純なBashスクリプトを使用して、MySQL / MariaDBサーバーを要約する意味のあるMOTD出力を生成できます。例:
$ vim ~/.motd.sh
#!/bin/bash
# Auto-generate MOTD for MySQL/MariaDB Replication
# .motd.sh, to be executed under ~/.bash_profile
#####
# Preferred role of the node, pick one
#PREFER_ROLE='Slave'
PREFER_ROLE='Master'
#####
HOSTNAME=$(hostname)
UPTIME=$(uptime -p)
MYSQL_COMMAND='mysql --connect-timeout=2 -A -Bse'
MYSQL_READONLY=$(${MYSQL_COMMAND} 'SHOW GLOBAL VARIABLES LIKE "read_only"' | awk {'print $2'})
TIER='Production'
MAIN_IP=$(hostname -I | awk {'print $1'})
CHECK_MYSQL_REPLICATION=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$')
MYSQL_MASTER=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | grep Master_Host | awk {'print $2'})
# The following requires show_compatibility_56=1 for MySQL 5.7 and later
MYSQL_UPTIME=$(${MYSQL_COMMAND} 'SELECT TIME_FORMAT(SEC_TO_TIME(VARIABLE_VALUE ),"%Hh %im") AS Uptime FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME="Uptime"')
# coloring
bold=$(tput bold)
red=$(tput setaf 1)
green=$(tput setaf 2)
normal=$(tput sgr0)
MYSQL_SHOW=1
if [ $MYSQL_READONLY == 'ON' ]; then
CURRENT_MYSQL_ROLE='Slave'
if ${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$' &>/dev/null ; then
lag=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Seconds_Behind_Master:' | awk {'print $2'})
if [ $lag -eq 0 ]; then
REPLICATION_STATUS="${green}Healthy "
else
if [ $lag == 'NULL' ]; then
REPLICATION_STATUS=${red}Unhealthy
else
REPLICATION_STATUS="${red}Lagging ${lag}s"
fi
fi
else
REPLICATION_STATUS=${red}Unhealthy
fi
elif [ $MYSQL_READONLY == 'OFF' ]; then
CURRENT_MYSQL_ROLE='Master'
SLAVE_HOSTS=$(${MYSQL_COMMAND} 'SHOW SLAVE HOSTS' | awk {'print $1'})
else
MYSQL_SHOW=0
fi
if [ $TIER == 'Production' ]; then
TIER=${green}Production
fi
if [ $PREFER_ROLE == $CURRENT_MYSQL_ROLE ]; then
MYSQL_ROLE=${green}$CURRENT_MYSQL_ROLE
else
MYSQL_ROLE=${red}$CURRENT_MYSQL_ROLE
fi
echo
echo "HOST INFO"
echo "========="
echo -e " Hostname : ${bold}$HOSTNAME${normal} \t Server Uptime : ${bold}$UPTIME${normal}"
echo -e " IP Address : ${bold}$MAIN_IP${normal} \t Tier : ${bold}$TIER${normal}"
echo
if [ $MYSQL_SHOW -eq 1 ]; then
echo "MYSQL STATE"
echo "==========="
echo -e " Current role : ${bold}$MYSQL_ROLE${normal} \t\t Read-only : ${bold}$MYSQL_READONLY${normal}"
echo -e " Preferred role : ${bold}$PREFER_ROLE${normal} \t\t DB Uptime : ${bold}$MYSQL_UPTIME${normal}"
if [ $CURRENT_MYSQL_ROLE == 'Slave' ]; then
echo -e " Replication state : ${bold}$REPLICATION_STATUS${normal} \t Current Master : ${bold}$MYSQL_MASTER${normal}"
else
echo -e " Slave Hosts(s) ID : "
for i in $SLAVE_HOSTS; do
echo -e " - ${bold}$i${normal} \t"; done
fi
echo
fi
8行目または9行目でマスターまたはスレーブのいずれかのMySQLロールを選択し、スクリプトを保存します。このスクリプトでは、データベースユーザーの資格情報を保存するためにMySQLオプションファイルが必要なので、最初に作成する必要があります:
$ vim ~/.my.cnf
そして、次の行を追加します:
[client]
user=root
password='YourRootP4ssw0rd'
$ chmod 755 ~/.motd.sh
実行可能スクリプトが正しい出力を生成するかどうかをテストします:
$ ~/.motd.sh
出力が良好(エラーや警告なし)の場合は、スクリプトを〜/ .bash_profileに追加して、ユーザーがログインしたときに自動的に読み込まれるようにします。
$ whoami
root
$ echo '~/.motd.sh' >> ~/.bash_profile
ターミナルに再ログインすると、マスターに次のようなメッセージが表示されます。
スレーブ上では、次のように表示されます。
>このスクリプトは、単純なMySQL/MariaDB用に特別に作成されていることに注意してください-ティアマスタースレーブレプリケーション。より複雑なセットアップを使用している場合、またはGalera Cluster、Group Replication、NDB Clusterなどの他のMySQLクラスタリングテクノロジーを使用する場合は、おそらくスクリプトを変更する必要があります。アイデアは、ログインしたときにデータベースノードのステータスと情報を取得して、作業中のデータベースサーバーの現在の状態を認識できるようにすることです。
この部分は、多くのシステム管理者によって一般的に無視されています。サーバーが過熱したときに予期しない動作をした場合に大きな驚きを感じたくないので、温度を監視することは非常に重要です。物理サーバーは通常、ボックス内に接着された何百もの電子部品で構成されており、温度変化に敏感です。 1つの冷却ファンが故障すると、CPU温度が急上昇してハード制限に達する可能性があります。これにより、最終的にCPUクロックが抑制され、データ処理パフォーマンス全体に影響を及ぼします。
この目的のためにlm-sensorsパッケージを使用できます。インストールするには、次のようにします。
$ yum install lm-sensors # apt-get install lm-sensors for APT
次に、sensors-detectプログラムを実行して、lm_sensorsを最も効果的に使用するためにロードする必要のあるカーネルモジュールを自動的に決定します。
$ sensors-detect
すべての質問に回答します(通常、提案されたすべての回答を受け入れるだけです)。仮想マシンやコンテナなどの一部のホストは、このモジュールをサポートしていません。センサーは実際にはホスト(ベアメタル)レベルである必要があります。詳細については、このリストを確認してください。
次に、sensorsコマンドを実行します:
$ sensors
i350bb-pci-0203
Adapter: PCI adapter
loc1: +53.0°C (high = +120.0°C, crit = +110.0°C)
power_meter-acpi-0
Adapter: ACPI interface
power1: 4.29 MW (interval = 1.00 s)
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +55.0°C (high = +85.0°C, crit = +95.0°C)
Core 0: +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 1: +51.0°C (high = +85.0°C, crit = +95.0°C)
Core 2: +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 3: +51.0°C (high = +85.0°C, crit = +95.0°C)
Core 4: +49.0°C (high = +85.0°C, crit = +95.0°C)
Core 5: +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 8: +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 9: +49.0°C (high = +85.0°C, crit = +95.0°C)
Core 10: +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 11: +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 12: +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 13: +49.0°C (high = +85.0°C, crit = +95.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Package id 1: +53.0°C (high = +85.0°C, crit = +95.0°C)
Core 0: +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 1: +48.0°C (high = +85.0°C, crit = +95.0°C)
Core 2: +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 3: +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 4: +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 5: +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 8: +47.0°C (high = +85.0°C, crit = +95.0°C)
Core 9: +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 10: +45.0°C (high = +85.0°C, crit = +95.0°C)
Core 11: +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 12: +46.0°C (high = +85.0°C, crit = +95.0°C)
Core 13: +46.0°C (high = +85.0°C, crit = +95.0°C)
上記の結果は、すべてのCPUコアとともに全体的なCPU温度を示しています。サーバーコンポーネントの全体的な状態を確認するために使用できるもう1つのツールは、ipmitoolです。インストールするには、次のようにします。
$ yum -y install ipmitool
次のコマンドを実行すると、サーバー内の物理コンポーネントの全体的な状態を確認できます。
$ ipmitool sdr list full
Inlet_Temp | 20 degrees C | ok
PCIe_Inlet_Temp | 37 degrees C | ok
Outlet_Temp | 20 degrees C | ok
CPU0_VR_Temp | 39 degrees C | ok
CPU1_VR_Temp | 41 degrees C | ok
CPU0_Temp | 55 degrees C | ok
CPU1_Temp | 52 degrees C | ok
PCH_Temp | 58 degrees C | ok
DIMMG0_Temp | 35 degrees C | ok
DIMMG1_Temp | 32 degrees C | ok
PSU0_Temp | 0 degrees C | ok
PSU1_Temp | 0 degrees C | ok
SYS_3.3V | 3.30 Volts | ok
SYS_5V | 5 Volts | ok
SYS_12V | 12.10 Volts | ok
CPU0_VCORE | 1.79 Volts | ok
CPU1_VCORE | 1.79 Volts | ok
CPU0_DDR_VDD | 1.23 Volts | ok
CPU1_DDR_VDD | 1.23 Volts | ok
SYS_FAN1_Speed | 4018 RPM | ok
SYS_FAN2_Speed | 4116 RPM | ok
SYS_FAN3_Speed | 4116 RPM | ok
SYS_FAN4_Speed | 4116 RPM | ok
SYS_FAN5_Speed | 4018 RPM | ok
SYS_FAN6_Speed | 4116 RPM | ok
SYS_FAN7_Speed | 4018 RPM | ok
SYS_FAN8_Speed | 4116 RPM | ok
SYS_FAN9_Speed | 4018 RPM | ok
SYS_FAN10_Speed | 4116 RPM | ok
SYS_FAN11_Speed | 4116 RPM | ok
SYS_FAN12_Speed | 4116 RPM | ok
SYS_FAN13_Speed | 4116 RPM | ok
SYS_FAN14_Speed | 4214 RPM | ok
Airflow_rate | 16 CFM | ok
PSU1_PIN | 0 Watts | ok
PSU2_PIN | 0 Watts | ok
PSU1_POUT | 0 Watts | ok
PSU2_POUT | 0 Watts | ok
PSU1_IIN | 0 Amps | ok
PSU2_IIN | 0 Amps | ok
PSU1_VIN | 0 Volts | ok
PSU2_VIN | 0 Volts | ok
CPU_Power | 63 Watts | ok
MEM_Power | 8 Watts | ok
Total_Power | 0 Watts | ok
BP_Power | 8 Watts | ok
FAN_Power | 6 Watts | ok
MB_Power | 0 Watts | ok
リストは長いですが、一目瞭然であり、サーバーコンポーネント全体の状態を監視できるはずです。一部のファンがフルスピードで動作しておらず、CPUの温度が上昇する場合があります。問題を解決するには、ハードウェアの交換が必要になる場合があります。
インテリジェントプラットフォーム管理インターフェイス(IPMI)カーネルモジュールでは、マザーボードでベースボード管理コントローラー(BMC)を有効にする必要があることに注意してください。 dmesgを使用して、利用可能かどうかを確認します:
$ dmesg | grep -i bmc
[ 8.063470] ipmi_si IPI0001:00: Found new BMC (man_id: 0x000000, prod_id: 0x02f3, dev_id: 0x20)
それ以外の場合、このコントローラーが無効になっている場合は、サーバーのBIOS設定を確認してください。
今のところ以上です。このブログシリーズのパート2では、バックアップツールの構成、ストレステスト、サーバーのロックダウンなど、残りの5つのトピックについて説明します。