MySQL中間件之ProxySQL(14):ProxySQL+PXC

返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.htmlhtml

 

1.ProxySQL+PXC

本文演示ProxySQL代理PXC(Percona XtraDB Cluster)的方法,不涉及原理,純配置過程,因此若有不懂之處,請先掌握相關理論。node

ProxySQL要代理PXC,須要使用ProxySQL額外提供的腳本/usr/share/proxysql/tools/proxysql_galera_checker.sh作健康檢查並動態調整,經過Scheduler來調用實現。ProxySQL v2.0版本將原生支持Galera並增長相關表mysql_galera_hostgroups,到時就無需借用第三方腳本。mysql

實驗環境:git

Node HostName IP_address
Node1 proxysql 192.168.100.21
Node2 pxc1 192.168.100.32
Node3 pxc2 192.168.100.33
Node4 pxc3 192.168.100.34

1.1 配置PXC

1.安裝percona xtradb clustergithub

3個節點上(pxc一、pxc二、pxc3)都操做:sql

提供yum源:shell

[percona]
name=percona_repo
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0

安裝bootstrap

yum install Percona-XtraDB-Cluster-client-57

2.提供配置文件後端

第一個節點(pxc1)配置文件/etc/my.cnf:centos

[mysqld]
server-id=100               # 各節點不一樣
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.100.32,192.168.100.33,192.168.100.34
wsrep_node_name=pxc1                # 各節點不一樣
wsrep_node_address=192.168.100.32   # 各節點不一樣
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:P@ssword1!
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

第二個節點(pxc2)配置文件

[mysqld]
server-id=110               # 各節點不一樣
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.100.32,192.168.100.33,192.168.100.34
wsrep_node_name=pxc2                # 各節點不一樣
wsrep_node_address=192.168.100.33   # 各節點不一樣
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:P@ssword1!
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

第三個節點(pxc3)配置文件

[mysqld]
server-id=120               # 各節點不一樣
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.100.32,192.168.100.33,192.168.100.34
wsrep_node_name=pxc3                # 各節點不一樣
wsrep_node_address=192.168.100.34   # 各節點不一樣
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:P@ssword1!
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

3.引導PXC集羣

在第一個MySQL節點上(pxc1)以bootstrap形式啓動MySQL:

/etc/init.d/mysql bootstrap-pxc
# 或
systemctl start mysql@bootstrap.service

查看引導狀態:

mysql@pxc1> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+

正確引導了第一個節點後,在第一個節點上建立SST的認證用戶,注意這個用戶名和密碼須要和前面配置文件指定的一致。

create user 'sstuser'@localhost identified by 'P@ssword1!';
grant reload,lock tables,process,replication client on *.* to 'sstuser'@localhost;
flush privileges;

4.加入第2、第三個節點

直接啓動mysqld服務便可。

在第2、三個節點(pxc二、pxc3)上執行:

/etc/init.d/mysql start
#### 或
systemctl start mysql

1.2 配置ProxySQL

如下過程均在proxysql節點(Node1)上操做,除非已顯式指明。

1.安裝ProxySQL和MySQL客戶端

提供ProxySQL的yum源:

cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=0
enabled=1

[percona]
name=percona_repo
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/\$releasever/RPMS/\$basearch
enabled = 1
gpgcheck = 0
EOF

而後安裝。這裏的Percona-XtraDB-Cluster-57只是爲了提供mysql客戶端,也能夠裝其餘的,例如官方的mysql。

yum -y install proxysql Percona-XtraDB-Cluster-57

啓動ProxySQL,並用mysql客戶端鏈接ProxySQL的管理接口:

service proxysql start
mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'admin> '

2.添加pxc到ProxySQL的 mysql_servers 表

insert into mysql_servers(hostgroup_id,hostname,port) values
(10,'192.168.100.32',3306),
(10,'192.168.100.33',3306),
(10,'192.168.100.34',3306);

load mysql servers to runtime;
save mysql servers to disk;

3.建立監控用戶,並設置監控用戶憑據

