一魔策、PerconaDB的特性(來源于:http://blog.csdn.net/chszs/article/details/20205047)
1)查詢速度更快鄙早,數(shù)據(jù)的一致性更好
2)服務(wù)器運行及其穩(wěn)定
3)可以延遲分片,或者避免分片
4)需要支付的費用比MySQL低
5)在優(yōu)化和管理方面花費的時間更少
6)更高的正常運行時間
7)不排除猜測
還有一些特性:
1)數(shù)量更多的INFORMATION_SCHEMA表
2)數(shù)量更多的全局性能參數(shù)(Global Performance)和狀態(tài)計數(shù)器(Status Counters)
3)每個索引性能計數(shù)器
4)每個用戶性能計數(shù)器
5)每個客戶端性能計數(shù)器
6)高精度進程列表時序
7)快速校驗算法
8)緩沖池預(yù)加載
9)支持閃存緩沖
10)可從不同的服務(wù)器導(dǎo)入表
開始配置host
node1? 192.168.20.145
node2? 192.168.20.146
node3? 192.168.20.147
安裝相關(guān)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配置文件冲秽,其他兩臺節(jié)點需要修改server_id和wsrep_node_address
[mysqld]
server_id=127 #其他節(jié)點需要修改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 #其他節(jié)點需要修改
wsrep_sst_method=xtrabackup-v2 #同步工具
wsrep_cluster_name=my_mysql_cluster
wsrep_sst_auth="sstuser:s3cret" #SST連接的用戶名和密碼
創(chuàng)建數(shù)據(jù)存儲目錄
mkdir-p /data/mysql/
chown? mysql.mysql /data/mysql/
在node1啟動PXC服務(wù)
/etc/init.d/mysql bootstrap-pxc #成功后密碼在日志文件里查到
SET PASSWORD = PASSWORD('123qwe');? #登陸MySQL修改密碼只洒。
在node1MySQL中創(chuàng)建SST同步用戶
GRANT PROCESS,RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO'sstuser'@'%'IDENTIFIED BY's3cret';
flush privileges;
State Snapshot Transfer 是可以讓one node (donor) 通過數(shù)據(jù)拷貝升級至joining node (joiner)纵苛。
一個新節(jié)點加入至集群中玉吁,需要同步數(shù)據(jù)照弥,那么SST可以傳輸數(shù)據(jù),讓新節(jié)點成為集群的一部分进副。
SST的三個有效方法:mysqldump, rsync andxtrabackup这揣。不過多解釋,目前最好用的是xtrabackup
在node2,node3啟動MySQL服務(wù)
/etc/init.d/mysql start
查看集群狀態(tài)
show status like? 'wsrep%';
然后測試數(shù)據(jù)寫入和查詢。
配置HAProxy 負載平衡
上述完成了 3 臺 Cluster 設(shè)定给赞,接著所有的 Application 服務(wù)都需要直接跟此 Cluster 溝通机打,為了完成此需求,我們必須將 HAProxy 安裝在其中一臺伺服器來做負載平衡塞俱,今天會介紹兩種設(shè)定方式姐帚,第一種是採用?round robin?方式吏垮,意思就是說所有的 Application 都可以連上并且寫入資料到三臺機器障涯,這狀況其實沒有錯誤,但是如果同時寫入三臺機器膳汪,難免會出現(xiàn)?optimistic locking?而產(chǎn)生 rollback唯蝶,如果可以確定不會產(chǎn)生 conflict,其實這方桉是不錯的遗嗽。第2種設(shè)定方式就是只寫入單一 Node粘我,但是可以讀取三臺機器,也就是?insert,?update?都是在同一臺 Node 完成痹换,所以 Application 不用擔(dān)心會產(chǎn)生 rollback 情形征字。第1種設(shè)定在大部份的狀況底下都是可以運作很好的,所以其實也不用擔(dān)心娇豫。
底下是?/etc/haproxy/haproxy.cfg 設(shè)置:
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檢測一個健康狀態(tài),如果檢測3次都失敗,將此server剔除,在離線的狀態(tài)下,只要檢測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調(diào)用:定義haproxy的狀態(tài)統(tǒng)計頁面;
bind *:8888? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #監(jiān)聽的地址;
mode http? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #http 7層工作模式:對應(yīng)用層數(shù)據(jù)做深入分析,因此支持7層的過濾匙姜、處理、轉(zhuǎn)換等機制;
stats enable? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #開啟統(tǒng)計頁面輸出;
stats hide-version? ? ? ? ? ? ? ? ? ? ? ? #隱藏狀態(tài)頁面版本號;
stats uri /haproxyadmin?stats? ? ? ? ? ? #指定狀態(tài)頁的訪問路徑;
stats auth admin:admin? ? ? ? ? ? ? ? ? ? #基于用戶名,密碼驗證;
stats admin if TRUE? ? ? ? ? ? ? ? ? ? ? #驗證通過時運行登錄;
上面步驟全部成功冯痢,請打開瀏覽器在 URL 輸入http://192.168.20.148:8888/haproxyadmin?stats?在輸入配置文件配置的用戶名和密碼就可以HAProxy Status 頁面氮昧,看到狀態(tài),就是代表設(shè)定成功浦楣。