GlusterFSベースの高可用性MySQLデータベースシステムテスト
MySQLは最も広く使用されているデータベースの1つですが、GlusterFSはオープンソース分散ファイルシステムです.MySQLの主な問題は、単一の障害があり、MySQLノードに障害が発生すると、ビジネスシステム全体がクラッシュすることです.MySQL replication、MySQL Cluster、MySQL+Galeraは、この問題を異なる程度に解決しようとしています.本稿では、分散ファイルシステムGlusterFSを使用して、MySQLの高可用性を解決しようとしています. Ubuntu をインストール
まず、1台の物理マシン(ノートパソコン)に2つのUbuntu 13.10仮想マシンをインストールするテスト環境を構築します.仮想マシンソフトウェアはVMWareを使用することも、VirtualBoxを使用することもできます.
仮想マシン仕様:-1 CPU-1 G memory-2 Disks:システムをインストールするためのディスク20 G、ディスク10 G、Glusterに残して使用します.インストール時に2枚目のディスクを残しておき、インストール後にfdiskでパーティション化してフォーマットします.-その他の設定:タイムゾーンなど、2つのVM構成を一貫して保持します.
Ubuntuをインストールした後にsnapshotをすることができて、システムが崩壊した後に急速に回復することができます. Ubuntu の構成
glusterとmysqlを使用する前に、ubuntu仮想マシンをいくつか構成します.
2.1 networkのインストール後、仮想マシンはDHCPをデフォルトで使用し、IPアドレスの変化を避けるために静的IPを使用します.
右上隅のネットワーク接続アイコンの選択->接続の編集
IPv 4の設定ページに入り、Manualメソッドを選択し、以下のアドレス情報を追加します(自分のシステムに従って適切に変更します):-Address:192.168.53.218-mask:255.255.255.0-Gateway:192.168.53.2-DNS:192.168.53.2
現在のシステムのIP、ゲートウェイ、DNSが分からない場合は、nm-toolを使用してシステムのネットワーク情報を表示できます.
2.2 diskは第2のディスク上でパーティション化し、ファイルシステムを作成し、mount
sudofdisk/dev/sdbn>w sudo mkfs.ext 4/dev/sdb 1 sudomkdir−p/data/gv 0/brick 1 sudo vi/etc/fstab#次の行を/etc/fstabに追加します./dev/sdb1/data/gv0/brick1 ext4 defaults 1 2 $ sudo mount -a && mount
2.3その他の構成2.3.1 sudoers修正sudoersパスワードなしアクセスを開く.次の行を/etc/sudoersに追加します.u 1はユーザー名で、自分のユーザー名に置き換えます.
u1 ALL=(ALL:ALL) NOPASSWD: ALL %sudo ALL=(ALL:ALL) NOPASSWD: ALL
2.3.2 ssh $ sudo apt-get install ssh gluster をインストール
まずglusterの依存パッケージをインストールし、必要に応じてapt-cache searchを使用してパッケージの名前を検索します.
$ sudo apt-get install -y flex bison openssl libssl-dev libreadline6 libreadline6-dev systemtap systemtap-sdt-dev
最新のglusterをコンパイルしてインストールします(現在の最新バージョンは3.4.2です).
$ wget http://download.gluster.org/pub/gluster/glusterfs/3.4/3.4.2/glusterfs-3.4.2.tar.gz tarzxfgluster-3.4.2.tar.gz cd gluster-3.4.2./configure–enable-debug make&&sudo make install sudoldconfig gluster–version別の仮想マシンをインストールし、snapshotを作成できます.後で問題が発生した場合、すぐに使用可能な状態に復元できないようにします.
インストール後、2台のホストのホスト名とIPアドレス情報:-u 1:192.168.52.28-u 2:192.168.52.21 Gluster replication(AFR)を構成し、簡単なテスト を行う.
4.1 bricks bricksの準備はglusterの用語であり、volumeの基本的な構成部分であり、ホスト上のディレクトリと考えられる.
2つの仮想マシンで:
$ sudo mkdir -p/data/gv0/brick1/test
4.2 2つの仮想マシンからなる信頼性のあるストレージプールを構築するには、192.168.52.218で次のコマンドを実行します.
サド gluster ペン probe 192.168.53.221 # 代わりにあなたのシステムsudo gluster peer status Number of Peers:1
Hostname: 192.168.53.221 Port: 24007 Uuid: e1de158a-1a81-4d6c-af55-b548d4c4c174 State: Peer in Cluster (Connected)
4.3 replicated volumeを作成し、次のコマンドを任意の仮想マシンで実行します.
$ sudo gluster volume create testvol replica 2 192.168.53.218:/data/gv0/brick1/test 192.168.53.221:/data/gv0/brick1/test
//disable NFS(このステップはオプション)$sudo gluster volume set testvol nfs.disable on
sudoglustervolumestarttestvol sudo gluster volume status
作成したgluster volumeを1台の仮想マシン(例えば192.168.5.3.218)にマウントする.
$ sudo mount -t glusterfs 192.168.53.218:/testvol/mnt/testvol
4.4 glusterサービスの起動と停止-起動:sudo/etc/init.d/glusterd start-停止:umount:sudo umount/path/to/dir-停止:volume:sudo gluster volume stop-停止:glusterd:sudo/etc/init.d/glusterd stop
4.5 Glusterのreplication機能をテストgluster volumeがマウントされた仮想マシン上に$echo"abc">/mnt/testvol/test.txtのファイルを作成する
brickディレクトリを観察すると、testファイルは2つのマシンの/data/gv 0/brick/testディレクトリの下に表示されます.
$cd/data/gv 0/brick/test&&rm test.txt作成したファイルをbrickディレクトリ内で削除するとglusterが自動的に復元します.(本格的な全自動ではなく、このファイルにアクセスしたときにのみリカバリされます.そうしないとglusterは削除されたファイルをリカバリしません)
$ls/data/gv 0/brick/test/test.txt#glusterはファイルが失われていることを発見し、自動的にリカバリします.
4.5.1 DNSの問題のため、ファイルは自動的に回復することができなくて、テストの過程の中でファイルが1つのbrickの上で削除されたことを発見した後、glusterは自動的に回復することができなくて、しかもlogの中で大量のconnection timeout、接続できないなどのエラーを報告しました.コードを読んでglusterの自動リカバリの一部のコードはDNSを使用しますが、私たちが前に使用していたのはIPアドレスです.
UbuntuはコンパクトなDNSサーバdnsmasqを持っています.グローバルDNS内にないLANマシンドメイン名の解析をサポートします.dnsmasqユーザシーンは、ADSLを介してアクセスされるホームローカルエリアネットワークである.任意の小型ネットワーク(1000個未満のclient)にも適しています.このテストで最も重要なのは、/etc/hostsプロファイルをサポートすることです.Ubuntuのnetwork-managerはdnsmasqを自動的に起動しますが、デフォルトでは/etc/hostsは無視されます.$cat/etc/NetworkManager/dnsmasq.d/hosts.conf addn-hosts=/etc/hosts
sudoservicenetworkingrestart sudo/etc/init.d/dns-clean restart
修正後、以下のいくつかのコマンドに同じIPアドレスを出力するように要求します.
hostu1 nslookup u1 $ getent ahosts u1 mysql をインストール
すべての仮想マシンにgluster brickディレクトリを作成し、mysql dataを保存します.
mkdir−p/data/gv 0/brick 1/mysqldata新しいvolumeを作成する:sudo gluster volume create mysqldata replica 2 192.168.53.28:/data/gv 0/brick 1/mysqldata 192.168.53.221:/data/gv 0/brick 1/mysqldata
新しく作成したvolume:$sudo gluster volume start mysqldataを起動
マシンにログインし、mount gluster volume$sudo mount-t glusterfs 192.168.53.218:/mysqldata/mnt/mysqldata
mysqlをインストールし、新しいmountを使用するvolume:まずMySQLバイナリパッケージsudo groupadd mysql sudouseradd-r−gmysqlmysql cd/usr/local sudotarzxvf/path/to/mysql−VERSION−OS.tar.gz sudo ln-s full-path-to-mysql-VERSION-OS mysql cd/usr/local/mysql sudo chown-R mysql:mysql.
$sudo apt-get install-y libaio-dev#mysqlはlibaio.soが必要です
以上の操作はすべてのVMで実行する必要があります.
最大接続数を変更します.これは、mysql>show variables like「max_connections」;mysql> set global max_connections = 300; # 再起動すると無効になります.永続的な変更方法は、プロファイルに追加することです:max_connections=300 mysql$sudo/usr/local/mysql/scripts/mysql_をインストールinstall_db –user=mysql –basedir=/usr/local/mysql –datadir=/mnt/mysqldata –defaults-file=/usr/local/mysql/my.cnf
mysql:$sudo/usr/local/mysql/support-files/mysql.server start–datadir=/mnt/mysqldata–log-error=/usr/local/mysql/mysql.errorを起動
構成mysql:/usr/local/mysql/bin/mysqladmin−urootpassword"echo‘bind-address:0.0.0.0’>/usr/local/mysql/my.cnf
$/usr/local/mysql/bin/mysql-uroot#は、次の文を実行します.
CREATE USER ‘yydzero’@’localhost’ IDENTIFIED BY ‘goodluck’; GRANT ALL PRIVILEGES ON . TO ‘yydzero’@’localhost’ WITH GRANT OPTION; CREATE USER ‘yydzero’@’%’ IDENTIFIED BY ‘goodluck’; GRANT ALL PRIVILEGES ON . TO ‘yydzero’@’%’ WITH GRANT OPTION; MySQL+GlusterFS のテスト
mysql> create database gluster mysql> use gluster mysql> CREATE TABLE IF NOT EXISTS test1 (i int, v varchar(1024), bb blob, INDEX USING BTREE (i)) mysql> INSERT INTO test1 (i, v) VALUES (1, ‘x9byod’) mysql> SELECT * FROM test1;
これにより、Gluster分散ファイルシステム上でMySQLを実行できます.Gluster+MySQLの安定性を検証するために、このシステムで高同時性と高障害率のテストを行います.
まず、1台の物理マシン(ノートパソコン)に2つのUbuntu 13.10仮想マシンをインストールするテスト環境を構築します.仮想マシンソフトウェアはVMWareを使用することも、VirtualBoxを使用することもできます.
仮想マシン仕様:-1 CPU-1 G memory-2 Disks:システムをインストールするためのディスク20 G、ディスク10 G、Glusterに残して使用します.インストール時に2枚目のディスクを残しておき、インストール後にfdiskでパーティション化してフォーマットします.-その他の設定:タイムゾーンなど、2つのVM構成を一貫して保持します.
Ubuntuをインストールした後にsnapshotをすることができて、システムが崩壊した後に急速に回復することができます.
glusterとmysqlを使用する前に、ubuntu仮想マシンをいくつか構成します.
2.1 networkのインストール後、仮想マシンはDHCPをデフォルトで使用し、IPアドレスの変化を避けるために静的IPを使用します.
右上隅のネットワーク接続アイコンの選択->接続の編集
IPv 4の設定ページに入り、Manualメソッドを選択し、以下のアドレス情報を追加します(自分のシステムに従って適切に変更します):-Address:192.168.53.218-mask:255.255.255.0-Gateway:192.168.53.2-DNS:192.168.53.2
現在のシステムのIP、ゲートウェイ、DNSが分からない場合は、nm-toolを使用してシステムのネットワーク情報を表示できます.
2.2 diskは第2のディスク上でパーティション化し、ファイルシステムを作成し、mount
sudofdisk/dev/sdbn>w sudo mkfs.ext 4/dev/sdb 1 sudomkdir−p/data/gv 0/brick 1 sudo vi/etc/fstab#次の行を/etc/fstabに追加します./dev/sdb1/data/gv0/brick1 ext4 defaults 1 2 $ sudo mount -a && mount
2.3その他の構成2.3.1 sudoers修正sudoersパスワードなしアクセスを開く.次の行を/etc/sudoersに追加します.u 1はユーザー名で、自分のユーザー名に置き換えます.
u1 ALL=(ALL:ALL) NOPASSWD: ALL %sudo ALL=(ALL:ALL) NOPASSWD: ALL
2.3.2 ssh $ sudo apt-get install ssh
まずglusterの依存パッケージをインストールし、必要に応じてapt-cache searchを使用してパッケージの名前を検索します.
$ sudo apt-get install -y flex bison openssl libssl-dev libreadline6 libreadline6-dev systemtap systemtap-sdt-dev
最新のglusterをコンパイルしてインストールします(現在の最新バージョンは3.4.2です).
$ wget http://download.gluster.org/pub/gluster/glusterfs/3.4/3.4.2/glusterfs-3.4.2.tar.gz tarzxfgluster-3.4.2.tar.gz cd gluster-3.4.2./configure–enable-debug make&&sudo make install sudoldconfig gluster–version別の仮想マシンをインストールし、snapshotを作成できます.後で問題が発生した場合、すぐに使用可能な状態に復元できないようにします.
インストール後、2台のホストのホスト名とIPアドレス情報:-u 1:192.168.52.28-u 2:192.168.52.21
4.1 bricks bricksの準備はglusterの用語であり、volumeの基本的な構成部分であり、ホスト上のディレクトリと考えられる.
2つの仮想マシンで:
$ sudo mkdir -p/data/gv0/brick1/test
4.2 2つの仮想マシンからなる信頼性のあるストレージプールを構築するには、192.168.52.218で次のコマンドを実行します.
サド gluster ペン probe 192.168.53.221 # 代わりにあなたのシステムsudo gluster peer status Number of Peers:1
Hostname: 192.168.53.221 Port: 24007 Uuid: e1de158a-1a81-4d6c-af55-b548d4c4c174 State: Peer in Cluster (Connected)
4.3 replicated volumeを作成し、次のコマンドを任意の仮想マシンで実行します.
$ sudo gluster volume create testvol replica 2 192.168.53.218:/data/gv0/brick1/test 192.168.53.221:/data/gv0/brick1/test
//disable NFS(このステップはオプション)$sudo gluster volume set testvol nfs.disable on
sudoglustervolumestarttestvol sudo gluster volume status
作成したgluster volumeを1台の仮想マシン(例えば192.168.5.3.218)にマウントする.
$ sudo mount -t glusterfs 192.168.53.218:/testvol/mnt/testvol
4.4 glusterサービスの起動と停止-起動:sudo/etc/init.d/glusterd start-停止:umount:sudo umount/path/to/dir-停止:volume:sudo gluster volume stop-停止:glusterd:sudo/etc/init.d/glusterd stop
4.5 Glusterのreplication機能をテストgluster volumeがマウントされた仮想マシン上に$echo"abc">/mnt/testvol/test.txtのファイルを作成する
brickディレクトリを観察すると、testファイルは2つのマシンの/data/gv 0/brick/testディレクトリの下に表示されます.
$cd/data/gv 0/brick/test&&rm test.txt作成したファイルをbrickディレクトリ内で削除するとglusterが自動的に復元します.(本格的な全自動ではなく、このファイルにアクセスしたときにのみリカバリされます.そうしないとglusterは削除されたファイルをリカバリしません)
$ls/data/gv 0/brick/test/test.txt#glusterはファイルが失われていることを発見し、自動的にリカバリします.
4.5.1 DNSの問題のため、ファイルは自動的に回復することができなくて、テストの過程の中でファイルが1つのbrickの上で削除されたことを発見した後、glusterは自動的に回復することができなくて、しかもlogの中で大量のconnection timeout、接続できないなどのエラーを報告しました.コードを読んでglusterの自動リカバリの一部のコードはDNSを使用しますが、私たちが前に使用していたのはIPアドレスです.
UbuntuはコンパクトなDNSサーバdnsmasqを持っています.グローバルDNS内にないLANマシンドメイン名の解析をサポートします.dnsmasqユーザシーンは、ADSLを介してアクセスされるホームローカルエリアネットワークである.任意の小型ネットワーク(1000個未満のclient)にも適しています.このテストで最も重要なのは、/etc/hostsプロファイルをサポートすることです.Ubuntuのnetwork-managerはdnsmasqを自動的に起動しますが、デフォルトでは/etc/hostsは無視されます.$cat/etc/NetworkManager/dnsmasq.d/hosts.conf addn-hosts=/etc/hosts
sudoservicenetworkingrestart sudo/etc/init.d/dns-clean restart
修正後、以下のいくつかのコマンドに同じIPアドレスを出力するように要求します.
hostu1 nslookup u1 $ getent ahosts u1
すべての仮想マシンにgluster brickディレクトリを作成し、mysql dataを保存します.
mkdir−p/data/gv 0/brick 1/mysqldata新しいvolumeを作成する:sudo gluster volume create mysqldata replica 2 192.168.53.28:/data/gv 0/brick 1/mysqldata 192.168.53.221:/data/gv 0/brick 1/mysqldata
新しく作成したvolume:$sudo gluster volume start mysqldataを起動
マシンにログインし、mount gluster volume$sudo mount-t glusterfs 192.168.53.218:/mysqldata/mnt/mysqldata
mysqlをインストールし、新しいmountを使用するvolume:まずMySQLバイナリパッケージsudo groupadd mysql sudouseradd-r−gmysqlmysql cd/usr/local sudotarzxvf/path/to/mysql−VERSION−OS.tar.gz sudo ln-s full-path-to-mysql-VERSION-OS mysql cd/usr/local/mysql sudo chown-R mysql:mysql.
$sudo apt-get install-y libaio-dev#mysqlはlibaio.soが必要です
以上の操作はすべてのVMで実行する必要があります.
最大接続数を変更します.これは、mysql>show variables like「max_connections」;mysql> set global max_connections = 300; # 再起動すると無効になります.永続的な変更方法は、プロファイルに追加することです:max_connections=300 mysql$sudo/usr/local/mysql/scripts/mysql_をインストールinstall_db –user=mysql –basedir=/usr/local/mysql –datadir=/mnt/mysqldata –defaults-file=/usr/local/mysql/my.cnf
mysql:$sudo/usr/local/mysql/support-files/mysql.server start–datadir=/mnt/mysqldata–log-error=/usr/local/mysql/mysql.errorを起動
構成mysql:/usr/local/mysql/bin/mysqladmin−urootpassword"echo‘bind-address:0.0.0.0’>/usr/local/mysql/my.cnf
$/usr/local/mysql/bin/mysql-uroot#は、次の文を実行します.
CREATE USER ‘yydzero’@’localhost’ IDENTIFIED BY ‘goodluck’; GRANT ALL PRIVILEGES ON . TO ‘yydzero’@’localhost’ WITH GRANT OPTION; CREATE USER ‘yydzero’@’%’ IDENTIFIED BY ‘goodluck’; GRANT ALL PRIVILEGES ON . TO ‘yydzero’@’%’ WITH GRANT OPTION;
mysql> create database gluster mysql> use gluster mysql> CREATE TABLE IF NOT EXISTS test1 (i int, v varchar(1024), bb blob, INDEX USING BTREE (i)) mysql> INSERT INTO test1 (i, v) VALUES (1, ‘x9byod’) mysql> SELECT * FROM test1;
これにより、Gluster分散ファイルシステム上でMySQLを実行できます.Gluster+MySQLの安定性を検証するために、このシステムで高同時性と高障害率のテストを行います.
X9 (www.x9byod.com)