在pxc上執行(pxc一、pxc二、pxc3任意一個)建立監控用戶,若是不監控replication lag,只需usage權限便可,若是監控replication lag,則須要replication client權限。這裏直接授予replication client權限。

create user monitor@'192.168.100.%' identified by 'P@ssword1!';
grant replication client on *.* to monitor@'192.168.100.%';

回到ProxySQL節點上配置監控用戶憑據。

set mysql-monitor_username='monitor';
set mysql-monitor_password='P@ssword1!';

load mysql variables to runtime;
save mysql variables to disk;

注意,不要監控PXC的read_only,也不要配置mysql_replication_hostgroup。由於目前版本的ProxySQL不支持指定Galera集羣中哪些節點做爲讀,哪些節點做爲寫節點。在將來的ProxySQL 2.0版本,將會添加mysql_galera_hostgroups表,能夠指定集羣中的讀寫節點,讓ProxySQL對Galera的支持更豐富、具體,該表的意義和做用,見mysql_galera_hostgroups

因此,目前版本的ProxySQL+PXC,沒法將讀、寫操做分離到同一個組中的不一樣節點上。可是能夠保證同一個事務內的語句全都路由到同一個組中的同一個節點(ProxySQL在某些狀況下會自動禁用multiplexing功能)。

4.設置ProxySQL鏈接後端PXC的用戶,即配置 mysql_users 表

在pxc上執行(pxc一、pxc二、pxc3任意一個)建立鏈接用戶,這裏假設ProxySQL全都使用root用戶鏈接PXC,以及接受app的SQL請求。

create user root@'192.168.100.%' identified by 'P@ssword1!'
grant all on *.* to root@'192.168.100.%';

而後回到ProxySQL,配置mysql_users表,將剛纔的用戶添加到該表中。

insert into mysql_users(username,password,default_hostgroup,transaction_persistent) 
values('root','P@ssword1!',10,1);
load mysql users to runtime;
save mysql users to disk;

5.添加Galera支持

ProxySQL不原生支持Galera特性,只是把它看成普通的MySQL,要保證Galera的合理運行,只能經過任務調度模塊(scheduler)來調度外部腳本作Galera的健康檢查,並根據檢查結果動態修改ProxySQL的配置。

ProxySQL自身已帶Galera集羣的健康檢查腳本,路徑爲/usr/share/proxysql/tools/proxysql_galera_checker.sh。能夠本身打開這個shell腳本看看,並不複雜。注意這個腳本,能自動配置ProxySQL標記某個MySQL節點offline_soft,並將從新上線的節點加回ProxySQL中。

再ProxySQL中建立一個scheduler,用於調用這個腳本:

INSERT INTO scheduler(id,interval_ms,filename,arg1,arg2,arg3,arg4) VALUES
(1,'10000','/var/lib/proxysql/proxysql_galera_checker.sh','127.0.0.1','6032','10',
'/tmp/proxysql_galera_checker.log');

LOAD SCHEDULER TO RUNTIME;
SAVE SCHEDULER TO DISK;

id:調度任務的id
interval_ms:執行腳本的時間間隔,也就是檢查Galera集羣的時間間隔,單位毫秒
filename:該調度任務所要調度的文件名
arg1:指定ProxySQL的admin管理接口監聽地址
arg2:admin管理接口端口
arg3:指定待檢查的組hostgroup_id,腳本會從檢查這個組中全部節點的"wsrep_local_state"值,並根據值來自動從新配置ProxySQL
arg4:指定腳本運行過程當中產生的數據保存路徑。默認值爲/dev/null

須要注意,上述是ProxySQL官方提供的腳本,percona提供的ProxySQL的Galera檢查腳本和ProxySQL官方提供的不同,具體用法以及參數可打開腳本查看。

對於scheduler模塊來講,scheduler表最多容許接受5個參數位。

6.測試

上述配置完成後,能夠進行讀、寫測試,並測試是否會按預期移除、加回故障節點。

相關文章
相關標籤/搜索