青雲Xenon管理mysql主従レプリケーションテスト


環境:VM仮想マシン2台CentOS 7 X 86_64ビットシステム
環境要件の構成:
一、2台の仮想マシンはiptablesを閉じてfirewalldを閉じ、selinuxを閉じ、時間同期パラメータを開き、2台の仮想マシンの時間が一致することを保証する2、2台の仮想マシンのsshdサービスは22ポートを開く(Xenonコードでは22ポートのみを通じてssh相互間の訪問をサポートする)3、Xenonサービスの起動ユーザーはmysqlサービスの起動ユーザーと同じユーザーでなければならない.この例のシミュレーションのデモはすべて採用したシステムユーザーmysqlである.4、2台の仮想マシンシステムのユーザーmysql、shellのログインを許可し、2台の仮想マシンmysqlユーザーの間で鍵を免除して5、2台の仮想マシンシステムにインストールmysqlのバージョンはmysql 5でなければならない.7バージョン以上(mysql 5.7を含む)、2台のmysqlが半同期レプリケーションパラメータ(Xenonは半同期レプリケーションに基づく)をオンにする6、2台の仮想マシンシステムにsshpassソフトウェア7、2台の仮想マシンシステム上のXenonをインストールする.jsonプロファイルではshellコマンドを呼び出して関連するコマンドを実行します.xenonサービスはシステムの普通のユーザーmysqlが起動したので、xenon.jsonファイルがコマンドラインコマンドを実行する場合、mysqlシステムのユーザ関連コマンドのsudo権限を付与する必要があり、システムコマンド8、xenonを実行することができる.jsonプロファイルでは、xenonサービスがmysqlのプライマリ・セカンダリ・レプリケーション関係を自動的に作成し、mysqlレプリケーション関係と自動障害復旧を自動的に切り替えることができるように、いくつかのアカウント権限を構成します.xenon.jsonプロファイルでmysqlレプリケーションアカウントとパスワードを構成すると、xenonサービスは自動的にレプリケーションアカウントを作成でき、与える権限は%の権限です.レプリケーション関係が自動的に作成されます.しかし、テスト中にエラーが報告され、アカウントのコピー権限が正しくないことを示します.
そこで今回のプレゼンテーションでは,本人自身が直接2台のmysqlのインスタンスに同じコピーアカウントを作成した.コマンドは次のとおりです.
grant replication slave on *.* to repuser@'172.16.0.%' identified by 'repuser9slave'; flush privileges; ##        
 grant all on *.* to root@'127.0.0.1' identified by 'rrtestjianwei';flush privileges;  

##xenonが構築したHA+mysqlクラスタでは、読み書きはすべてmasterライブラリ上にあることが推奨されるため、xenonが維持するmysqlクラスタではslaveライブラリは書くことが許されない.マスターマスターマスターライブラリに障害が発生すると、ノードslaveライブラリがマスターライブラリに切り替わるので、元の読み取り専用権限はこのアカウントでデータベースにログインして権限を変更して読み取り可能になります.
 grant all on *.* to codeuser@'172.16.0.%' identified by 'rrtestjianwei';flush privileges;   

##コード接続ライブラリのアカウントとパスワード、およびIPアドレスを許可します.ここでは、ネットワークカードをバインドしたサービスip 172.16.0.100を唯一のコード接続ライブラリのアドレスとして直接提供することをお勧めします.
9、2台の仮想マシンのIPアドレスとバインド/etc/hosts
  IP  
10.0.0.130  172.16.0.130
10.0.0.131  172.16.0.131

