【CentOS7】 MySQL InnoDB Cluster の構築

詳しくは https://dev.mysql.com/doc/refman/5.7/en/mysql-innodb-cluster-production-deployment.html をご確認ください。


はじめに

CentOS7サーバを3から4台くらい起動します。
最低3台のDBサーバと一台のルーターサーバが必要です。
ルーターサーバはDBサーバと同居できますが、できれば分離した方が良いでしょう。
そうすると4台が最小構成となります(DBサーバx3台+ルーターサーバx1台)


初期設定

全台ともに
#vi /etc/selinux/config とし

SELINUX=disabled

としてから reboot し、

# yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum remove -y mysql-libs

を実行しておきます。


dbサーバの設定

下記の設定を3台かそれ以上のdbサーバに適用してください。

# yum install -y mysql-server mysql-shell
# service mysqld start

$ cat /var/log/mysqld.log | grep temporary とし、出てきたパスワードで mysql -u root -p とします。

SET PASSWORD = "MySQL_5.7";
UNINSTALL PLUGIN validate_password;
SET PASSWORD = "なにがしかのパスワード";
\q

$ mysqlsh とし、

    >dba.configureLocalInstance('root@localhost:3306')

    Please provide the password for 'root@localhost:3306':

    Detecting the configuration file...
    Found configuration file at standard location: /etc/my.cnf
    Do you want to modify this file? [Y|n]:  [Y|n]: Y

    MySQL user 'root' cannot be verified to have access to other hosts in the network.

    1) Create root@% with necessary grants
    2) Create account with different name
    3) Continue without creating account
    4) Cancel
    Please select an option [1]: 2

    account name= clusteradmin
    >\q

# service mysqld restart します。


クラスタの作成

クラスタのうちのどれかから以下を実行します。

