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.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
      
      





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



All Articles