Gearman + MySQL による永続化操作例

Gearman + MySQL による永続化操作例

この記事では、gearman+mysql メソッドを使用して永続化操作を実装します。ご参考までに、詳細は以下の通りです。

1. なぜ粘り強さが必要なのか?

gearman のジョブ サーバーの作業キューはメモリに保存されます。未処理のタスクがある状態でサーバーが再起動またはクラッシュすると、これらのタスクは失われます。
永続ストレージ キューを使用すると、バックグラウンド タスクを追加し、それを外部の永続キュー (MySQL データベースなど) に保存できます。

2. ギアマンの永続性に関する記事については、公式ドキュメントを読むことをお勧めします。

http://gearman.org/manual/job_server/#persistent_queues

3. 永続化のためのデータベースとテーブルを作成する

データベース gearman を作成します。

テーブル `gearman_queue` を作成します (
`unique_key` varchar(64) NOT NULL,
`function_name` varchar(255) NOT NULL,
`priority` int(11) NOT NULL,
`data` longblob NULLではありません。
`when_to_run` int(11)、
主キー (`unique_key`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

4. gearmanユーザーを作成する

> ユーザー 'gearman'@'%' を作成します (ID: '123456')。
> gearman.* のすべての権限を 'gearman'@'%' に付与します。
> 権限をフラッシュします。

5. gearmandを起動するときに永続パラメータを指定する

> gearmand -q libdrizzle \
--libdrizzle-ホスト=192.168.1.100 \
--libdrizzle-port=3306 \
--libdrizzle-user=gearman \
--libdrizzle-パスワード=123456 \
--libdrizzle-db=ギアマン\
--libdrizzle-table=gearman_queue \
--libdrizzle-mysql

または以下のように使用する

> ギアマンド -q mysql \
--mysql-ホスト=192.168.1.100 \
--mysql-ポート=3306 \
--mysql-user=gearman \
--mysqlパスワード=123456 \
--mysql-db=ギアマン\
--mysql-テーブル=gearman_queue

以下の問題が発生した場合、gearman をコンパイルおよびインストールするときに libdrizzle をインストールしなかったことを意味します。

gearmand: 認識されないオプション '--libdrizzle-host=192.168.1.100'

次のURLからlibdrizzleをダウンロードしてください

https://launchpad.net/libdrizzle/+ダウンロード

例: libdrizzle-5.1.4.tar.gz

libdrizzleをインストールする

> tar xf libdrizzle-5.1.4.tar.gz
> libdrizzle-5.1.4 をインストールします

ここで --prefix を指定しないことをお勧めします。他のディレクトリを指定すると、gearman は下記のコンパイル時に関連ヘッダーファイルやリンクライブラリを見つけられず、手動でソフトリンクを追加する必要があるためです。

> ./configure
> 作成 && インストール

次に、gearmanを再コンパイルしてインストールします

> tar xf gearmand-1.1.12.tar.gz 
>cd ギアマンド-1.1.12

configureのパラメータがわからない場合は、次のコマンドを使用して確認できます。

> ./configure --help

gearmanがmysqlの永続性をサポートするには、ここでmysql-develをインストールする必要があります。

> yum インストール mysql-server mysql-devel

先ほど gearman をインストールしたので --prefix を指定していなかったので、ここでは指定しませんでした。必要な場合は自分で指定してください。

> ./configure
> 作成 && インストール

設定が完了した後に表示される最後のメッセージ

* LIBS: 
* LDFLAGS フラグ: 
* アサーションが有効: いいえ
* デバッグ有効: いいえ
* 失敗時の警告: なし
* libsqlite3でビルドする
* libdrizzleでビルドする
* libmemcached を使用したビルドが見つかりません
* libpqでビルドする
※東京オフィスビル1号館が入るビルです。
* libmysql でビルドする
* SSL 有効: いいえ
* cyassl が見つかりません: いいえ
* openssl が見つかりました: はい
* -j: 2 を実行します
* VCSチェックアウト: いいえ
* スフィンクスビルド: :

最後に、libdrizzleとlibmysqlがyesと表示されているのがわかります。

インストールされているか確認する

> ギアマンド --help

次のエラーが発生した場合

gearmand: 共有ライブラリのロード中にエラーが発生しました: libdrizzle.so.9: 共有オブジェクトファイルを開けません: そのようなファイルまたはディレクトリはありません

/etc/ld.so.confを開いて変更してください

> vi /etc/ld.so.conf

次の文を追加してください

ローカル

ldconfigを実行する

>ldconfig

上記の gearmand --help を再度実行します。次のメッセージが表示されれば、インストールは成功です。

組み込み:

libdrizzle:
--libdrizzle-host arg (=localhost) サーバーのホスト。
--libdrizzle-port arg (=3306) サーバーのポート。(デフォルトでは Drizzle)
--libdrizzle-uds arg サーバーの Unix ドメイン ソケット。
--libdrizzle-user arg (=root) 認証用のユーザー名。
--libdrizzle-password arg 認証用のパスワード。
--libdrizzle-db arg (=gearman) 使用するデータベース。
--libdrizzle-table arg (=queue) 使用するテーブル。
--libdrizzle-mysql MySQL プロトコルを使用します。

マイグレーション:
--mysql-host arg (=localhost) MySQL ホスト。
--mysql-port arg (=3306) サーバーのポート。(デフォルトでは 3306)
--mysql-user arg MySQL ユーザー。
--mysql-password arg MySQL ユーザーのパスワード。
--mysql-db arg MySQL データベース。
--mysql-table arg (=gearman_queue) MySQL テーブル名。

libdrizzle経由でgearmandを起動する際に以下の問題が発生する場合

gearmand: キューの初期化中にエラーが発生しました: libdrizzle

そしてログの記録は次のようになります

エラー 2017-02-22 07:51:02.536574 [ main ] libdrizzle の初期化に失敗しました: 
初期化(QUEUE_ERROR) -> libgearman-server/queue.cc:246

MySQL のバージョンが高すぎるためか、他の理由かはわかりません。試してみてうまくいかない場合は、別の方法を試してください。私は他の方法をテストして成功しました。

バックグラウンドジョブを作成する

> ギアマン -f テスト -b 123456

次のようにデータベースを表示します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • Docker を使用した MySQL のデプロイの詳細説明 (データ永続化)
  • MySQL での Java 絵文字の永続化の詳細な説明
  • MySQL 8 の新機能: 永続的なグローバル変数を変更する方法
  • MySQL 8 の新機能: 自動増分主キーの永続性に関する詳細な説明
  • MySQL 8.0 の統計が不正確である理由
  • MySQL統計の概要
  • MySQL 永続統計の詳細な説明

<<:  Windows 10 で Ubuntu 20.04 LTS をアップデートする方法

>>:  相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

推薦する

CUDA10.0 のインストールと Ubuntu での問題

Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

Linuxグループの基礎知識ポイントまとめ

1. Linuxグループの基本紹介Linux では、すべてのユーザーはグループに所属する必要があり、...

77.9K の GitHub リポジトリを持つ Axios プロジェクト: 学ぶ価値のあることは何でしょうか?

目次序文1. Axiosの紹介2. HTTPインターセプターの設計と実装2.1 インターセプターの紹...

ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

データを整理するためのリストWeb ページの表示を制御する多数の HTML タグを学習した後、読者は...

Docker デプロイメント MySQL8 クラスター (マスター 1 台とスレーブ 2 台) の実装手順

目次1. CentOS 7.9 20にDockerをインストールする2. MySQL クラスターをデ...

ネイティブJSでマウススライドによる愛の拡散効果を実現

この記事では、マウスをスライドすると愛が広がる js 特殊効果を紹介します。効果は次のとおりです。 ...

MySQL 8.0.23 のレプリケーション アーキテクチャにおけるスレーブ ノードの自動フェイルオーバー

私はしばらく MGR と連絡を取り合ってきました。MySQL 8.0.23 の登場により、MySQL...

MySQL で主キーと ROWID を使用する際の落とし穴の概要

序文MySQL の rowid の概念については聞いたことがあるかもしれませんが、テストや実践が難し...

Tomcat サーバーの設定と Web プロジェクトの公開に関する IDEA グラフィック チュートリアル

1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...

Vue-CLI マルチページディレクトリパッケージ化手順の記録

ページディレクトリ構造 デフォルトの HTML テンプレート ファイル public/index.h...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...

スタイル属性 (element.style) で定義されたインライン スタイルを削除する方法

Magento を頻繁に変更する場合、element.style に遭遇することがあります。 これは...

Vue で動的に追加されたルーティング ページの更新時に失敗する理由と解決策

目次問題の説明シナリオインターフェースリターンフロントエンドメニューの定義vuex のメソッド問題原...

ハードコーディングに別れを告げ、フロントエンドテーブルがインスタンスコードを自動的に計算できるようにします。

序文私のチームが税制モジュールを開発していたとき、計算問題、特にグリッド内の計算を解決するために時間...