PXC5.7(Percona XtraDB Cluster)+HAproxy集群部署

PXC是Percona XtraDB Cluster的缩写,是一种具有高可用性和高扩展性的MySQL开源集群。它集成了Percona Server和Percona XtraBackup,同时采用了Codership Galera库。

优点:
1.准同步复制
2.多个可同时读写节点,可实现写扩展,较分片方案更进一步
3.自动节点管理
4.数据严格一致
5.服务高可用

缺点:
1.只支持innodb引擎
2.所有表都要有主键
3.所有的写操作都将发生在所有节点上,存在写扩大问题
4.加入新节点,开销大。需要复制完整的数据。

部署准备工作

主机名 IP
pxc-linux-28 192.168.253.28
pxc-linux-29 192.168.253.29
pxc-linux-30 192.168.253.30
haproxy-linux-31 192.168.253.31

三个PXC节点分别配置防火墙

[[email protected] ~]# firewall-cmd --add-port=3306/tcp --permanent
[[email protected] ~]# firewall-cmd --add-port=4567/tcp --permanent
[[email protected] ~]# firewall-cmd --add-port=4568/tcp --permanent
[[email protected] ~]# firewall-cmd --add-port=4444/tcp --permanent
[[email protected] ~]# firewall-cmd --reload

安装相关yum源

rpm -Uvh https://www.percona.com/downloads/percona-release/redhat/latest/percona-release-0.1-4.noarch.rpm

安装pxc

yum install Percona-XtraDB-Cluster-57 -y

分别在三个节点创建数据存储目录

mkdir -p /data/local/percona-xtradb-cluster/data
chown -R mysql:mysql /data/local/percona-xtradb-cluster/data
mkdir -p /data/local/percona-xtradb-cluster/run
chown -R mysql:mysql /data/local/percona-xtradb-cluster/run
mkdir -p /data/logs/mysql
chown -R mysql:mysql /data/logs/mysql

修改/etc/my.cnf配置文件,其他两台节点需要修改server_id和wsrep_node_address

pxc-linux-28:

#cat /etc/my.cnf
[client]
port = 3306
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
default-character-set = utf8mb4
[mysqld]
user =  mysql
innodb_buffer_pool_size = 1024M
character_set_server = utf8mb4
datadir = /data/local/percona-xtradb-cluster/data
port = 3306
server_id = 28
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
pid-file = /data/local/percona-xtradb-cluster/run/mysql.pid
log-error = /data/logs/mysql/error.log
log_warnings = 2
slow_query_log_file = /data/logs/mysql/slow.log
long_query_time = 2
log_timestamps=SYSTEM
lower_case_table_names = 1
key_buffer_size = 1344M
event_scheduler=ON
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.253.28,192.168.253.29,192.168.253.30
binlog_format=ROW
pxc_strict_mode=PERMISSIVE
max_connect_errors=1000
max_allowed_packet = 1024M
default_storage_engine=InnoDB
#Innodb
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 5
innodb_lock_wait_timeout = 50
innodb_log_file_size = 1024M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 5G
innodb_read_io_threads = 24
innodb_write_io_threads = 24
log_bin_trust_function_creators=1
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
# CACHES AND LIMITS #
tmp_table_size = 32M
max_heap_table_size = 32M
max_connections = 1000
thread_cache_size = 50
open_files_limit = 65535
table_definition_cache = 4096
table_open_cache = 5000
#wsrep
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_node_name = pxc-linux-28
wsrep_node_address=192.168.253.28
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_name=test-pxc
wsrep_sst_auth="sync_rep:abc123"

pxc-linux-29:

