PXC(Percona XtraDB Cluster)单机多实例与多集群安装配置
pxc原理:
节点接收SQL请求后,在commit之前,由wsrepAPI调用galera库进行集群内广播,所有其他节点验证成功后事务在所有节点进行提交,反之rollback。pxc保证整个集群所有数据的强一致性,满足CAP理论中:consistency和availability
在一个事务提交的过程,Node1提交一个事物,必须要所有的节点通过了这个事务的请求,并且返回成功(ok)或者失败(conflict)信号之后,才真正的commit之后返回结果给用户,但是这里注意,最后在其它节点apply过程,并不会影响到给用户返回结果的过程。
大多数PXC集群都是单机单实例的,但是也有例外,为了充分利用机器性能,并且需要PXC集群架构,于是,多实例与多集群的部署需求就来了,以下便是安装步骤:
1. 环境描述:
CentOS7.2 PXC5.7.14 |
cluster1 |
cluster2 |
cluster3 |
node1,192.168.252.227 |
3307,4567 |
3308,5567 |
3309,6567 |
node2,192.168.252.228 |
3307,4567 |
3308,5567 |
3309,6567 |
node3,192.168.252.229 |
3307,4567 |
3308,5567 |
3309,6567 |
2. 安装配置cluster1
yum install socat nc -y
tar zxf Percona-XtraDB-Cluster-5.7.14-rel8-26.17.1.Linux.x86_64.ssl101.tar.gz -C/usr/local/
ln -s /usr/local/Percona-XtraDB-Cluster-5.7.14-rel8-26.17.1.Linux.x86_64.ssl101/usr/local/mysql
mkdir /export/mysql/mysql3307/{binlog,data,innodb,logs,tmp} -p
vim /export/mysql/mysql3307/my3307.cnf
[client]
port = 3307
socket = /export/mysql/mysql3307/tmp/mysql3307.sock
[mysql]
prompt = '<\U:\p [\d]>'
default_character_set = utf8
no_auto_rehash
[mysqld]
###GENERAL ###
user = mysql
port = 3307
socket = /export/mysql/mysql3307/tmp/mysql3307.sock
pid_file = /export/mysql/mysql3307/tmp/3307mysql.pid
datadir = /export/mysql/mysql3307/data
tmpdir = /export/mysql/mysql3307/tmp
character_set_server = utf8
lower_case_table_names = 1
default_storage_engine = InnoDB
#innodb = FORCE
###NETWORK AND LIMITS ###
back_log = 100
max_allowed_packet = 16M
max_connect_errors = 10000
max_connections = 1024
max_user_connections = 1000
interactive_timeout = 7200
wait_timeout = 7200
connect_timeout = 30
skip_external_locking
skip_name_resolve
###CACHES ###
thread_cache_size = 64
table_open_cache = 4096
table_definition_cache = 2048
query_cache_size = 0
query_cache_type = 0
tmp_table_size = 512M
max_heap_table_size = 512M
###PER-THREAD BUFFERS ###
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 1M
bulk_insert_buffer_size = 64M
###PERCONA SERVER ###
#extra_port = 13306
#gtid_mode = on
#enforce_gtid_consistency = 1
thread_handling = pool-of-threads
thread_pool_oversubscribe = 8
explicit_defaults_for_timestamp
###MyISAM ###
key_buffer_size = 128M
myisam_sort_buffer_size = 32M
###INNODB ###
transaction_isolation = READ-COMMITTED
innodb_buffer_pool_size = 32G
#innodb_buffer_pool_instances = 8
innodb_data_home_dir = /export/mysql/mysql3307/innodb
innodb_data_file_path = ibdata1:1G:autoextend
innodb_log_group_home_dir = /export/mysql/mysql3307/innodb
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_log_buffer_size = 32M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 10
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_open_files = 4096
#log_bin_trust_function_creators= 1
#innodb_flush_neighbors = 0
#innodb_io_capacity = 2000
#innodb_page_size = 8K
###REPLICATION ###
server_id = 2273307
sync_binlog = 0
log_bin = /export/mysql/mysql3307/binlog/mysql-bin
binlog_format = ROW
max_binlog_size = 256M
expire_logs_days = 10
binlog_cache_size = 1M
master_info_file = /export/mysql/mysql3307/binlog/master.info
relay_log = /export/mysql/mysql3307/binlog/relay-log
relay_log_info_file = /export/mysql/mysql3307/binlog/relay-log.info
max-relay-log-size = 256M
#relay_log_purge = 0
#read_only = 1
log_slave_updates = 1
slave_net_timeout = 60
skip_slave_start = 1
slave_parallel_workers = 16
#replicate-wild-do-table = mysql.%
#replicate-wild-ignore-table = test.%
#auto-increment-offset = 1
#auto-increment-increment = 2
#rpl_semi_sync_master_enabled = 1
#rpl_semi_sync_master_timeout = 1000
#rpl_semi_sync_slave_enabled = 1
###LOG ###
slow_query_log = 1
slow_query_log_file = /export/mysql/mysql3307/logs/slow.log
log_queries_not_using_indexes = 0
long_query_time = 1
log_error = /export/mysql/mysql3307/logs/error.log
#general_log = 0
general_log_file = /export/mysql/mysql3307/logs/general.log
###PXC ###
default_storage_engine=Innodb
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
wsrep_cluster_name = cluster1
wsrep_cluster_address = gcomm://192.168.252.227,192.168.252.228,192.168.252.229
wsrep_node_address = 192.168.252.227
wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = thunder:thunder
[mysqld_safe]
open-files-limit = 65535
#malloc-lib = /usr/local/mysql/lib/mysql/libjemalloc.so
[mysqldump]
quick
max_allowed_packet = 128M
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive_timeout
#将配置文件传到其它服务器上,并修改里面对应的wsrep_node_address
scp -r /export/mysql/mysql3307 192.168.252.228:/export/mysql
scp -r /export/mysql/mysql3307 192.168.252.229:/export/mysql
#在node1上面初始化并启动pxc的第一个节点,并对配置文件中的用户授权
cd /usr/local/mysql
./bin/mysqld--defaults-file=/export/mysql/mysql3307/my3307.cnf --initialize-insecure
./bin/mysqld--defaults-file=/export/mysql/mysql3307/my3307.cnf --wsrep-new-cluster &
mysql>GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'thunder'@'localhost'IDENTIFIED BY 'thunder';FLUSH PRIVILEGES;
#在node2,node3上面启动pxc的其它节点,观察是否启动成功,并在node1上面进行写入,观察node2,node3上面是否有进行同步
./bin/mysqld--defaults-file=/export/mysql/mysql3307/my3307.cnf &
到此,cluster1就安装完毕了
3. 安装cluster2
除配置文件外,其它与cluster1安装一样,cluster的端口为5567
###PXC ###
default_storage_engine=Innodb
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
wsrep_cluster_name = cluster2
wsrep_cluster_address =gcomm://192.168.252.227:5567,192.168.252.228:5567,192.168.252.229:5567wsrep_node_address = 192.168.252.228:5567
wsrep_provider_options = "base_port=5567"
wsrep_provider =/usr/local/mysql/lib/libgalera_smm.so
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = thunder:thunder
4. 安装cluster3
除配置文件外,其它与cluster1安装一样,
###PXC ###
default_storage_engine=Innodb
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode = 2
wsrep_cluster_name = cluster3
wsrep_cluster_address = gcomm://192.168.252.227:6567,192.168.252.228:6567,192.168.252.229:6567
wsrep_node_address = 192.168.252.228:6567
wsrep_provider_options = "base_port=6567"
wsrep_provider =/usr/local/mysql/lib/libgalera_smm.so
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = thunder:thunder
5. 说明:
1.PXC不支持myisam引擎,在node1上创建myisam表后,其它节点不会进行复制。
2.建议的最小集群节点数为3,虽然两个节点也能运行,但是无法保证数据的稳定,当两节点时,任何一个节点出故障,将导致集群无法访问。最大值<=8。
3.3台机器损失一台机器性能。
4.关于wsrep_sst_method,有3种可选:mysqldump,rsync,xtrabackup
mysqldump最慢
rsync最快,但是在同步期间会锁表
xtrabackup可以在线传输,只有在copy表结构文件时会锁表,和其备份原理一样
5.启动顺序,如果为单机单实例,则
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
第一个实例启动命令为:
/etc/init.d/mysql bootstarp-pxc
如果为多实例,则通过mysqld_safe的方式来启动:
./bin/mysqld --defaults-file=/export/mysql/mysql3307/my3307.cnf --wsrep-new-cluster &
6. 可在启动时指定从哪台机器进行同步
./bin/mysqld --defaults-file=/export/mysql/mysql3307/my3307.cnf --wsrep-sst-donor=’192.168.252.228’ &