MYSQL HA配置マニュアル

12268 ワード

1 MySQLプライマリ・ライト・レプリケーションの有効化
1.1システムのデフォルトのデータベースmariadbをアンインストールする
インストールmysqlインストールパッケージの互換性に問題が発生しました.まず、システムに付属するmariadbをアンインストールします.
       mariadb

rpm -qa|grep mariadb

  mariadb

rpm -e --nodeps  mariadb-libs-5.5.33a-3.el7.x86_64

rpm -e --nodeps  mariadb-server-5.5.44-2.el7.x86_64

rpm -e mariadb-devel --nodeps

rpm -e mariadb --nodeps

  rpm -qa|grep mariadb      

1.2旧版インストールパッケージのアンインストール
MySQLおよび関連RPMパッケージを確認し、インストールするかどうか、インストールがある場合は削除(rpm–e名)
rpm -qa | grep -i mysql yum -y remove MySQL-*
1.3 MySQLのインストール
1.3.1インストールMySQLを解凍する
tar xvf MySQL-5.5.52-1.el7.x86_64.rpm-bundl.tar
MySQL-client-5.5.52-1.el7.x86_64.rpm

 MySQL-devel-5.5.52-1.el7.x86_64.rpm

 MySQL-embedded-5.5.52-1.el7.x86_64.rpm

 MySQL-server-5.5.52-1.el7.x86_64.rpm

 MySQL-shared-5.5.52-1.el7.x86_64.rpm

 MySQL-shared-compat-5.5.52-1.el7.x86_64.rpm

 MySQL-test-5.5.52-1.el7.x86_64.rpm

MySQL-client-5.5.52-1をインストールします.el7.x86_64.rpm,MySQL-server-5.5.52-1.el7.x86_64.rpm,MySQL-devel-5.5.52-1.el7.x86_64.rpmでOK
rpm -ivh MySQL-server-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-client-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-5.5.52-1.el7.x86_64.rpm

1.3.2プロファイルの場所の変更
cp/usr/share/mysql/my-default.cnf/etc/my.cnf
1.3.3 MySQLの初期化とパスワードの設定
データベースを初期化しmysql/usr/bin/mysql_を起動install_db service mysql start
rootアカウントの初期パスワードcat/root/.mysql_secret The random password set for the root user at Wed Dec 11 23:32:50 2013 (local time): qKTaFZnl
rootパスワードを111111に変更
mysql -uroot –pqKTaFZnl
mysql> SET PASSWORD = PASSWORD('111111');   
mysql> exit
  
mysql> use mysql;
mysql> update user set password=password("111111") where user='root';
mysql> flush privileges;
mysql> exit;

ログインmysql-uroot-p 11111の検証
1.3.4 MySQL JDBCドライバのインストール
yum -y install mysql-connector-java
1.3.5リモートログインの許可
mysql> use mysql;
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| node1a146 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| 127.0.0.1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| ::1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
+-----------+------+-------------------------------------------+
mysql> update user set password=password('111111') where user='root';
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;
mysql> exit

1.3.6起動の設定
chkconfig mysql on chkconfig --list | grep mysql
1.3.7 MySQLのデフォルトのインストール場所
/var/lib/mysql/#データベースディレクトリ/usr/share/mysql#プロファイルディレクトリ/usr/bin#関連コマンドディレクトリ/etc/init.d/mysql#起動スクリプト
1.3.8文字セットとデータストレージパスの変更
初期文字セットの表示
mysql> show variables like '%collation%';

+----------------------+-------------------+

| Variable_name | Value |

+----------------------+-------------------+

| collation_connection | utf8_general_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

+----------------------+-------------------+

3 rows in set (0.00 sec)

mysql> show variables like '%char%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database   | latin1 |

| character_set_filesystem | binary                |

| character_set_results | utf8 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

構成/etc/my.cnfファイル、データ格納経路、mysqlを変更する.sockパスおよびデフォルト符号化utf-8.
[client]

password = 111111

port = 3306

default-character-set=utf8

[mysqld]

port = 3306

character_set_server=utf8

character_set_client=utf8

collation-server=utf8_general_ci

(  linux mysql       :       ,        ; 0:     ,1:      )

lower_case_table_names=1

(       ,    151,MySQL           16384; )

max_connections=1000

[mysql]

default-character-set = utf8