$ mysqlsh

    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306')
    shell.connect('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    var cluster = dba.createCluster('Cluster001(←クラスタ名、任意の名前でokです)')
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306');
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306');

クラスタ化されたコンフィグの保存

各dbサーバで修正されたコンフィグをセーブします。
三台かそれ以上のdbサーバすべてで実行してください。

$ mysqlsh

    >dba.configureLocalInstance('clusteradmin@localhost:3306')

スレーブサーバの場合、以下のようになります

    Do you want to disable super_read_only and continue? [y|N]:y

routerサーバの設定

通常、dbサーバではないサーバでrouterを実行します。

# yum install -y mysql-router mysql-shell
$ mysqlrouter --bootstrap clusteradmin@クラスタ1のIPアドレス:3306 --user=mysqlrouter --conf-base-port 3306
# service mysqlrouter start

おまけ

ちゃんと動いてるかどうかテスト

# クラスタ内dbサーバ1が r/w serverになっていると思うので、 rootでログインし、以下のようにします。 本番環境ではadminの接続元を制限し、パスワードを設定してください。
create user admin@'%' identified by 'admin';
grant all on *.* to admin@'%';

# ルーターサーバで以下を実行し、sqlがクラスタ内dbサーバすべてに反映されているか確認します。
$ mysql-shell
mysql-sql> \connect admin@10.10.16.209   //ルーターサーバ自身のアドレス
create database testbase;
use testbase;
CREATE TABLE item (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(10),
  description VARCHAR(30),
  price INT UNSIGNED,
  created_at DATETIME
);

【CentOS7】 acme-tinyをyumでインストールし、let’s encryptでSSL証明書を取得する

acme-tinyはapacheの再起動とか余計なことをしないので、certbotより使いやすいと思います。
詳しくは https://github.com/diafygi/acme-tiny をご参照ください。

認証したいドメイン名が 171220.0x0c.info で、httpサーバに apache 2.4.8以降を用いる場合で説明します。


Step 1

このへんは環境に合わせてください↓

yum install httpd mod_ssl
yum install epel-release 
yum install acme-tiny

Step 2

acme-tinyをインストールすると /etc/httpd/conf.d/acme.conf/var/www/challenges/ ができるので、apacheをリロードするなりここから起動するなりします。

service httpd start

Step 3

アカウントキー作成

openssl genrsa 4096 > /var/lib/acme/private/account.key

Step 4

ドメイン用の秘密キー作成

openssl genrsa 4096 > /var/lib/acme/private/171220.0x0c.info.key

Step 5

リクエスト作成

openssl req -new -sha256 -key /var/lib/acme/private/171220.0x0c.info.key -subj "/CN=171220.0x0c.info" > /var/lib/acme/csr/171220.0x0c.info.csr

Step 6

let’s encryptにリクエストする

/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt

Step 7

できあがった証明書と秘密鍵をコピーしてapacheをリロード。
このあたりも環境に合わせてください。

cp /var/lib/acme/private/171220.0x0c.info.key /etc/pki/tls/private/localhost.key
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
service httpd reload

Step 8

以下のようなスクリプトを作り、一ヶ月に一回cronで回す。

#!/bin/sh
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt || exit
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
/usr/sbin/service httpd reload

おまけ:nginxの場合

上記Step 5とStep 6の間に、以下のようにnginxを設定し、リロードしておきます。

server {
        listen 80 default_server;

の下に以下のように設定します。

        #for acme-tiny
        location /.well-known/acme-challenge/ {
            alias /var/www/challenges/;
            try_files $uri =404;
        }

【CentOS7】 ipv6を無効にする

Step 1

/etc/sysctl.conf に

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1

の二行を追加する。

Step 2

/etc/sysconfig/network-scripts/ifcfg-*IPV6INIT=yes の記述があれば、 IPV6INIT=no に変更する。

Step 3

/etc/hosts にipv6ローカルアドレスの記述(::1から始まる行)があればコメントアウトする。

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Step 4

再起動する。
# reboot

【マレーシア】 私の知る限りでマラッカで1番安く生ビールを飲むにはここ、Rock Bottom Malaccaです。

私の知る限りでマラッカで1番安く生ビールを飲むにはここ、Rock Bottom Malaccaです。

ハッピーアワーで五杯分のチケットを購入して45リンギット(1215円)つまり一杯243円で生ビール(タイガー)が飲めます。
もともとマラッカで1番美味しいインド料理ということで評判のお店。
同じ建物の41階にあるお気に入りのバー(Pampas)が閉まっていて仕方なく利用して見つけたハッピーアワーのお値段です。
タンドリーチキンはマラッカではいろんなお店で食べられますが、ここは評判通り他より気の利いた味でした。付け合わせのバジルソースみたいなのも美味しいし高級感あります。その割にまあまあのお値段でコスパがいいと思います。
とにかく飲みたい人にオススメの店です。

Hello world!

2012年に0x0c.infoのドメインを取って、もう5年半になってしまいました。
やっとサイトをオープンすることになりました。皆様どうぞよろしくお願いします。

【カンボジア】カンボジアのビーチリゾート、シアヌークビルに行きました。

カンボジアのビーチリゾート、シアヌークビルに行きました。
ビーチが大好きです。
シュノーケルもビーチベッドでまったりするのも、ビーチで飲むビールも大好きです。
いろんな国のビーチに行きました。
それぞれの海のいろいろな良さがあり、もちろんサンゴや綺麗な色のお魚や、場所によっては小型のサメやタコやエイなどが観れる自然に溢れる秘境的な海はワクワクして大好きなのですが、そういう場所で快適な宿舎を探すのはなかなか難しいです。
もちろん島全体が一つのリゾートみたいな、一泊3万円〜みたいなとこだと綺麗なホテルに滞在して自然溢れる海を楽しめるのかもしれませんが、どんなに高くても一万円以上出したくない私たちとしては、水シャワーで部屋にアリだの巨大な蜘蛛だのがいるようなお部屋しか選択肢がないこともあります。
それで時には海そのものよりホテルを重視してビーチを選ぶ事もあります。
オンザビーチのホテルで、清潔でリゾート感味わえて、一万円以内で、海はエメラルドグリーンとかピカピカの青い海とかではないものの、よく管理されててビーチにゴミが落ちてないくらいには綺麗で、そしてビールの安い国。

その条件で選んだのがカンボジアのシアヌークビル。レンリゾートです。

ホテルのレストラン兼バーがビーチにあるのですが、前の砂浜を横切って歩いて行く人というのがほとんどいないんです。(オトレスビーチの端っこだったからなのでしょうか?)それがなんとも気分が良くて。

それで毎晩ハッピーアワーの時間になるとそこでビールやワインを飲みました。
しかもグラスをちゃんと凍らせておいてくれて、キンキンに冷えた生ビールが0.7USドルで飲めます。
12月ベストシーズンだった事もあるのかもしれませんが、四泊して毎日完璧なサンセットが見えました。

ご近所にはアメリカ人の働くレストランやイタリア人がやってるピザの店などもあり、カンボジアの物価からしたら随分高いのかもしれませんが、日本で海を見ながら食事してという事を考えると全然安いよねーというくらいのお値段で美味しいものが食べられます。

スタッフさんも本当に親切で、素朴な感じで癒されました。
またいつかもう一度行きたいと思わせられる素敵なリゾートでした。


レンリゾートの朝ごはん