MySQL +タコを構成する



この記事では、Railsアプリケーションのシャーディングとレプリケーションに使用されるタコのgemをさらに使用するためにMySQLを構成する方法を示したいと思います。
したがって、3台のサーバーを展開するタスクに直面していることを想像してみましょう(最初のアプリケーションでレールが回転し、2番目はマスターに必要で、3番目はスレーブとして機能します)、サーバー間のレプリケーションを構成し、タコを動作させます。

ステップ1-プリセットサーバー
この手順で説明するアクションは、マスターマシンとスレーブの両方で実行する必要があります。

MySQLをインストールします。

sudo apt-get install mysql-server 

次に、MySQLコンソールに移動します。
 mysql -u root -p 

データベースと、このデータベースを操作するすべての権限を持つユーザーを作成しましょう。
 create database rails_myapp; GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'localhost'; GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'%'; FLUSH PRIVILEGES; EXIT; 

ステップ2-マスターの構成
マスターサーバーでMySQL構成ファイルを開きます。

 sudo nano /etc/mysql/my.cnf 

このファイル内で、いくつかの変更を行います。 まず、次の行を見つけます。

 bind-address = 127.0.0.1 

Railsアプリケーションがサーバーに到達できるように、標準IPアドレスを0.0.0.0に置き換えます。

 bind-address = 0.0.0.0 

次のステップは、サーバーIDの値を変更することです。設定ファイルの[mysqld]セクションでサーバーIDを探します。 サーバーIDとして任意の番号を選択できますが、簡単にするために1を指定することをお勧めします。この番号は、レプリケーションに参加するサーバーのグループに対して一意でなければならないことに注意してください。

もう一度、この行がコメント化されていることを確認してください。

 server-id = 1 

ここで、log_binの値を持つ行に移動します。 スレーブは、記録されるすべての変更をコピーします。 繰り返しますが、log_binを含む行をコメントアウトする方が良いでしょう:

 log_bin = /var/log/mysql/mysql-bin.log 

最後に、スレーブサーバーによって複製されるデータベースの名前を指定する必要があります。 複製するすべてのデータベースに対してこの行を繰り返すことにより、複数のデータベースを指定できます。

 binlog_do_db = rails_myapp 

すべての変更が行われました! ファイルを保存して閉じることができます。

MySQLを再起動します。

 sudo service mysql restart 

MySQLを開きましょう-シェル。

 mysql -u root -p 

スレーブに特権を提供する必要があります。 これを行うには、次のコマンドを使用します。

 GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; 

次に、ベースに切り替える必要があります。

 USE rails_myapp; 

データベースをロックして、次の手順で役立つデータを確認します。

 FLUSH TABLES WITH READ LOCK; 

次に入力します:

 SHOW MASTER STATUS; 

以下で説明するコマンドを入力すると、このようなものが表示されます。

 mysql> SHOW MASTER STATUS; 

ファイル役職Binlog_Do_db
mysql-bin.000001107rails_myapp

セット内の1行(0.00秒)

重要! ファイル名と位置番号を書き留めるか覚えておいてください。これらの値は後で使用されます。
データベースがロックされている間、rails_myappデータベースをエクスポートする必要があります。 新しいウィンドウで2番目のターミナルを開き、MySQLコンソールではなく、bashシェルでこのコマンドを入力してください。

 mysqldump -u root -p --opt rails_myapp > rails_myapp.sql 

MySQLコンソールに戻り、データベースのロックを解除します(書き込み可能)。

 UNLOCK TABLES; QUIT; 

それだけです! マスターのセットアップが完了しました。

ステップ3-スレーブを構成します。
MySQLサーバーに移動し、MySQLを開いてデータベースを作成します(名前はウィザードとまったく同じです)。

 CREATE DATABASE rails_myapp; EXIT; 

ウィザードでエクスポートしたSQLコマンドを使用してファイルを転送し、インポートします。

 mysql -u root -p rails_myapp< /path/to/rails_myapp.sql 

次に、MySQL構成ファイルをわずかに修正する必要があります。

 sudo nano /etc/mysql/my.cnf 

最初に変更するのはサーバーIDです。 覚えているように、この番号はグループ内で一意でなければなりません(Master'a configで1を指定)。

 server-id = 2 

次の3行を追加(またはコメントアウト)します。

 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase 

新しいバインドアドレス値を設定します。

 bind-address = 0.0.0.0 

MySQLを再起動します。

 sudo service mysql restart 

次のステップは、レプリケーションを直接開始することです。 覚えて! MASTER_LOG_FILEおよびMASTER_LOG_POSの代わりに、以前に書き留めた値を入力する必要があります。

 CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; START SLAVE; 

スレーブが正常に起動したかどうかを確認する方法は? 以下で説明するコマンドを入力し、ログを表示する必要があります。

 SHOW SLAVE STATUS\G 


4番目のステップ-タコを構成します。
Railsアプリケーションで、Gemfileに次の行を追加します。

 gem 'ar-octopus' 

config /ディレクトリ内で、shards.ymlファイルを作成する必要があります。このファイルは、スレーブサーバーの構成を担当します。 覚えて! database.ymlファイルはマスター設定を担当し、スレーブの設定用に作成されたばかりのshards.ymlは、YMLではスペースとタブが重要であることを忘れないでください。

shards.ymlファイルは、入力後、次のようになります。

  octopus: replicated: true fully_replicated: true environments: - development - test development: slave: adapter: mysql2 encoding: utf8 database: rails_myapp username: rails_myapp_user password: qwerty host: 130.111.11.111 port: 3306 pool: 10 test: slave: adapter: mysql2 encoding: utf8 database: rails_myapp username: rails_myapp_user password: qwerty host: 130.111.111.111 port: 3306 pool: 10 

それだけです! モデルにreplicated_model()であることを登録し、Railsアプリケーションを実行する必要があります。 コンソールにPOSTリクエストを送信すると、次のようなものが表示されます。

  [Shard: slave] OurModel Load (1.0ms) SELECT `model`.* FROM `model` WHERE `chats`.`id` = 'gkjhgfhd' LIMIT 1 

素敵な設定をしてください!

Source: https://habr.com/ru/post/J261251/


All Articles