[client]
port = 3306
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
default-character-set = utf8mb4
[mysqld]
user =  mysql
innodb_buffer_pool_size = 1024M
character_set_server = utf8mb4
datadir = /data/local/percona-xtradb-cluster/data
port = 3306
server_id = 29
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
pid-file = /data/local/percona-xtradb-cluster/run/mysql.pid
log-error = /data/logs/mysql/error.log
log_warnings = 2
slow_query_log_file = /data/logs/mysql/slow.log
long_query_time = 2
log_timestamps=SYSTEM
log_bin_trust_function_creators=1
lower_case_table_names=1
key_buffer_size = 1344M
event_scheduler=ON
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.253.28,192.168.253.29,192.168.253.30
binlog_format=ROW
pxc_strict_mode=PERMISSIVE
max_connect_errors=1000
max_allowed_packet = 1024M
default_storage_engine=InnoDB
#Innodb
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 5
innodb_lock_wait_timeout = 50
innodb_log_file_size = 1024M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 5G
innodb_read_io_threads = 24
innodb_write_io_threads = 24
log_bin_trust_function_creators=1
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
# CACHES AND LIMITS #
tmp_table_size = 32M
max_heap_table_size = 32M
max_connections = 1000
thread_cache_size = 50
open_files_limit = 65535
table_definition_cache = 4096
table_open_cache = 5000
#wsrep
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_node_name =pxc-linux-29
wsrep_node_address=192.168.253.29
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_name=test-pxc
wsrep_sst_auth="sync_rep:abc123"

pxc-linux-30:

[client]
port = 3306
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
default-character-set = utf8mb4
[mysqld]
user =  mysql
innodb_buffer_pool_size = 1024M
character_set_server = utf8mb4
datadir = /data/local/percona-xtradb-cluster/data
port = 3306
server_id = 30
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
pid-file = /data/local/percona-xtradb-cluster/run/mysql.pid
log-error = /data/logs/mysql/error.log
log_warnings = 2
slow_query_log_file = /data/logs/mysql/slow.log
long_query_time = 2
log_timestamps=SYSTEM
lower_case_table_names = 1
key_buffer_size = 1344M
event_scheduler=ON
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.253.28,192.168.253.29,192.168.253.30
binlog_format=ROW
pxc_strict_mode=PERMISSIVE
max_connect_errors=1000
max_allowed_packet = 1024M
default_storage_engine=InnoDB
#Innodb
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 5
innodb_lock_wait_timeout = 50
innodb_log_file_size = 1024M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 5G
innodb_read_io_threads = 24
innodb_write_io_threads = 24
log_bin_trust_function_creators=1
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
# CACHES AND LIMITS #
tmp_table_size = 32M
max_heap_table_size = 32M
max_connections = 1000
thread_cache_size = 50
open_files_limit = 65535
table_definition_cache = 4096
table_open_cache = 5000
#wsrep
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_node_name = pxc-linux-30
wsrep_node_address=192.168.253.30
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_name=test-pxc
wsrep_sst_auth="sync_rep:abc123"

pxc-linux-28启动

systemctl start [email protected]

备注:谨记,只要是启动集群的第一个Node(首次搭建集群或者集群全部关闭),都要用此命令

pxc-linux-29和pxc-linux-30启动

systemctl start mysql

备注:谨记,只要集群有一个Node启动,其余节点都是用此命令

修改密码
mysql5.7版本日志均在error.log 里面生成

grep "temporary password"  /data/logs/mysql/error.log

使用改密码登陆MySQL,修改成自己想要的密码

mysql> alter user 'root'@'localhost' idnetified by '123456';

在pxc-linux-28MySQL中创建SST同步用户

mysql> GRANT PROCESS,RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'sync_rep'@'192.168.%.%' IDENTIFIED BY 'abc123';
mysql> flush privileges;

State Snapshot Transfer 是可以让one node (donor) 通过数据拷贝升级至joining node (joiner)。
一个新节点加入至集群中,需要同步数据,那么SST可以传输数据,让新节点成为集群的一部分。
SST的三个有效方法:mysqldump, rsync andxtrabackup。不过多解释,目前最好用的是xtrabackup

查看集群状态

集群验证

[[email protected] ~]# mysql -uroot -p
mysql> show variables like 'version';
+---------------+--------------+
| Variable_name | Value |
+---------------+--------------+
| version | 5.7.19-17-57 |
+---------------+--------------+
1 row in set (0.00 sec)
mysql> create database pxcdb;
mysql> use pxcdb;
mysql> create table t1(id tinyint,ename varchar(20));
mysql> insert into t1 values(1,'Leshami');
在29上进行验证
[[email protected] ~]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database       |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| pxcdb |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id    | 29 |
+---------------+-------+
1 row in set (0.01 sec)
mysql> select * from pxcdb.t1;
+------+---------+
| id | ename |
+------+---------+
| 1 | Leshami |
+------+---------+
1 row in set (0.00 sec)
--查看集群状态
mysql> show status like '%wsrep_clust%';
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id | 13 |  
| wsrep_cluster_size | 3 |         
| wsrep_cluster_state_uuid | aeb87793-ebb2-11e7-b33e-eeaf4988bbe4 |
| wsrep_cluster_status | Primary |   
+--------------------------+--------------------------------------+
4 rows in set (0.00 sec)
mysql> show status like 'wsrep_connected';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| wsrep_connected | ON |
+-----------------+-------+
1 row in set (0.00 sec)

