Huawei Cloud HECS Lインスタンスで高可用性MySQL環境を構築する評価

Huawei Cloud HECS Lインスタンスで高可用性MySQL環境を構築する評価

1. Huawei Cloud HECS Lインスタンスの概要

Huawei Cloud HECS Lインスタンスは、高性能かつ高信頼性のクラウドサーバーインスタンスで、大規模な企業向けアプリケーションやビッグデータ分析などのシナリオに適しています。これは、Huaweiの最新世代のハードウェア仮想化技術に基づいており、より高い計算、ストレージ、ネットワーク性能を提供すると同時に、データのセキュリティとプライバシー保護を保証します。

HECS Lインスタンスの公式サイト: https://www.huaweicloud.com/product/hecs-light.html

Huawei Cloud HECS Lインスタンスには以下の特徴があります:

  • 高性能: Huaweiが自社開発した最新世代の仮想化技術を採用し、計算、ストレージ、ネットワーク性能を向上させ、Lインスタンスが大規模な企業向けアプリケーションやビッグデータ分析などのシナリオにおける高性能要件を容易に満たせるようにします。
  • 高信頼性: 多重バックアップと迅速な復旧技術を通じて、データのセキュリティと信頼性を保証します。ハードウェア障害やデータ損失が発生しても、迅速にビジネスを復旧させ、ビジネスの継続性を確保します。
  • 使いやすい: 自動運用とスマート管理プラットフォームを提供し、クラウドサーバーのデプロイと管理を簡単にします。ユーザーは簡単な設定とコマンドラインツールを通じて、デプロイと管理タスクを完了できます。
  • 柔軟な拡張性: ニーズに応じてリソースを拡張でき、ビジネスの成長と負荷の変化に柔軟に対応します。
  • 安全で信頼性: 国内外のセキュリティ基準と法規制を厳格に遵守し、ユーザーデータのセキュリティとプライバシーを保護します。同時に、アクセス制御、脆弱性スキャンなど、多様なセキュリティ対策を提供します。

2. 高可用性環境の概要

MySQLの高可用性は、MySQLデータベース向けのソリューションであり、フェイルオーバー、負荷分散、データレプリケーションなどの機能の管理と最適化を提供します。このソリューションは、ハードウェア障害、システムクラッシュ、またはその他の予測不可能な問題によりMySQLデータベースサービスが中断される問題を解決し、MySQLデータベースサービスの高可用性を保証します。

MySQLの高可用性を実現する方法には、マスター-スレーブレプリケーション、マスター-マスターレプリケーション、ミドルウェアなどがあります。その中で、マスター-スレーブレプリケーションは最も一般的に使用される方法で、MySQLデータを複数のサーバーで同期させ、マスターサーバーに障害が発生した場合にスレーブサーバーがマスターサーバーのサービスをシームレスに引き継ぐことができます。マスター-マスターレプリケーションは負荷分散を実現し、複数のMySQLデータベーサーバーの負荷を均衡分配して、MySQLデータベースサービスの可用性と性能を向上させます。一方、ミドルウェアは複数のMySQLデータベーサーバーを統合し、いずれかのサーバーに障害が発生した場合に他のサーバーがそのサーバーのタスクを引き継ぐことができます。

高可用性(High Availability)とは、システムに障害が発生しても継続して実行され、中断またはデータ損失がなく、システムの継続性と安定性を維持できることを指します。高可用性環境とは、高可用性を実現するために構築されるコンピュータシステム環境であり、通常はハードウェア、ネットワーク、ストレージ、データベース、アプリケーションなどの高可用性技術が含まれます。