ヒント:2台の物理マシンでテストする場合、最初は2台の物理マシンがネットワークに接続するネットワークポートが異なる(1つはネットワークポート2、1つはネットワークポート3)ため、ネットワークipアドレスを配置するネットワークカードも異なる、2台のマシンxenon.jsonプロファイルでサービスipをNIC em 1にバインドします.後のテストでは、2台のマシンのxenonサービスが正常に起動し、それぞれのmysqlサービスを引っ張って、2台のマシンに/data/xenon/bin/xenoncli cluster add ip:8801相手のノードmysqlを追加することもできます.また、サービスipは、予め設定されたem 1にバインドされることにも成功する.次に、サービスipがバインドされたマシン上でこのサービスipと彼自身のイントラネットipを通じてデータベースにログインできるという問題が発生しました.しかし、バインドされていないサービスipマシン上でこのサービスipを介して対向するmysqlサービスにログインすることを拒否されたmysqlサービス(mysqlサービスにログインする権限は大丈夫)そこで、ルームにこの2台のイントラネット線を同じNICに挿入させ、同じNIC上にそれぞれのイントラネットipアドレスを配置し、xenon.jsonプロファイルでは、バインドサービスipをイントラネットケーブルを挿入するNICに指定します.このとき以上の問題は解決された
バインド/etc/hosts:
[root@mgr01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.130 mgr01
172.16.0.131 mgr03
[root@mgr03 ~]# cat /etc/hosts
172.16.0.130 mgr01
172.16.0.131 mgr03

具体的な構成手順について説明します.
ヒント:次の構成手順は、2台の仮想マシンで実行します.
第一に、バイナリバージョンmysql 5をインストールする.7.24
tar xf  mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
echo "export PATH=$PATH:/usr/local/mysql/bin" >/etc/profile.d/mysql.sh 
source  /etc/profile
   mysql:
mysqld  --defaults-file=/data/mysql/mysql3306/my3306.cnf  --initialize
  mysql:
mysqld  --defaults-file=/data/mysql/mysql3306/my3306.cnf  &

[root@mgr01 ~]# cat .my.cnf 
[client]
socket = /tmp/mysql.sock
user=root
password=123456
prompt="(\\u@\\'mgr01':\\p)[\\d]>"

mysqlにログインしてアカウントの承認を行います.
grant replication slave on *.* to repuser@'172.16.0.%' identified by 'repuser9slave'; flush privileges;
grant all on *.* to root@'127.0.0.1' identified by 'rrtestjianwei';flush privileges;
grant all on *.* to codeuser@'172.16.0.%' identified by 'rrtestjianwei';flush privileges;

ヒント:2台のマシンで上記の手順を実行してmysqlをインストールします.要求/data/mysql/mysql 3306/my 3306.cnfプロファイルはすべてMySQLの半同期レプリケーションのパラメータを開きます
次のパラメータは/data/mysql/mysql 3306/my 3306に書き込む.cnfプロファイル:
plugin-load="semisync_master.so;semisync_slave.so"
rpl_semi_sync_master_enabled=OFF
rpl_semi_sync_slave_enabled=ON
rpl_semi_sync_master_wait_no_slave=ON
rpl_semi_sync_master_timeout=1000000000000000000  ##                    

第二に、xenonサービスのインストール
紹介:Xenonは、オペレーティングシステムレベルで他のシステムライブラリを必要としない独自のバイナリファイルです.Linuxに基づいて構築されています.MS WindowsおよびOS/Xに関するヒントはなく、WindowsおよびOS/Xと互換性がありません.独立したアプリケーションです.MySQLバックエンドとともに実行するように構成されているため、mysqldが必要です.
XenonはGTID半同期パラレルレプリケーション技術を使用しており、MySQLバージョンは5.7以降が望ましい.詳細についてはmy.を参照してください.cnfアドレス:https://github.com/radondb/xenon/blob/master/docs/config/MySQL.md次のmysqlの半同期レプリケーションパラメータを/data/mysql/mysql 3306/my 3306に書き込む.cnfプロファイル
plugin-load="semisync_master.so;semisync_slave.so"
rpl_semi_sync_master_enabled=OFF
rpl_semi_sync_slave_enabled=ON
rpl_semi_sync_master_wait_no_slave=ON
rpl_semi_sync_master_timeout=1000000000000000000

xenonサービスはgo言語で開発されているため、go環境で実行する必要があり、Goバージョン1.8以降が必要です.
2.1 go環境のインストール
  Go  1.8     (  ubuntu “ sudo apt install golang”,  centOS / redhat “ yum install golang”)。
       golang ,   go1.9.3.linux-amd64.tar.gz
go         :
wget  https://storage.googleapis.com/golang/go1.9.3.linux-amd64.tar.gz
tar xf go1.11.linux-amd64.tar.gz  -C /usr/local/

[root@mgr01 ~]# tail -2 /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
[root@mgr01 ~]# go version
go version go1.11 linux/amd64

2.2 xenonサービスのインストール
1  :
git clone https://github.com/radondb/xenon.git
cd xenon
2.    
make build
 ls bin/
xenon  xenoncli
3.  config
 cp xenon/conf/xenon-sample.conf.json /etc/xenon/xenon.json

[mysql@mgr01 ~]$ cat /data/xenon/bin/config.path
/etc/xenon/xenon.json

ここで、xenonを実行する勘定科目はmysql勘定科目と一致する必要があります.たとえば、ubuntu勘定科目を使用してxenonを起動する必要があります.ubuntu mysqlの起動とmysqlディレクトリの権限が必要です.これは従来のmysqlとは異なり、mysqlアカウントは必要ありません.xenonアカウントを実行している同僚はmysqlアカウントです.
注:コマンドラインの例の概要を次に示します.簡単にするために、xenonが指定したパスの下にあると仮定します.そうでなければ、replace xenon with/path/to/xenon.xenonコマンドパスにはconfigという名前が必要です.pathのファイルですxenonですjsonファイルの絶対パス.-cまたは--configを使用してxenon_を指定していることを確認します.config_fileの場所.
2.3、2台の機械作成システムユーザーmysql
2台のマシンはシステムユーザーmysqlを作成し、2台のマシンの間でmysqlユーザーの秘密鍵なしアクセスを実現し、mysqlシステムアカウントは22ポートのみアクセスできます.
useradd mysql passwd mysql認証mysqlユーザーsudo権限は、次のコマンドを実行できます.
 [root@mgr01 ~]# tail -1 /etc/sudoers
mysql ALL=(ALL)     NOPASSWD: /usr/sbin/ip

2台の仮想マシン間のシステムユーザーmysqlは互いに秘密鍵を免除して操作する.
 ssh-keygen -t rsa 
 .ssh/authorized_keys
 chmod 600 .ssh/authorized_keys 

2.4、xenonサービスを起動する:
172.16.0.130マシンxenon.jsonの内容は以下の通りです:(172.16.0.131プロファイルはIPと自分のイントラネットカード172.16.0.131アドレスに交換します)

[mysql@mgr01 ~]$ cat /etc/xenon/xenon.json 
{
    "server":
    {
        "endpoint":"172.16.0.130:8801"
    },

    "raft":
    {
        "meta-datadir":"raft.meta",
        "heartbeat-timeout":1000,
        "election-timeout":3000,
        "leader-start-command":"sudo /usr/sbin/ip a a 172.16.0.100/16 dev eth0 && arping -c 3 -A  172.16.0.100  -I eth0",
        "leader-stop-command":"sudo /usr/sbin/ip a d 172.16.0.100/16 dev eth0"
    },

    "mysql":
    {
        "admin":"root",
        "passwd":"rrtestjianwei",
        "host":"127.0.0.1",
        "port":3306,
        "basedir":"/usr/local/mysql",
        "defaults-file":"/data/mysql/mysql3306/my3306.cnf",
        "ping-timeout":1000,
        "master-sysvars":"super_read_only=0;read_only=0;sync_binlog=default;innodb_flush_log_at_trx_commit=default",
        "slave-sysvars": "super_read_only=1;read_only=1;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"
    },

    "replication":
    {
        "user":"repuser",
        "passwd":"repuser9slave"
    },

    "backup":
    {
        "ssh-host":"172.16.0.130",
        "ssh-user":"mysql",
        "ssh-passwd":"rrtestjianwei669",
        "ssh-port":22,
        "backupdir":"/data/mysql/mysql3306/data",
        "xtrabackup-bindir":"/usr/bin",
        "backup-iops-limits":100000,
        "backup-use-memory": "1GB",
        "backup-parallel": 2
    },

    "rpc":
    {
        "request-timeout":500
    },

    "log":
    {
        "level":"INFO"
    }
}

起動命令:172.16.0.130機械操作:
[mysql@mgr01 ~]$ /data/xenon/bin/xenon -c /etc/xenon/xenon.json > /data/xenon/xenon.log 2>&1 &

xenonノードを追加するには:
[mysql@mgr01 xenon]$  /data/xenon/bin/xenoncli  cluster add 172.16.0.131:8801
 2019/12/08 23:13:29.937943       [WARNING]     cluster.prepare.to.add.nodes[172.16.0.131:8801].to.leader[]
 2019/12/08 23:13:29.938024       [WARNING]     cluster.canot.found.leader.forward.to[172.16.0.130:8801]
 2019/12/08 23:13:29.950792       [WARNING]     cluster.add.nodes.to.leader[].done

xenonノードを表示するには:
[mysql@mgr01 ~]$ /data/xenon/bin/xenoncli  cluster status
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
|        ID         |              Raft              | Mysqld  | Monitor |          Backup          |        Mysql        | IO/SQL_RUNNING |     MyLeader      |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 172.16.0.130:8801 | [ViewID:16 EpochID:1]@LEADER   | RUNNING | ON      | state:[NONE]␤            | [ALIVE] [READWRITE] | [true/true]    | 172.16.0.130:8801 |
|                   |                                |         |         | LastError:               |                     |                |                   |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 172.16.0.131:8801 | [ViewID:16 EpochID:1]@FOLLOWER | RUNNING | ON      | state:[NONE]␤            | [ALIVE] [READONLY]  | [true/true]    | 172.16.0.130:8801 |
|                   |                                |         |         | LastError:               |                     |                |                   |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
(2 rows)
     6s ,      read_only     [READONLY   READWRITE

172.16.0.131機械操作:
[mysql@mgr03 ~]$ /data/xenon/bin/xenon -c /etc/xenon/xenon.json > /data/xenon/xenon.log 2>&1 &
[mysql@mgr03 ~]$ /data/xenon/bin/xenoncli  cluster add 172.16.0.130:8801

[mysql@mgr03 ~]$ /data/xenon/bin/xenoncli  cluster status
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
|        ID         |              Raft              | Mysqld  | Monitor |          Backup          |        Mysql        | IO/SQL_RUNNING |     MyLeader      |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 172.16.0.131:8801 | [ViewID:16 EpochID:1]@FOLLOWER | RUNNING | ON      | state:[NONE]␤            | [ALIVE] [READONLY]  | [true/true]    | 172.16.0.130:8801 |
|                   |                                |         |         | LastError:               |                     |                |                   |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 172.16.0.130:8801 | [ViewID:16 EpochID:1]@LEADER   | RUNNING | ON      | state:[NONE]␤            | [ALIVE] [READWRITE] | [true/true]    | 172.16.0.130:8801 |
|                   |                                |         |         | LastError:               |                     |                |                   |
+-------------------+--------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
     6s ,      read_only     [READONLY   READWRITE

同時サービスIP 172.16.0.100アドレスが10.0.0.130のマシンにバインドされています
[mysql@mgr01 xenon]$ ip a|grep 172.16.0.100
    inet 172.16.0.100/16 scope global eth0

サービスipでmysqlにログインし、テストライブラリを作成します.
[mysql@mgr01 xenon]$ mysql -ucodeuser -h172.16.0.100 -p'rrtestjianwei' -e "create database test03;show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test01             |
| test02             |
| test03             |
+--------------------+
[mysql@mgr01 xenon]$ 

第三に、xenon管理mysql一主一従故障プレゼンテーション
トラブルシューティングを行い、killはメインライブラリを削除し、サービスipでライブラリを接続しようとします.成功したメインライブラリにリンクできるのは約25 sです.その後、接続後の新しいメインライブラリでデータを削除するメインライブラリを25 sに切り替えると完了します.
トラブルシューティングを行います.マスターライブラリにログインし、shutdownを実行してマスターライブラリをオフにし、サービスip接続ライブラリを通過しようとします.約17 sから20 sでサービスipをマスターライブラリのマシンカードに再バインドし、このサービスipでマスターライブラリに正常に接続します.その後、データベースの表示、書き込み、データの更新を操作できます(物理サーバが複数回テストしたもの)
2.masterライブラリのサーバーにログインし、kill-9はmysqlのプロセスを削除し、masterマシン上のxenonは4 sから11 s以内にmasterマシンのmysqlサービスを自動的に引き上げ、その後、バインドサービスipからmasterのネットワークカードに接続し、このサービスipを通じてメインライブラリに正常に接続し、データベースの表示、書き込みを操作することができます.データが更新されました(物理サーバで複数回テストしたもの)
3..マスターライブラリのサーバにログインし、データディレクトリdataを移動し、マスターライブラリのmysqlサービスを閉じると、1 m分ほどでサービスipが別のmysqlに舞い上がったが、このとき、このライブラリは読むしかなく、書くことができない.書き込み時に打ち固められる(物理サーバの複数回のテストで得られた)
4.shutdownがslaveライブラリを閉じるだけであれば、サービスipアドレスを介してレコードをリモートで書き込み、mysqlインスタンスを閉じる.コマンドは次のとおりです.
[root@slavedb 3306]# mysql -ucodeuser -h192.168.1.100 -p'rrtestjianwei' -e "INSERT INTO test01.test1(username,password,create_time) values('tomcat', 'xiaohuahua',now());"; mysql -e "shutdown;

shutdownコマンドを実行したら、すぐに次の挿入レコードのコマンドを実行します.
mysql -ucodeuser -h192.168.1.100 -p'rrtestjianwei' -e "INSERT INTO test01.test1(username,password,create_time) values('tomcat', 'xiaohuahua',now());"

このとき打ち固められ、何度も実行してもダメで、10-15 sで継続して正常に書けるようになりますが、このとき同じ記録が2回masterライブラリに書き込まれます.(物理サーバの複数回のテストで得られた)は次のとおりです.
| 31 | tomcat   | xiaohuahua | 2019-12-12 17:20:11 |
| 32 | tomcat   | xiaohuahua | 2019-12-12 17:23:28 |
| 33 | tomcat   | xiaohuahua | 2019-12-12 17:23:28 |
| 34 | tomcat   | xiaohuahua | 2019-12-12 17:23:38 |
| 35 | tomcat   | xiaohuahua | 2019-12-12 17:23:40 |
| 36 | tomcat   | xiaohuahua | 2019-12-12 17:25:32 |
| 37 | tomcat   | xiaohuahua | 2019-12-12 17:25:32 |
| 38 | tomcat   | xiaohuahua | 2019-12-12 17:25:45 |
+----+----------+------------+---------------------+

5.slaveライブラリのdataディレクトリを移動した場合、サービスipアドレスを介してレコードをリモートで書き込み、mysqlインスタンスを閉じます.コマンドは次のとおりです.
[root@slavedb ~]#  mv data data_bak
[root@slavedb 3306]# ls
binlog  data_bak  logs  my.cnf  tmp
[root@slavedb ~]# mysql -ucodeuser -h192.168.1.100 -p'rrtestjianwei' -e "INSERT INTO test01.test1(username,password,create_time)values('tomcat', 'xiaohuahua',now());";mysql -e "shutdown;"
[mysql@localhost xenon]$ mysql -ucodeuser -h192.168.1.100 -p'rrtestjianwei' -e "INSERT INTO test01.test1(username,password,create_time) values('tomcat', 'xiaohuahua',now());"

継続的な打ち上げ時間は10-15 sの間で正常に書き込まれますが、同じ記録がmasterライブラリに2回書き込まれます.(物理サーバが複数回テストしたもの)
 39 | tomcat   | xiaohuahua | 2019-12-12 17:37:31 |
| 40 | tomcat   | xiaohuahua | 2019-12-12 17:37:31 |
| 41 | tomcat   | xiaohuahua | 2019-12-12 17:37:42 |
| 42 | tomcat   | xiaohuahua | 2019-12-12 17:37:43 |
+----+----------+------------+---------------------+
42 rows in set (0.00 sec)

テスト・テーブルを作成し、テスト文を挿入します.
CREATE TABLE `test1` (
`id` int(8) NOT NULL AUTO_INCREMENT, 
`username` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`id`) #  ID
) ENGINE=innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO test1(username,password,create_time) values('tomcat', 'xiaohuahua',now());
INSERT INTO test1(username,password,create_time) values('tomcat', 'xiaohuahua',now());

以下はdellR 620物理マシン上の構成コマンドです.

 /data/xenon/bin/xenon -c /etc/xenon/xenon.json > /data/xenon/xenon.log 2>&1 &
 /data/xenon/bin/xenoncli cluster status
 /data/xenon/bin/xenoncli cluster add 192.168.1.39:8801,192.168.1.182:8801
  /data/xenon/bin/xenoncli cluster remove 192.168.1.105:8801
 sudo /usr/sbin/ip a a 192.168.1.100/32 dev em3 && arping -c 3 -A  192.168.1.100  -I em3

 sudo /usr/sbin/ip a d 192.168.1.100/32 dev em3

次はdellR 620物理マシンでデータベースアカウントを作成するコマンドです.
grant replication slave on *.* to repl@'192.168.1.%' identified by 'repl4slave'; flush privileges;
grant all on *.* to root@'127.0.0.1' identified by 'rrtestjianwei';flush privileges;
grant all on *.* to codeuser@'192.168.1.%' identified by 'rrtestjianwei';flush privileges;

以下はdellR 620物理機械の1台のxenonである.jsonプロファイルの内容:

[root@slavedb ~]# cat /etc/xenon/xenon.json 
{
    "server":
    {
        "endpoint":"192.168.1.39:8801"
    },

    "raft":
    {
        "meta-datadir":"raft.meta",
        "heartbeat-timeout":1000,
        "election-timeout":3000,
        "leader-start-command":"sudo /usr/sbin/ip a a 192.168.1.100/32 dev em3 && arping -c 3 -A  192.168.1.100  -I em3",
        "leader-stop-command":"sudo /usr/sbin/ip a d 192.168.1.100/32 dev em3"
    },

    "mysql":
    {
        "admin":"root",
        "passwd":"rrtestjianwei",
        "host":"127.0.0.1",
        "port":3306,
        "basedir":"/usr/local/mysql",
        "defaults-file":"/data/mysql/3306/my.cnf",
        "ping-timeout":1000,
        "master-sysvars":"super_read_only=0;read_only=0;sync_binlog=default;innodb_flush_log_at_trx_commit=default",
        "slave-sysvars": "super_read_only=1;read_only=1;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"
    },

    "replication":
    {
        "user":"repl",
        "passwd":"repl4slave"
    },

    "backup":
    {
        "ssh-host":"192.168.1.39",
        "ssh-user":"mysql",
        "ssh-passwd":"rrtestjianwei669",
        "ssh-port":22,
        "backupdir":"/data/mysql/3306/data",
        "xtrabackup-bindir":"/usr/bin",
        "backup-iops-limits":100000,
        "backup-use-memory": "1GB",
        "backup-parallel": 2
    },

    "rpc":
    {
        "request-timeout":500
    },

    "log":
    {
        "level":"INFO"
    }
}

以上は簡単な紹介プレゼンテーションで、ここに記録して、自分で調べるのに便利で、必要なネットユーザーたちを助けることができることを望んでいます.