openssl版本过低导致的错误

2017-12-28T09:23:19.605353Z 0 [ERROR] WSREP: wsrep_load(): dlopen(): /usr/lib64/galera3/libgalera_smm.so: 
symbol SSL_COMP_free_compression_methods, version libssl.so.10 not defined in file libssl.so.10 with link time reference
2017-12-28T09:23:19.605379Z 0 [ERROR] WSREP: Failed to load wsrep_provider (/usr/lib64/galera3/libgalera_smm.so).
 Error: Invalid argument (code: 22). Reverting to no provider.
2017-12-28T09:23:19.605386Z 0 [Note] WSREP: Setting wsrep_ready to false
[[email protected] ~]# rpm -qa|grep openssl
openssl-1.0.1e-42.el7.9.x86_64
openssl-libs-1.0.1e-42.el7.9.x86_64
[[email protected] ~]# yum update openssl -y

需要升级openssl,建议全部升级后再启动集群,这问题在CentOS 7.4.1708不存在即openssl版本较新

Haproxy负载均衡

Haproxy是一个反向代理负载均衡解决方案,支持4层和7层模式,提供后端服务器健康检查,非常稳定。淘宝前期也使用Haproxy作为CDN系统负载均衡器。

安装haproxy

yum -y install haproxy

简单配置文件:

cat /etc/haproxy/haproxy.cfg 
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend pxc-front
        bind *:3306
        mode tcp
        default_backend pxc-back
frontend statas-front
        bind *:8088
        mode http
        default_backend stats-back
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend pxc-back
        mode tcp
        balance leastconn
        option httpchk
        server pxc-linux-28 192.168.253.28:3306  check port 9200 inter 12000 rise 3 fall 3
        server pxc-linux-29 192.168.253.29:3306  check port 9200 inter 12000 rise 3 fall 3
        server pxc-linux-30 192.168.253.30:3306  check port 9200 inter 12000 rise 3 fall 3
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend stats-back
        mode http
        balance roundrobin
        stats uri /haproxy/stats
        stats auth pxcstats:xxwzopop

在cluster的MySQL上创建用户
(一个节点创建,会被复制到其它节点)
监控用帐号:

 grant usage on *.* to 'pxc-monitor'@'%' identified by 'testpxc';

服务测试帐号:

  grant all privileges on *.* to 'zxw'@'%' identified by 'xxwzopop';

更改用户名和密码(三个节点都得修改)

#vim /usr/bin/clustercheck
MYSQL_USERNAME="pxc-monitor"
MYSQL_PASSWORD="testpxc"

测试

[[email protected] ~]# clustercheck             
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40
Percona XtraDB Cluster Node is synced.

更改/etc/services添加mysqlchk的端口号:

mysqlchk  9200/tcp  #mysqlchk

配置xinetd
vi /etc/xinetd.d/mysqlchk
该文件保持默认即可

测试

#for i in `seq 1 1000`;do mysql -h 192.168.253.31 -P3306 -upxc -pabc123 -e "select @@hostname;";done
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------+
| @@hostname   |
+--------------+
| pxc-linux-30 |
+--------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------+
| @@hostname   |
+--------------+
| pxc-linux-28 |
+--------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------+
| @@hostname   |
+--------------+
| pxc-linux-29 |
+--------------+

可以看到负载了

查看haproxy状态

http://192.168.253.31:8088/haproxy/stats

帐号密码是:pxcstats:xxwzopop

/etc/haproxy/haproxy.cfg 指定的。

原文地址:http://blog.51cto.com/11243465/2104885

时间: 2024-10-05 06:16:23

PXC5.7(Percona XtraDB Cluster)+HAproxy集群部署的相关文章

PXC(Percona XtraDB Cluster)集群的安装与配置