高可用性環境の主要な技術は以下の通りです:

  • 負荷分散: 負荷分散技術を通じてネットワークトラフィックを複数のサーバーに分散させ、システムの処理能力と応答速度を向上させます。
  • クラスタリング: 複数のサーバーをクラスタとして構成することで、負荷分散と高可用性を実現します。一台のサーバーに障害が発生しても、他のサーバーがサービスを提供し続けます。
  • ストレージバックアップ: 重要なデータについては、信頼できるデータセンターまたはクラウドストレージサービスにバックアップして保存し、データが失われないようにします。
  • 迅速な復旧: システムに障害が発生した場合、迅速に正常な状態に復旧する必要があります。これは通常、迅速な再起動、自動バックアップ復旧などの技術が必要です。
  • 監視とアラート: システム障害を早期に発見し、対応措置を講じるために、監視とアラートシステムを構築する必要があります。このシステムはシステムの稼働状態と性能指標をリアルタイムで監視し、異常が発生した場合にアラート情報を発行し、管理者に通知します。

3. MySQLの概要

MySQLは、一般的に使用されているオープンソースのリレーショナルデータベース管理システム(RDBMS)であり、様々なアプリケーションやWebサイトで広く使用されています。当初はスウェーデンの会社MySQL ABが開発し、その後オラクル社(Oracle Corporation)に買収されました。

MySQLは強力な性能と信頼性を持ち、高同時アクセス、永続化ストレージ、共有アクセスをサポートします。InnoDB、MyISAM、Memoryなどの複数のストレージエンジンをサポートし、異なる性能と信頼性の要件を満たすことができます。また、PHP、Python、Javaなどの豊富な開発インターフェースとツールを提供し、開発者がアプリケーションの開発と統合を容易に行えるようにします。

MySQLは柔軟なデータモデルを持ち、リレーショナルデータ、非リレーショナルデータ、半構造化データなどの多様なデータ型をサポートし、様々な複雑なクエリとデータ処理操作を実行できます。同時に、MySQLはデータの一貫性とセキュリティを確保するための様々なデータバックアップと復旧技術もサポートしています。

MySQLは良好な拡張性とカスタマイズ性を持ち、Apache、Nginx、Drupal、WordPressなどの他の技術と統合できます。また、Amazon RDS、Google Cloud SQL、Azure SQL Databaseなどの様々なクラウドサービスプロバイダーもサポートしており、ユーザーが自分に適したクラウドサービスソリューションを選択しやすくしています。

4. Huawei Cloud Cloud Backup CBRとHost Security HSS

4.1 Huawei Cloud Cloud Backup CBR

クラウドバックアップ(Cloud Backup and Recovery, CBR)は、クラウド内の弹性云服务器(Elastic Cloud Server, ECS)、云耀云服务器(Hyper Elastic Cloud Server,HECS)、裸金属服务器(Bare Metal Server, BMS)(以下、サーバーと総称)、云硬盘(Elastic Volume Service, EVS)、SFS Turboファイルシステム、云桌面(Workspace)、クラウド外のVMware仮想化環境およびローカルファイルディレクトリに対して、簡単で使いやすいバックアップサービスを提供します。ウイルス侵入、人為的な誤削除、ソフトウェアまたはハードウェア障害などのイベントが発生した場合、データを任意のバックアップポイントに復元できます。

製品アーキテクチャ

クラウドバックアップは、バックアップ、ストレージリポジトリ、ポリシーで構成されます。

バックアップ

