sql >> データベース >  >> RDS >> Mysql

CentOS7へのPerconaXtraDBクラスターのインストール

    別のブログへようこそ。今回は、perconaXtraDBクラスターのセットアップ方法を紹介します。では、percona XtraDBとは何ですか? XtraDBはMySQLクラスタリングソリューションであり、高可用性を確保し、ダウンタイムとデータ損失を防ぎ、成長する環境に線形のスケーラビリティを提供します。クエリを実行すると、ノード上でローカルに実行されます。すべてのデータはローカルで利用可能であり、リモートアクセスは必要ありません。読み取りワークロードをスケーリングするための優れたソリューション。任意のノードに読み取りクエリを配置できます。 percona XtraDBをインストールすると、MySQLを個別にインストールする必要はありません。XtraDBはperconaリポジトリからそれを取得し、この記事を読んだ後、クラスターを準備できるようになります。

    前提条件:

    LinuxサーバーでperconaXtraDBクラスターを構成するには、3台のサーバーが必要です。情報は次のようになります。

    サーバーpercona1:192.168.56.110

    サーバーpercona2:192.168.56.113

    サーバーpercona3:192.168.56.114

    OS:CentOS 7

    2台のサーバーを使用することもできますが、公式ドキュメントでは奇数台のサーバーを推奨しています。例:3、5、7など。偶数のノードには行かないでください。彼らはそれをスプリットブレインと呼んでいます。スプリットブレインとは、ノードが相互に接続できなくなった後、両方が共有リソースを制御しようとするか、クラスターサービスを同時に提供しようとする状態です。

    注:Percona XtraDBクラスターをインストールするノードにrootアクセスが必要です
    (root権限を持つユーザーとしてログインするか、Sudoでコマンドを実行できる

    事前チェック:

    / etc / hostsファイルに以下のエントリを追加します->すべてのサーバー(percona1、percona2、percona3)

    192.168.56.110 percona1.localdomain percona1
    192.168.56.113 percona2.localdomain percona2
    192.168.56.114 percona3.localdomain percona3

    ファイアウォールポートを開く:

    すべてのサーバー(percona1、percona2、percona3)の以下のポートを開く必要があります
    3306
    4444
    4567
    4568

    firewall-cmd --zone=public --add-service=mysql --permanent
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --zone=public --add-port=4567/tcp --permanent
    firewall-cmd --zone=public --add-port=4568/tcp --permanent
    firewall-cmd --zone=public --add-port=4444/tcp --permanent
    firewall-cmd --zone=public --add-port=4567/udp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    [[email protected] ~]# firewall-cmd --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: enp0s3 enp0s8
    sources: 
    services: ssh dhcpv6-client mysql
    ports: 3306/tcp 4567/tcp 4568/tcp 4444/tcp 4567/udp
    protocols: 
    masquerade: no
    forward-ports: 
    source-ports: 
    icmp-blocks: 
    rich rules

    SELinuxを無効にする:——->すべてのサーバー(percona1、percona2、percona3)

    [[email protected] ~]# setenforce 0

    これにより、SELinuxは現在のセッションで許可モードになりますが、永続的に無効にする必要があります。
    / etc / sysconfig / selinuxファイルを編集してselinux変数をすべてのサーバー(percona1、percona2、percona3)で無効に設定します:
    vi / etc / sysconfig / selinux
    SELINUX =disable

    各サーバーにpingを送信してアクセス可能性を確認するには、すべてのサーバーが相互にアクセス可能である必要があります。

    前提条件RPMを下回るインストール:——->すべてのサーバー(percona1、percona2、percona3)

    epel-release
    libev
    socat

    [[email protected] ~]# yum -y install epel-release 
    Installed:
    epel-release.noarch 0:7-11
    
    [[email protected] yum.repos.d]# yum -y install libev 
    Installed:
    libev.x86_64 0:4.15-7.el7
    
    [[email protected] Desktop]# yum -y install socat 
    Installed:
    socat.x86_64 0:1.7.3.2-2.el7

    Perconaリポジトリを追加します:——->すべてのサーバー(percona1、percona2、percona3)

    次に、3つのサーバー(percona1、percona2、percona3)すべてにperconaリポジトリを追加します。

    [[email protected] ~]# sudo yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    Installed:
    percona-release.noarch 0:1.0-13 
    Complete!

    Percona-XtraDB-Clusterをインストールします:——->すべてのサーバー(percona1、percona2、percona3)

    [[email protected] ~]# yum install -y Percona-XtraDB-Cluster-57
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    .
    .
    .
    
    Installed:
    Percona-XtraDB-Cluster-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-shared-57.x86_64 0:5.7.27-31.39.1.el7 
    Percona-XtraDB-Cluster-shared-compat-57.x86_64 0:5.7.27-31.39.1.el7
    
    Dependency Installed:
    Percona-XtraDB-Cluster-client-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-server-57.x86_64 0:5.7.27-31.39.1.el7 
    percona-xtrabackup-24.x86_64 0:2.4.17-1.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 
    perl-Digest.noarch 0:1.17-245.el7 perl-Digest-MD5.x86_64 0:2.52-3.el7 
    qpress.x86_64 0:11-1.el7
    
    Replaced:
    mariadb-libs.x86_64 1:5.5.60-1.el7_5
    Complete!

    PerconaXtraDBがインストールされているかどうかを確認してみましょう。

    [[email protected] ~]# yum search Percona-XtraDB
    
    NOTE: Till here all above steps should be perfomed on all servers (percona1,percona2,percona3)
    書き込みセットレプリケーション用のノードの構成
    ON Percona1:

    MySQLサーバーを起動し、percona1サーバーでのみrootパスワードを変更しましょう

    [[email protected] ~]# systemctl start mysql
    [[email protected] ~]# grep password /var/log/mysqld.log
    2019-12-11T10:35:12.135133Z 1 [Note] A temporary password is generated for [email protected]: hJ(l8ySe>f>E
    
    Note : copy the password "hJ(l8ySe>f>E" we are going to change this password :
    
    [[email protected] ~]# mysql_secure_installation ------->on all server(percona1,percona2,percona3)
    
    Securing the MySQL server deployment.
    Enter password for user root:
    
    The existing password for the user account root has expired. Please set a new password.
    
    New password:
    
    Re-enter new password:
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: 
    Using existing password for root.
    Change the password for root ? ((Press y|Y for Yes, any other key for No) :
    
    ... skipping.
    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : yes
    Success.
    
    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : yes
    Success.
    
    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
    
    ... skipping.
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : yes
    Success.
    
    All done!

    次に、percona1でMySQLサーバーを停止します。

    [[email protected] ~]# systemctl stop mysql

    次に、レプリケーションを構成し、my.cnfファイルにレプリケーション情報を追加します。

    percona1でレプリケーション設定を構成する:
    cat >>/etc/my.cnf<<EOF
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=perconacluster
    wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
    wsrep_node_name=percona1
    wsrep_node_address=192.168.56.110
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=perconarep:perconapasswd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    EOF

    次に、最初のノードをブートストラップしてクラスターを初期化します。これは、メインデータベースのあるノードである必要があります。このノードは、クラスターのデータソースとして使用されます。この場合はpercona1サーバーです

    [[email protected] ~]# systemctl start [email protected]
    
    Before configuring replication we need to create a separate user for replication which will be used for the replication process. why we need replication user? when you add a new node to the cluster it dumps the current node configuration and transfers it to the second node for that reason we need a separate user.

    注: ユーザーが変数“ wsrep_sst_auth”に対して同じように言及されていることを確認してください my.cnfファイルで使用されているレプリケーション構成で。

    [[email protected] ~]#mysql -u root -p 
    mysql>create user [email protected]'%' identified by 'perconapasswd';
    mysql>grant all on *.* to [email protected]'%';
    mysql>flush privileges;
    オンPercona2:

    percona2でレプリケーション設定を構成します:

    cat >>/etc/my.cnf<<EOF
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=perconacluster
    wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
    wsrep_node_name=percona2
    wsrep_node_address=192.168.56.113
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=perconarep:perconapasswd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    EOF

    ここでmysqlを起動すると、このノードがクラスターに追加されます。

    [[email protected] ~]# systemctl start mysql
    オンPercona3:

    percona3でレプリケーション設定を構成します:

    cat >>/etc/my.cnf<<EOF
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=perconacluster
    wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
    wsrep_node_name=percona3
    wsrep_node_address=192.168.56.114
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=perconarep:perconapasswd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    EOF

    ここでmysqlを起動すると、このノードがクラスターに追加されます。

    [[email protected] ~]# systemctl start mysql

    mysqlログ(var / log / mysqld.log)でそのようなメッセージを監視します

    (percona2):0.0(percona1)からの状態転送が完了しました

    1.0(percona3):0.0(percona1)からの状態転送が完了しました

    クラスタが初期化されていることを確認するには、次のコマンドを実行します。

    mysql> show status like 'wsrep%';
    +----------------------------------+-------------------------------------------------------------+
    | Variable_name | Value |
    +----------------------------------+-------------------------------------------------------------+
    | wsrep_local_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
    | wsrep_protocol_version | 9 |
    | wsrep_last_applied | 6 |
    .
    .
    .
    | wsrep_flow_control_recv | 0 |
    | wsrep_flow_control_interval | [ 173, 173 ] |
    | wsrep_flow_control_interval_low | 173 |
    | wsrep_flow_control_interval_high | 173 |
    | wsrep_flow_control_status | OFF |
    .
    .
    | wsrep_local_state | 4 |
    | wsrep_local_state_comment | Synced |
    | wsrep_cert_index_size | 1 |
    | wsrep_cert_bucket_count | 22 |
    | wsrep_gcache_pool_size | 2384 |
    .
    .
    | wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306 |
    | wsrep_cluster_weight | 3 |
    | wsrep_desync_count | 0 |
    | wsrep_evs_delayed | |
    | wsrep_evs_evict_list | |
    | wsrep_evs_repl_latency | 0/0/0/0/0 |
    | wsrep_evs_state | OPERATIONAL |
    | wsrep_gcomm_uuid | 1d16f574-1c1b-11ea-b5dd-574c9a653584 |
    | wsrep_cluster_conf_id | 3 |
    | wsrep_cluster_size | 3 |
    | wsrep_cluster_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
    | wsrep_cluster_status | Primary |
    | wsrep_connected | ON |
    | wsrep_local_bf_aborts | 0 |
    | wsrep_local_index | 0 |
    | wsrep_provider_name | Galera |
    | wsrep_provider_vendor | Codership Oy <[email protected]> |
    | wsrep_provider_version | 3.39(rb3295e6) |
    | wsrep_ready | ON |
    +----------------------------------+-------------------------------------------------------------+
    71 rows in set (0.00 sec)

    ご覧のとおり、クラスターサイズは3 “ wsrep_cluster_size | 3インチ また、3つのノードのIPも確認できます
    wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306

    クラスターをテストします:

    percona 1でデータベースを作成してから、percoan3が複製されていることを確認します。

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sys |
    +--------------------+
    4 rows in set (0.03 sec)
    mysql> CREATE DATABASE perconatest;
    Query OK, 1 row affected (0.03 sec)

    次に、percona3を確認して、「perconatest」DBが作成されることを確認します

    [[email protected] ~]# mysql -uroot -p -e "show databases"
    Enter password: 
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | perconatest |
    | performance_schema |
    | sys |
    +--------------------+

    1. インストール時にアプリケーションがクラッシュし、エラーsqlite3_exec-同期モードの設定に失敗しました=1(通常)

    2. MySQLで今月の記録を取得する方法

    3. MySQL:rootユーザーを除くユーザー'test' @'localhost'(パスワード:YESを使用)のアクセスが拒否されました

    4. MSSQLServerでの長時間実行クエリのトラブルシューティング