一、PerconaDB的特性(来源于:http://blog.csdn.net/chszs/article/details/20205047)
1)查询速度更快,数据的一致性更好
2)服务器运行及其稳定
3)可以延迟分片,或者避免分片
4)需要支付的费用比MySQL低
5)在优化和管理方面花费的时间更少
6)更高的正常运行时间
7)不排除猜测
还有一些特性:
1)数量更多的INFORMATION_SCHEMA表
2)数量更多的全局性能参数(Global Performance)和状态计数器(Status Counters)
3)每个索引性能计数器
4)每个用户性能计数器
5)每个客户端性能计数器
6)高精度进程列表时序
7)快速校验算法
8)缓冲池预加载
9)支持闪存缓冲
10)可从不同的服务器导入表
开始配置host
node1 192.168.20.145
node2 192.168.20.146
node3 192.168.20.147
安装相关apt源
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
sudo apt-get update
安装pxc
sudo apt-get install percona-xtradb-cluster-full-57
修改/etc/my.cnf配置文件,其他两台节点需要修改server_id和wsrep_node_address
[mysqld]
server_id=127 #其他节点需要修改datadir=/data/mysql
socket=/data//mysql/mysql.sock
pid_file=/var/lib/mysql/mysql.pid
user=mysql
port=3306
default_storage_engine=InnoDB
character_set_server=utf8
log-error=/var/lib/mysql/mysql-error.log
slow_query_log=1
slow_query_log_file=/var/lib/mysql/mysql-slow.log
#INNODB/XtraDB
innodb_buffer_pool_size=1610612736
innodb_log_file_size=104857600
#PXC
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.20.145,192.168.20.146,192.168.20.147
binlog_format=ROW
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.20.145 #其他节点需要修改
wsrep_sst_method=xtrabackup-v2 #同步工具
wsrep_cluster_name=my_mysql_cluster
wsrep_sst_auth="sstuser:s3cret" #SST连接的用户名和密码
创建数据存储目录
mkdir-p /data/mysql/
chown mysql.mysql /data/mysql/
在node1启动PXC服务
/etc/init.d/mysql bootstrap-pxc #成功后密码在日志文件里查到
SET PASSWORD = PASSWORD('123qwe'); #登陆MySQL修改密码。
在node1MySQL中创建SST同步用户
GRANT PROCESS,RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO'sstuser'@'%'IDENTIFIED BY's3cret';
flush privileges;
State Snapshot Transfer 是可以让one node (donor) 通过数据拷贝升级至joining node (joiner)。
一个新节点加入至集群中,需要同步数据,那么SST可以传输数据,让新节点成为集群的一部分。
SST的三个有效方法:mysqldump, rsync andxtrabackup。不过多解释,目前最好用的是xtrabackup
在node2,node3启动MySQL服务
/etc/init.d/mysql start
查看集群状态
show status like 'wsrep%';
然后测试数据写入和查询。
配置HAProxy 负载平衡
上述完成了 3 台 Cluster 设定,接着所有的 Application 服务都需要直接跟此 Cluster 沟通,为了完成此需求,我们必须将 HAProxy 安装在其中一台伺服器来做负载平衡,今天会介绍两种设定方式,第一种是採用 round robin 方式,意思就是说所有的 Application 都可以连上并且写入资料到三台机器,这状况其实没有错误,但是如果同时写入三台机器,难免会出现 optimistic locking 而产生 rollback,如果可以确定不会产生 conflict,其实这方桉是不错的。第2种设定方式就是只写入单一 Node,但是可以读取三台机器,也就是 insert, update 都是在同一台 Node 完成,所以 Application 不用担心会产生 rollback 情形。第1种设定在大部份的状况底下都是可以运作很好的,所以其实也不用担心。
底下是 /etc/haproxy/haproxy.cfg 设置:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen mysql_3306
bind 0.0.0.0:3306
mode tcp
option tcpka
balance roundrobin
#将此server命名为mysql_01,每隔3000ms检测一个健康状态,如果检测3次都失败,将此server剔除,在离线的状态下,只要检测1次成功,就让其上线;
server mysql_01 192.168.20.145:3306 check inter 3000 rise 1 maxconn 4000 fall 3
server mysql_02 192.168.20.146:3306 check inter 3000 rise 1 maxconn 4000 fall 3
server mysql_02 192.168.20.147:3306 check inter 3000 rise 1 maxconn 4000 fall 3
listen state #使用单独输出,不需要frontedn调用:定义haproxy的状态统计页面;
bind *:8888 #监听的地址;
mode http #http 7层工作模式:对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制;
stats enable #开启统计页面输出;
stats hide-version #隐藏状态页面版本号;
stats uri /haproxyadmin?stats #指定状态页的访问路径;
stats auth admin:admin #基于用户名,密码验证;
stats admin if TRUE #验证通过时运行登录;
上面步骤全部成功,请打开浏览器在 URL 输入http://192.168.20.148:8888/haproxyadmin?stats 在输入配置文件配置的用户名和密码就可以HAProxy Status 页面,看到状态,就是代表设定成功。