バックアップとは、バックアップオブジェクトが一度のバックアップタスクを実行して生成したバックアップデータであり、バックアップオブジェクトの復元に必要なすべてのデータを含みます。クラウドバックアップが生成するバックアップはいくつかのタイプに分けられます:

  • 云硬盘バックアップ: 云硬盘バックアップは、云硬盘に対してスナップショット技術に基づいたデータ保護を提供します。
  • 云服务器バックアップ: 云服务器バックアップは、弹性云サーバーと裸金属サーバーに対して、マルチクラウドディスク一貫性スナップショット技術に基づいたデータ保護を提供します。同時に、データベースなどのアプリケーションがデプロイされていないサーバーが生成するバックアップはサーバーバックアップとなり、データベースなどのアプリケーションがデプロイされたサーバーが生成するバックアップはデータベーサーバーバックアップとなります。
  • SFS Turboバックアップ: SFS Turboバックアップは、SFS Turboファイルシステムのデータ保護を提供します。
  • ハイブリッドクラウドバックアップ: ハイブリッドクラウドバックアップは、オフラインのバックアップストレージOceanStor Doradoアレイ内のバックアップデータおよびVMwareサーバーのバックアップデータの保護を提供します。
  • ファイルバックアップ: ファイルバックアップは、クラウド上のサーバーまたはユーザーデータセンターの仮想マシン内の単一または複数のファイルのデータ保護を提供し、全体マシンまたは全体ディスクの形式でのバックアップを不要にします。
  • 云桌面バックアップ: 云桌面バックアップは、云デスクトップのデータ保護を提供します。

4.2 Huawei Cloud Host Security HSS

企業ホストセキュリティ(Host Security Service、HSS)は、ワークロードを中心としたセキュリティ製品であり、ホストセキュリティ、コンテナーセキュリティ、Webページ改ざん防止を統合しています。ハイブリッドクラウド、マルチクラウドデータセンター基盤におけるサーバーワークロードの独自の保護要件の解決を目指しています。

HSSは地理的位置に影響されず、ホスト、コンテナーなどに対して統一された可視化制御能力を提供します。

HSSはホスト、コンテナーのシステム完全性の保護、アプリケーション制御、動作監視、ホストベースの侵入防御などを通じて、ワークロードを攻撃から保護します。

5. Huawei Cloud HECS Lインスタンスのデプロイ

5.1 HECS高可用性Lインスタンスの購入

  1. Huawei Cloud公式サイトにアクセス: https://www.huaweicloud.com/
  2. コンソールにログイン
  3. 「云耀サーバーHECS」を検索
  4. Lインスタンスコンソールを選択
  5. アプリケーションインスタンスがない場合は、リソースの購入を選択

HECS組み合わせインスタンスの購入段階では、従来のHuawei Cloud ECSサーバーの購入に比べて非常に簡単で便利です。

地域の選択については、以下のルールに従って適切な地域を選択できます:

  • 地理的位置の近接性の原則: ユーザーグループの位置に基づき、ネットワーク遅延を減らし、アクセス速度を向上させるために近隣の地域を選択する必要があります。
  • 地域間の価格差: 異なる地域のサーバー価格は異なる場合があるため、予算とコストパフォーマンスを考慮する必要があります。
  • 登録の考慮: 業種とビジネス要件に基づき、一部の地域では特定の登録または承認手続きが必要な場合があり、事前に理解し考慮する必要があります。
  • 多製品の同一地域内ネットワーク相互接続: 複数のHuawei Cloud製品を同じ地域にデプロイする必要がある場合、内部ネットワークの相互接続を実現し、アクセス速度とデータ転送効率を向上させることができます。

今回はCentOS 7.8バージョンを選択しました。

プラン仕様として高可用性プランを選択します。

インスタンス仕様の選択については、皆様の実際のビジネス要件と予算を総合的に考慮する必要があります。

  • 高可用性サーバーには以下の利点があります:
    1. データのセキュリティ: 通常のIDCデータセンターまたはサーバーベンダーを使用する場合に比べ、クラウドサービスプロバイダーが高性能クラウドサーバーをデプロイすることで、ハッカー攻撃やDDoS攻撃のリスクを大幅に低減できます。ユーザーは技術仕様を心配する必要なく、クラウドサーバーサービスプロバイダーが市場で最優秀のSSDとCPUチップを使用して低ping率と高計算能力を維持します。
    2. 信頼性: クラウドサーバーECSは、より厳格なIDC基準、サーバー基準、運用基準を使用しており、クラウドコンピューティング全体の基盤の高可用性、データの信頼性、およびクラウドサーバーの高可用性を保証します。各リージョンには複数の可用性ゾーンが存在し、より高い可用性が必要な場合、クラウドの複数可用性ゾーンを使用して独自の主従サービスまたはダブルアクティブサービスを構築できます。
    3. 弾力性: ほとんどのクラウドサービスプロバイダーが提供するクラウド製品にはいくつかの価格レベルがあり、技術仕様と関連サービスの面で一般的に差異が存在します。

