
この記事では、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.000001 | 107 | rails_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 
素敵な設定をしてください!