1. ビルド環境の初期設定
1.1 専用アカウントとストレージディレクトリの作成
データベースプロセスを実行するための専用ユーザーおよびグループを登録し、データ保管用のディレクトリを生成します。
# グループとシステムユーザーの作成
groupadd -r tdb_svc
useradd -r -g tdb_svc -s /sbin/nologin tdb_svc
# データ格納パスの確保
mkdir -p /srv/tdb_root/data
chown tdb_svc:tdb_svc /srv/tdb_root/data
1.2 Boostライブラリのソースビルド
TeleDBのコンパイルにはBoost C++ライブラリ(1.59系)が必須です。システムパスに展開し、バイナリをインストールします。
cd /usr/local/src
tar xf boost_1_59_0.tar.gz
cd boost_1_59_0
./bootstrap.sh --prefix=/usr/local
./b2 -j$(nproc) install
1.3 依存パッケージの一括導入
CMakeおよびシステムライブラリ関連のRPMパッケージを配列処理で導入します。環境に応じてyumリポジトリから直接インストールすることも可能です。
PKG_LIST=(
"cmake-2.8.12.2-2.el7.x86_64.rpm"
"rh-varnish6-runtime-4.1-6.el7.x86_64.rpm"
"rh-varnish6-jemalloc-5.0.1-3.el7.x86_64.rpm"
"rh-varnish6-jemalloc-devel-5.0.1-3.el7.x86_64.rpm"
"ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm"
"ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm"
)
for pkg in "${PKG_LIST[@]}"; do
rpm -Uvh "/opt/downloads/${pkg}"
done
2. データベースエンジンのコンパイル
2.1 CMake構成パラメータの定義
ソースアーカイブを展開後、以下のCMakeコマンドを実行してビルド設定を生成します。コンパイル過程では一時ファイルが大量に生成されるため、15GB以上の空き領域を確保してください。
cd /opt
unzip teledb-for-mysql-master.zip
cd teledb-for-mysql-master
cmake . \
-DCMAKE_INSTALL_PREFIX=/srv/tdb_root \
-DMYSQL_DATADIR=/srv/tdb_root/data \
-DSYSCONFDIR=/srv/tdb_root \
-DWITH_BOOST=/usr/local/src/boost_1_59_0 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/srv/tdb_root/mysqld.sock \
-DMYSQL_TCP_PORT=53306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
設定生成が完了したら、並列コンパイルを実行してバイナリをインストールパスへ配置します。
make -j$(nproc) && make install
2.2 構成ファイルの配置
ビルド済みのベースディレクトリ直下に my.cnf を作成し、エンジン固有のパラメータを適用します。
cat > /srv/tdb_root/my.cnf << 'EOF'
[client]
port = 53306
socket = /srv/tdb_root/mysqld.sock
default-character-set = utf8mb4
[mysqld]
port = 53306
socket = /srv/tdb_root/mysqld.sock
basedir = /srv/tdb_root
datadir = /srv/tdb_root/data
pid-file = /srv/tdb_root/tdb.pid
log_error = /srv/tdb_root/error.log
user = tdb_svc
default_storage_engine = InnoDB
max_connections = 800
max_connect_errors = 10000
open_files_limit = 65535
table_open_cache = 256
max_allowed_packet = 128M
binlog_cache_size = 256M
max_heap_table_size = 256M
tmp_table_size = 256M
sort_buffer_size = 32M
join_buffer_size = 32M
innodb_file_per_table = 1
innodb_open_files = 1000
innodb_buffer_pool_size = 2048M
innodb_log_buffer_size = 64M
innodb_log_file_size = 512M
EOF
ファイルおよびディレクトリの所有権をデータベース実行アカウントへ移譲します。
chown -R tdb_svc:tdb_svc /srv/tdb_root
2.3 システムカタログの初期化
初期化スクリプトを実行してデータディレクトリ内に必須のシステムテーブルを構築します。--initialize-insecure オプションを使用することで、rootアカウントの初期パスワードは空欄になります。
/srv/tdb_root/bin/mysqld \
--initialize-insecure \
--user=tdb_svc \
--basedir=/srv/tdb_root \
--datadir=/srv/tdb_root/data
初期化処理中にランダムパスワードが生成された場合、エラーログから以下のコマンドで抽出可能です。
grep 'temporary password' /srv/tdb_root/error.log | tail -n 1
3. systemdによるサービス管理の構成
3.1 ユニットファイルの定義
従来のSysVinitスクリプトの代わりに、systemd管理用のユニットファイルを新規作成します。これによりプロセスの監視と自動復旧が標準化されます。
cat > /etc/systemd/system/tdb-server.service << 'EOF'
[Unit]
Description=TeleDB Distributed Database Engine
After=network-online.target local-fs.target
[Service]
Type=forking
User=tdb_svc
Group=tdb_svc
ExecStart=/srv/tdb_root/bin/mysqld --defaults-file=/srv/tdb_root/my.cnf --daemonize
ExecStop=/srv/tdb_root/bin/mysqladmin --defaults-file=/srv/tdb_root/my.cnf -u root --port=53306 shutdown
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
3.2 デーモンの有効化と動作確認
ユニット定義をシステムマネージャーへ反映し、データベースサービスを起動します。状態監視コマンドで正常に動作しているか検証してください。
systemctl daemon-reload
systemctl enable tdb-server
systemctl start tdb-server
systemctl status tdb-server
4. TeleDBの技術的特性
TeleDBは中国電信によって独自開発された分散型データベースシステムです。MySQL互換アーキテクチャを基盤としつつ、透過的な分庫分表(シャーディング)機能、高度なSQLルーティングエンジン、およびグローバルインデックス機構を実装しています。主な適用領域は高并发OLTPトランザクション処理であり、集計クエリや複雑な分析処理には適していません。ノード間のデータ分散とトランザクション整合性を確保するため、アプリケーション側は標準的なJDBC/ODBCドライバーを介して接続します。