設定を確認した後、支払いが必要です。

支払い後、コンソールに戻り作成状況を確認します。

作成完了を待ちます。

5.2 HECS高可用性Lインスタンスの初期設定

HECS高可用性Lインスタンスの作成が完了したら、詳細ページにクリックして入ります。

高可用性環境のネットワークトポロジ図が表示されます。

HECS組み合わせサービスには、同じ仕様の2台のサーバー、クラウドバックアップCBR、ホストセキュリティHSSが含まれています。

6. MySQL高可用性のデプロイ

MySQLのコンパイルインストールは、必要に応じてパラメータを設定し、要件に応じてカスタムインストールを行うことができ、インストールされるバージョンはプロジェクトの要件に柔軟に選択できます。全体の設定の柔軟性が大きいです。その中で、YUMバイナリ方式のデプロイは設定が簡単で、ソフトウェアパッケージ間の依存関係問題を自動的に解決できますが、YUMではソフトウェアモジュールと機能をカスタマイズできず、ソフトウェアデプロイパスをカスタマイズできず、後期の維持コストが増加します。このソリューションは、ワンクリックインストールデプロイスクリプトを提供し、スクリプトインストールで面倒な手順を省略し、変数を入力するだけでインストールタスクを完了させることができます。また、リソースプールマシンの初期化の参考にもなります。

6.1 MySQLソースコードからのコンパイルインストール

6.1.1 関連ディレクトリの作成

# ユーザーの作成
useradd -s /sbin/nologin dbadmin
# インストールディレクトリの作成と移動
cd /usr/local
mkdir dbms
cd dbms
# データ保存ディレクトリの作成
mkdir data

6.1.2 依存ライブラリのダウンロード

dnf -y install initscripts wget libaio ncurses ncurses-devel bison gcc gcc-c++ openssl openssl-devel

6.1.3 gccとg++のアップグレード

# CentOS開発ツールのインストール
dnf install -y centos-release-scl-rh 
dnf install -y centos-release-scl 
# gcc7のインストール
dnf install devtoolset-7-gcc.x86_64
dnf install devtoolset-7-gcc-c++.x86_64
# 有効化
scl enable devtoolset-7 bash
# バージョンの確認
gcc --version
g++ --version

# 失効防止方法1: シンボリックリンクの変更(推奨)
mv /usr/bin/gcc /usr/bin/gcc4.8.5
ln -s  /opt/rh/devtoolset-7/root/usr/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++4.8.5
ln -s /opt/rh/devtoolset-7/root/usr/bin/g++ /usr/bin/g++
mv /usr/bin/cc /usr/bin/cc4.8.5
ln -s /opt/rh/devtoolset-7/root/usr/bin/cc /usr/bin/cc
mv /usr/bin/c++ /usr/bin/c++4.8.5
ln -s /opt/rh/devtoolset-7/root/usr/bin/c++ /usr/bin/c++

# 失効防止方法2: 環境変数の変更
echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile

6.1.4 最新版cmakeのインストール

# インストール先: /opt
cd /opt
# ダウンロード
wget -c https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gz
# 解凍
tar zxvf cmake-3.22.1.tar.gz
# 解凍ディレクトリに移動
cd cmake-3.22.1
# ビルド
./bootstrap
# コンパイル
make
# インストール
make install
# リンク 環境変数に追加するため
ln -s /opt/bin/cmake /usr/bin/cmake

6.1.5 MySQLソースコードのダウンロードと解凍

cd /usr/local/dbms

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.31.tar.gz

tar -zxvf mysql-boost-8.0.31.tar.gz