Percona XtraDB Cluster是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server .其包括了Write Set REPlication补丁,使用Galera 2.0库,这是一个针对事务性应用程序的同步多主机复制插件. Percona XtraDB Cluster特点: (1)同步复制,事务在所有集群节点要么同时提交,要么不提交. (2)多主复制,可以在任意一个节点写入. (3)从服务器上的并行应用事件,真正的“并行复制”. (4)自动配置节点. (5)

PXC(Percona XtraDB Cluster)集群安装

作者在2014Oracle数据库嘉年华中有幸听到了关于去哪网的MySQL数据库基于PXC的高可用架构设计主题. MySQL和Oracle是完全不同的两种数据库,Oracle重于管理,而MySQL更重要的是架构设计.笔者对MySQL以及新技术也是充满了好奇,索性回来自己搭建一个测试环境. 操作系统:CentOS 6.6 软件版本:5.5.39-36.0-55 PerconaXtraDB Cluster (GPL) 节点信息: pxc1 192.168.0.200 pxc2 192.168.0.20

Percona XtraDB Cluster(PXC) -集群环境安装(原创)

Percona XtraDB Cluster(PXC)   ---服务安装篇   1.测试环境搭建: Ip 角色 OS PXC-version 172.16.40.201 Node1 Redhat/Centos 6/7 5.7.23 172.16.40.202 Node2 Redhat/Centos 6/7 5.7.23 172.16.40.203 Node3 5.7.23 5.7.23   2.安装 2.1安装方式 测试环境选择二进制安装,生产环境选择编译安装方式以达到性能最佳 2.2版本选择

Mysql上的RAC:Percona XtraDB Cluster负载均衡集群安装部署手册

 Percona XtraDB Cluster安装部署手册 引言 编写目的 编写此文档,供PerconaXtraDB Cluster部署时使用. 预期读者 系统维护人员及实施人员. 编制依据及参考资料 目标 通过阅读该手册,让读者明确PerconaXtraDB Cluster的安装.配置和维护情况,为后续数据库运维工作提供指导. 应用部署方案 环境准备 服务器列表 序号 IP 用途 HOSTNAME 操作系统 1 192.168.0.7 Percona XtraDB Cluster RedHat

Percona XtraDB Cluster 集群环境建立与验证指南

Percona XtraDB Cluster 集群环境建立与验证指南Percona XtraDB Cluster 是MySQL数据库的一种集群方案.并且与 MySQL Server 社区版本.Percona Server 和 MariaDB 兼容.一.在Ubuntu上安装Percona XtraDB Cluster实验环境:    假设有3台计算机设备安装了ubuntu系统,将被用作3个节点:    Node        Host        IP    Node1       pxc1  

如何搭建Percona XtraDB Cluster集群

一.环境准备 主机IP                     主机名               操作系统版本     PXC 192.168.244.146     node1              CentOS7.1      Percona-XtraDB-Cluster-56-5.6.30 192.168.244.147     node2              CentOS7.1      Percona-XtraDB-Cluster-56-5.6.30 192.168.244

用Haproxy负载percona XtraDB Cluster

这前做了Percona xtraDB Cluster(配置见链接 http://hans925.blog.51cto.com/542170/1607157) 现在用Haproxy给Percona xtraDB Cluster做负载均衡,机器还是那两台机器,(本来做负载均衡要三台机器,但个人笔记本跑两个虚拟机就有点卡了所以就用了两个).就把Haproxy安装到第一台percona上了. Haproxy OS: Ubuntu 14.04 server IP: 172.16.53.136 Percon

Haproxy+mysql cluster( MySQL 集群) 配置

一.准备 1.准备服务器 建立有2个节点的MySQL CLuster体系,使用6台服务器建立Haproxy+mysql cluster( MySQL 集群) 体系 节点配置说明 节点 对应的IP和端口 Haproxy负载均衡(1个) centos 6.3 1.1.1.11  管理节点(1个) centos 6.3  1.1.1.30  SQL节点 (2个) centos 6.3  1.1.1.21  1.1.1.22  数据节点 (2个) centos 6.3  1.1.1.31  1.1.1.

Percona XtraDB Cluster 初探

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.PXC集群以节点组成(推荐至少3节点,后面会讨论两节点的情况),每个节点都是基于常规的 MySQL/Percona Server,意味着你可以将现有的server加入到集群中亦或从集群中分离出某节点单独使用.集群中每个节点都包含完整 的数据.     PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patch