Percona-XtraDB-Cluster的安裝
1. 準備工作
1.1. PXC介紹
Percona-XtraDB-Cluster時MySQL的高可用性和可擴展性的解決方案。其特性包含:同步複製,多主複製,並行複製,數據一致性。主要組件爲Percona-XtraDB-Cluster-server,Percona-XtraDB-Cluster-client,Percona-XtraDB-Cluster-galera。
1.2. 環境準備
192.168.10.146----CentOS-6.*
192.168.10.147----CentOS-6.5 (ftp yum)
192.168.10.148----CentOS-6.*
此處使用了一臺CentOS-6.5系統的機器作爲ftp yum源。其他兩臺機器爲CentOS-6.*環境,使用CentOS-6.5的源。配置均爲1G內存,2G swap,32G動態磁盤空間。
需要在每臺機器上確認以下服務:
1.SElinux爲關閉狀態。
2.iptables關閉,如開啓,放通端口3306,4444,,4567以及4568.
3.需要配置文件/etc/resolv.conf,添加nameserver,能夠解析域名。
2. 安裝Percona-Server
2.1. 安裝
在所有服務器上安裝Percona-Server:
yum installhttp://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
yum installhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install Percona-Server-shared-compat
yum install Percona-Server-server-55Percona-Server-client-55
-----使用centos-6.1-4 yum源,會有如下錯誤,文件均存在於本機:
Error: Package:Percona-Server-shared-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libssl.so.10(libssl.so.10)(64bit)
Error: Package:Percona-Server-shared-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libcrypto.so.10(libcrypto.so.10)(64bit)
Error: Package:Percona-Server-client-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libssl.so.10(libssl.so.10)(64bit)
Error: Package:Percona-Server-server-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libcrypto.so.10(libcrypto.so.10)(64bit)
Error: Package:Percona-Server-server-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libssl.so.10 (libssl.so.10)(64bit)
Error: Package:Percona-Server-client-55-5.5.39-rel36.0.el6.x86_64 (percona)
Requires: libcrypto.so.10(libcrypto.so.10)(64bit)
Youcould try using --skip-broken to work around the problem
Youcould try running: rpm -Va --nofiles –nodigest
由於openssl及其他依賴包版本的原因,即使本地有libssl.so.10,libssl.so.10文件,Percona仍然無法識別。因此選擇CentOS-6.5來作爲yum源,對本地依賴包進行升級。
-----使用centos-6.5 yum源,能成功進行依賴性解析,如下:
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing:
Percona-Server-client-55 x86_64 5.5.39-rel36.0.el6 percona 5.9 M
Percona-Server-server-55 x86_64 5.5.39-rel36.0.el6 percona 15 M
Installing for dependencies:
Percona-Server-shared-55 x86_64 5.5.39-rel36.0.el6 percona 647 k
libaio x86_64 0.3.107-10.el6 Packages 21 k
make x86_64 1:3.81-20.el6 Packages 389 k
Updating for dependencies:
openssl x86_64 1.0.1e-15.el6 Packages 1.5 M
Transaction Summary
===============================================================================
Install 5 Package(s)
Upgrade 1 Package(s)
2.2. 初始化
在所有服務器上配置/etc/my.cnf:
[mysqld]
# basic settings
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
socket = /opt/mysql/run/mysqld.sock
port = 3306
pid-file = /opt/mysql/run/mysqld.pid
skip-external-locking
max_allowed_packet = 16M
# innodb settings
default-storage-engine = INNODB
innodb_file_per_table = 1
log-bin = /opt/mysql/binlogs/bin-log-mysqld
log-bin-index =/opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir = /opt/mysql/data
innodb_data_file_path =ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/mysql/data
binlog-do-db = testdb
# server id
server-id=1
# other settings
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /opt/mysql/run/mysqld.pid
open-files-limit = 8192
[mysqlhotcopy]
interactive-timeout
[client]
port = 3306
socket = /opt/mysql/run/mysqld.sock
default-character-set = utf8
創建相對應目錄以供使用,並修改用戶:
mkdir -p/opt/mysql/{data,tmp,run,binlogs,log}
chown mysql:mysql /opt/mysql/{data,tmp,run,binlogs,log}
對數據庫進行初始化:
su – mysql
mysql_install_db --user=mysql--datadir=/opt/mysql/data/
或者使用:
/usr/bin/mysql_install_db --user=mysql--datadir=/opt/mysql/data/
/etc/init.d/mysql start
登錄查看數據庫,驗證數據庫成功後退出。
3. 刪除包
原有軟件包會與PXC軟件包衝突,所以要刪除。
Error: Percona-XtraDB-Cluster-clientconflicts with Percona-Server-client-55-5.5.34-rel32.0.591.rhel6.x86_64
Error: Percona-XtraDB-Cluster-serverconflicts with Percona-Server-server-55-5.5.34-rel32.0.591.rhel6.x86_64
Error: Percona-XtraDB-Cluster-shared conflictswith Percona-Server-shared-55-5.5.34-rel32.0.591.rhel6.x86_64
停掉數據庫,刪除包:
/etc/init.d/mysql stop
rpm -qa | grep Percona-Server | grep -vcompat | xargs sudo rpm -e --nodeps
4. 配置PXC
4.1. 添加PXC支持
對每臺服務器添加XtraDB Cluster支持,配置my.cnf:
第一個節點:
[mysqld]
# basic settings
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
socket = /opt/mysql/run/mysqld.sock
port = 3306
pid-file = /opt/mysql/run/mysqld.pid
skip-external-locking
max_allowed_packet = 16M
# innodb settings
default-storage-engine = INNODB
innodb_file_per_table = 1
log-bin = /opt/mysql/binlogs/bin-log-mysqld
log-bin-index =/opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir = /opt/mysql/data
innodb_data_file_path =ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/mysql/data
binlog-do-db = testdb
# xtradb cluster settings
binlog_format = ROW
wsrep_cluster_name = mycluster
wsrep_cluster_address =gcomm://192.168.10.146,192.168.10.147,192.168.10.148
wsrep_node_address = 192.168.10.146
wsrep_provider =/usr/lib64/libgalera_smm.so
wsrep_sst_method = rsync
#wsrep_sst_method = xtrabackup
#wsrep_sst_auth = sst:secret
#wsrep_slave_threads=4
#log_slave_updates
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
# server id
server-id=1
# other settings
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /opt/mysql/run/mysqld.pid
open-files-limit = 8192
[mysqlhotcopy]
interactive-timeout
[client]
port = 3306
socket = /opt/mysql/run/mysqld.sock
default-character-set = utf8
注:wsrep_node_address後寫本機IP地址或者hostname,應確保不一樣。server_id應區分開。
說明:wsrep_sst_method = xtrabackup-v2爲官方推薦的配置,同時支持rsync等其他方式。但是此處測試選擇xtrabackup方式會在新增節點時報錯handshake failed。所以更改爲rsync方式。
4.2. 安裝PXC套件
yum install Percona-Server-shared-compat
yum install Percona-XtraDB-Cluster-serverPercona-XtraDB-Cluster-client
4.3. 啓動
4.3.1. 啓動第一個節點
/etc/init.d/mysql bootstrap-pxc
Bootstrapping PXC (Percona XtraDBCluster)Starting MySQL (Percona XtraDB Cluster).. SUCCESS!
mysql –uroot –p
mysql> show global status like 'wsrep%';
+----------------------------------+----------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------+
| wsrep_local_state_uuid |4682078f-3f0b-11e4-a6bf-66e0202d8999 |
| wsrep_protocol_version | 6 |
| wsrep_last_committed | 3 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_received | 2 |
| wsrep_received_bytes | 143 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 1 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 0.000000 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 0 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_incoming_addresses | 192.168.10.147:3306 |
| wsrep_evs_repl_latency |2.28e-06/5.2768e-06/8.433e-06/2.149e-06/5 |
| wsrep_cluster_conf_id | 1 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_state_uuid |4682078f-3f0b-11e4-a6bf-66e0202d8999 |
| 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.7(r7f44a18) |
| wsrep_ready | ON |
| wsrep_thread_count | 5 |
+----------------------------------+----------------------------------------------+
53 rows in set (0.01 sec)
create database testdb;
use testdb;
CREATE TABLE `hostgroup` (
-> `hostgroup_id` tinyint(4)NOT NULL AUTO_INCREMENT,
-> `hostgroup_name` char(20)DEFAULT NULL,
-> `hostgroup_next`tinyint(4) NOT NULL,
-> `colo_name` char(4) NOTNULL,
-> PRIMARY KEY(`hostgroup_id`)
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
GRANT RELOAD, LOCK TABLES, REPLICATIONCLIENT ON *.* TO 'sst'@'localhost' IDENTIFIED BY 'secret';
flush privileges;
4.3.2. 增加節點
第二個新增節點,配置my.cnf文件:
[mysqld]
# basic settings
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
socket = /opt/mysql/run/mysqld.sock
port = 3306
pid-file = /opt/mysql/run/mysqld.pid
skip-external-locking
max_allowed_packet = 16M
# innodb settings
default-storage-engine = INNODB
innodb_file_per_table = 1
log-bin = /opt/mysql/binlogs/bin-log-mysqld
log-bin-index =/opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir = /opt/mysql/data
innodb_data_file_path =ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/mysql/data
binlog-do-db = testdb
# xtradb cluster settings
binlog_format = ROW
wsrep_cluster_name = mycluster
wsrep_cluster_address =gcomm://192.168.10.146,192.168.10.147,192.168.10.148
wsrep_node_address = 192.168.10.148
wsrep_provider =/usr/lib64/libgalera_smm.so
wsrep_sst_method = rsync
#wsrep_sst_method = xtrabackup
#wsrep_sst_auth = sst:secret
#wsrep_slave_threads=4
#log_slave_updates
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
# server id
server-id=2
# other settings
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /opt/mysql/run/mysqld.pid
open-files-limit = 8192
[mysqlhotcopy]
interactive-timeout
[client]
port = 3306
socket = /opt/mysql/run/mysqld.sock
default-character-set = utf8
啓動mysql,區分於第一個節點:
/etc/init.d/mysql start
在主節點查看:
mysql> show global status like 'wsrep%';
+----------------------------------+----------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------+
| wsrep_local_state_uuid |4682078f-3f0b-11e4-a6bf-66e0202d8999 |
| wsrep_protocol_version | 6 |
| wsrep_last_committed | 3 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_received | 6 |
| wsrep_received_bytes | 412 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 1 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 0.000000 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 0 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_incoming_addresses | 192.168.10.146:3306,192.168.10.147:3306 |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_cluster_conf_id | 2 |
| wsrep_cluster_size | 2 |
| wsrep_cluster_state_uuid | 4682078f-3f0b-11e4-a6bf-66e0202d8999 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 1 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy<[email protected]> |
| wsrep_provider_version | 3.7(r7f44a18) |
| wsrep_ready | ON |
| wsrep_thread_count | 5 |
+----------------------------------+---------- -----------------------------------+
53 rows in set (0.00 sec)
在新增節點上登入mysql,可以通過show databases查看testdb已經同步。
第三個節點,配置my.cnf:
[mysqld]
# basic settings
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
socket = /opt/mysql/run/mysqld.sock
port = 3306
pid-file = /opt/mysql/run/mysqld.pid
skip-external-locking
max_allowed_packet = 16M
# innodb settings
default-storage-engine = INNODB
innodb_file_per_table = 1
log-bin = /opt/mysql/binlogs/bin-log-mysqld
log-bin-index = /opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir = /opt/mysql/data
innodb_data_file_path =ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/mysql/data
binlog-do-db = testdb
# xtradb cluster settings
binlog_format = ROW
wsrep_cluster_name = mycluster
wsrep_cluster_address =gcomm://192.168.10.146,192.168.10.147,192.168.10.148
wsrep_node_address = 192.168.10.148
wsrep_provider =/usr/lib64/libgalera_smm.so
wsrep_sst_method = rsync
#wsrep_sst_method = xtrabackup
#wsrep_sst_auth = sst:secret
#wsrep_slave_threads=4
#log_slave_updates
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
# server id
server-id=3
# other settings
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /opt/mysql/run/mysqld.pid
open-files-limit = 8192
[mysqlhotcopy]
interactive-timeout
[client]
port = 3306
socket = /opt/mysql/run/mysqld.sock
default-character-set = utf8
啓動:
/etc/init.d/mysql start
可依照此方法依次添加多個節點。