6.1.6 ビルド、コンパイル、インストール

cd /usr/local/dbms/mysql-8.0.31

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dbms -DMYSQL_DATADIR=/usr/local/dbms/data -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_BOOST=boost
make && make install

6.1.7 設定ファイルの変更

6.1.7.1 設定ファイルを開く
vim /etc/my.cnf
6.1.7.2 以下の内容を書き込む

注意:元の内容はすべてクリアします

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
user = dbadmin
basedir = /usr/local/dbms
datadir = /usr/local/dbms/data
port = 3306
pid-file = /usr/local/dbms/data/mysql.pid
socket = /tmp/mysql.sock

log_error = /usr/local/dbms/data/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /usr/local/dbms/data/mysql-slow.log

[mysql]
default-character-set = utf8mb4

[mysqldump]
quick
max_allowed_packet = 16M

[mysqlsafe]
log-error=/usr/local/dbms/data/mysql-error.log
pid-file=/usr/local/dbms/data/mysql.pid

6.1.8 ユーザー権限の変更

cd /usr/local/
chown -R dbadmin:dbadmin /usr/local/dbms
chown -R dbadmin:dbadmin /usr/local/dbms/data

6.1.9 MySQLの初期化

cd /usr/local/dbms/bin
./mysqld --initialize-insecure --user=dbadmin --basedir=/usr/local/dbms --datadir=/usr/local/dbms/data

6.1.10 関連ファイルのコピー

cd /usr/local/dbms/support-files
cp mysql.server /etc/init.d/dbms

6.1.11 環境変数の設定

6.1.11.1 環境変数ファイルを開く
vim /etc/profile
6.1.11.2 PATH属性を変更し、保存して終了
export DBMS_HOME=/usr/local/dbms/
export PATH=${DBMS_HOME}/bin:${DBMS_HOME}/lib:$PATH
6.1.11.3 環境変数を有効にする
source /etc/profile

6.1.12 VSCodeでのビルド

`Ctrl + ,`を押し、`workspace`を選択し、左側で`extension`を選択し、`Cmake`を見つけ、`Configuration Args`に以下のパラメータを追加します:

-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/usr/local/dbms/mysql-8.0.31/boost/boost_1_78_0/

その後、`vscode`でフォルダ`/usr/local/dbms/mysql-8.0.31`を開き、下部の`build`をクリックしてビルドします。

6.1.13 デバッグ設定

`.vscode`フォルダに`launch.json`ファイルを作成し、以下の内容を記述します:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "DBMS-debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "/usr/local/dbms/bin/mysqld",
            "args": ["--user=dbadmin --datadir=/usr/local/dbms/data"],
            "stopAtEntry": true,
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb",
            "miDebuggerArgs": "gdb",
            "linux": {
                "MIMode": "gdb",
                "miDebuggerPath": "/usr/bin/gdb"
            },
            "logging": {
                "moduleLoad": false,
                "engineLogging": false,
                "trace": false
            },
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "cwd": "${workspaceFolder}",
        }
    ]
}

参考ブレークポイント位置:

  • ファイルsql_parser.cc第5438行:SQL文の処理エントリーポイント
  • ファイルitem.cc第7522行:データ型の解析エントリーポイント

6.1.14 仮想マシンのポート開放

14.1 3306ポートの状態確認
firewall-cmd --zone=public --query-port=3306/tcp

出力がnoの場合、ポートを開放する必要があります

14.2 ポートの開放
firewall-cmd --zone=public --add-port=3306/tcp --permanent 
14.3 ファイアウォールの再読み込み
firewall-cmd --reload

6.1.15 接続権限の変更

use mysql;
update user set Host='%' where User='root';
flush privileges;

以上で、MySQL高可用性環境の構築が完了しました。

タグ: Huawei Cloud MySQL 高可用性 HECS Lインスタンス クラウドサーバー

6月2日 16:11 投稿