再起動して有効にする
service mysql restart
1.3.9異常処理
質問1:
sqlタイムズの次のエラーが実行されたのは、データベースをアップグレードしたためで、アップグレードが完了した後mysql_を使用していないためです.upgradeのデータ構造のアップグレードによるものです.
ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50544, now running 50637. Please use mysql_upgrade to fix this error.
mysql_の使用upgradeコマンド
root@localhost ~]# mysql_upgrade -u root -p 111111
1.4 MySQLマスター同期の構成
マスター同期は2台のマシンが互いにメインの関係であり,いずれのマシンにも書き込みが同期する.
1.4.1同期アカウントの作成
同期アカウントを2台のマシンにそれぞれ設定
master 1マシン:
mysql> grant all privileges on . to 'repl'@'%' identified by '123456'; mysql> flush privileges;
master 2マシン:mysql>grant all privileges on.to 'repl'@'%' identified by '123456'; mysql> flush privileges;
1.4.2データベース・パラメータの構成
master 1マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf
[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server-id=1

log-bin=mysql-bin

relay_log=mysql-relay-bin

binlog_format=ROW

report-host = master2

report-user = repl

report-password = 123456

report-port = 3306

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

ここで、赤は新規内容:l Log-bin:バイナリログファイルl Server-idの起動:ネイティブデータベースID(および)l Binlog_format:3つのレプリケーション方法があります:ROWSTATEMENTMIXED、デフォルトはSTATEMENT l report-host、report-user、report-password、report-portはmasterレプリケーションのホスト名、ユーザー、パスワード、ポート番号です.
3、mysqlを起動する
service mysql start
Master 2マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf ```shell [mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
relay_log=mysql-relay-bin
binlog_format=ROW
report-host = master2
report-user = repl
report-password = 123456
report-port = 3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid``shell 3、mysqlを起動する
service mysql start
1.4.3データベースのバックアップ
同期に失敗したときにデータが失われないように、同期が必要な2つのデータベースデータをバックアップします.バックアップmysql
mysqldump --all-databases -uroot -p > mysql.sql
1.4.4マスター2同期マスター1の設定
master 1マシン:
mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| binlog.000003 | 365 | | |

+---------------+----------+--------------+------------------+

1 row in set (0.03 sec)

mysql> unlock tables;

master 2マシン:
マスター2同期マスター1データの設定
mysql> change master to master_host='master1IP', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000003',master_log_pos=365;

    
mysql> start slave;

                   ,     yes  
mysql> show slave status \G 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

master_hostはmaster 1のIP master_を表しますuserは、メインライブラリmaster 1で同期が許可されているユーザーmaser_を表します.passwordは同期ユーザのパスワードmaster_を表しますlog_fileは、どのbinlogファイルからmaster_の同期を開始するかを示します.log_posは、binlogファイルのposノードの位置から同期を開始することを示す
同期が主にSlaveを表示しているかどうかを確認します.IO_RunningとSlave_SQL_Runningオプション.正常に同期している場合、この2つの選択は同時にYESである必要があります.
Slave_IO_RunningはNOであり,スレーブライブラリとマスターライブラリのネットワークが通じない可能性があることを示している.Slave_SQL_RunningはNOであり,スレーブライブラリとマスターライブラリのデータが一致しない可能性が高いことを示している.
Slave_IO_Running:Connecting、同期したユーザーパスワードが間違っている可能性があります.
同じように逆に同じ操作をする
1.4.5マスター1同期マスター2の設定
master 2マシン:
mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000004 | 207 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.03 sec)

mysql> unlock tables;

master 1マシン:
mysql> change master tomaster_host='10.1.1.21', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000004',master_log_pos=207;
mysql> start slave;
mysql> show slave status \G  
                   ,     yes  
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

これを介して、マスターは同期して完成して、簡単にテストすることができて、それぞれ2つの機械の上でデータを書いて別の機械の上で同期することができるかどうかを見ます
PS:Slave_を間違えた場合IO_Running:NOは同期したアカウントが正常に作成されているかどうかを確認できます!
1.5 keepalivedをインストールし、監視を設定する
keepalivedは2台のMySQLサーバにインストールされています
まずkeepalivedをインストールする過程は説明しないで正常に解凍してインストールすればいいです
インストール後vim/etc/keepalived/keepalivedを構成する.confの内容は以下の通りです
10.1.1.20のプロファイル

! Configuration File for keepalived

global_defs {

  notification_email {

    [email protected]

    [email protected]

    [email protected]

  }

  notification_email_from [email protected]

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

vrrp_instance VI_1 {

  state backup      #        BACKUP

  interface eth0

  virtual_router_id 51

  priority 100      #   ,     90 

  advert_int 1

  nopreempt          #   ,              ,          

  authentication {

      auth_type PASS

      auth_pass 1111

  }

  virtual_ipaddress {

      10.1.1.25

  }

}

virtual_server 10.1.1.25 3306 {

  delay_loop 6

  lb_algo wrr

  lb_kind DR

  persistence_timeout 50        #       

  protocol TCP

real_server 10.1.1.20 3306 {

      weight 3

      notify_down /tmp/nimei.sh    #   mysql           (       )

      TCP_CHECK {

      connect_timeout 10        #      

      nb_get_retry 3            #     

      delay_before_retry 3      #      

      connect_port 3306        #       

        }

      }

}

10.1.1.21のプロファイル
! Configuration File for keepalived

global_defs {

  notification_email {

    [email protected]

    [email protected]

    [email protected]

  }

  notification_email_from [email protected]

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

vrrp_instance VI_1 {

  state backup

  interface eth0

  virtual_router_id 51

  priority 90

  advert_int 1

  authentication {

      auth_type PASS

      auth_pass 1111

  }

  virtual_ipaddress {

      10.1.1.25

  }

}

virtual_server 10.1.1.25 3306 {

  delay_loop 6

  lb_algo wrr

  lb_kind DR

  persistence_timeout 50

  protocol TCP

real_server 10.1.1.21 3306 {

      weight 3

      notify_down /tmp/nimei.sh

      TCP_CHECK {

      connect_timeout 10

      nb_get_retry 3

      delay_before_retry 3

      connect_port 3306

          }

      }

} 

mysqlサービスが停止しているかどうかを監視するスクリプトを作成し、上のプロファイルの場所に従ってスクリプトを作成します.
vim/tmp/nimei.sh
#!/bin/sh 

pkill keepalived

スクリプトは簡単です.keepalivedがmysqlサービスが停止したことを検出した後、このスクリプトをトリガーし、keepalivedプロセスを殺し、別のマシンに引き継がせることを目的としています.
修正後keeplivedサービスを開始
このクラスタ全体の構築が完了しました
1.6テスト
機械を探して仮想ipでmysqlを接続します
[root@localhost html]# mysql -uab  -h 10.1.1.25 -p123

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 736

Server version: 5.1.66-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

このように成功してつながって、それからあなたは任意にある機械を閉じることができて、あるいはある機械のmysqlサービス、まだつながっているかどうかを見てみましょう!!