MySQL中间件之ProxySQL(14):ProxySQL+PXC
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
?
1.ProxySQL+PXC
本文演示ProxySQL代理PXC(Percona XtraDB Cluster)的方法,不涉及原理,純配置過程,所以如有不懂之處,請(qǐng)先掌握相關(guān)理論。
ProxySQL要代理PXC,需要使用ProxySQL額外提供的腳本/usr/share/proxysql/tools/proxysql_galera_checker.sh做健康檢查并動(dòng)態(tài)調(diào)整,通過Scheduler來調(diào)用實(shí)現(xiàn)。ProxySQL v2.0版本將原生支持Galera并增加相關(guān)表mysql_galera_hostgroups,到時(shí)就無需借用第三方腳本。
實(shí)驗(yàn)環(huán)境:
| 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 cluster
3個(gè)節(jié)點(diǎn)上(pxc1、pxc2、pxc3)都操作:
提供yum源:
[percona] name=percona_repo baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch enabled = 1 gpgcheck = 0安裝
yum install Percona-XtraDB-Cluster-client-572.提供配置文件
第一個(gè)節(jié)點(diǎn)(pxc1)配置文件/etc/my.cnf:
[mysqld] server-id=100 # 各節(jié)點(diǎn)不同 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updateswsrep_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 # 各節(jié)點(diǎn)不同 wsrep_node_address=192.168.100.32 # 各節(jié)點(diǎn)不同 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第二個(gè)節(jié)點(diǎn)(pxc2)配置文件
[mysqld] server-id=110 # 各節(jié)點(diǎn)不同 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updateswsrep_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 # 各節(jié)點(diǎn)不同 wsrep_node_address=192.168.100.33 # 各節(jié)點(diǎn)不同 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第三個(gè)節(jié)點(diǎn)(pxc3)配置文件
[mysqld] server-id=120 # 各節(jié)點(diǎn)不同 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updateswsrep_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 # 各節(jié)點(diǎn)不同 wsrep_node_address=192.168.100.34 # 各節(jié)點(diǎn)不同 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=23.引導(dǎo)PXC集群
在第一個(gè)MySQL節(jié)點(diǎn)上(pxc1)以bootstrap形式啟動(dòng)MySQL:
/etc/init.d/mysql bootstrap-pxc # 或 systemctl start mysql@bootstrap.service查看引導(dǎo)狀態(tài):
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 | +----------------------------+--------------------------------------+正確引導(dǎo)了第一個(gè)節(jié)點(diǎn)后,在第一個(gè)節(jié)點(diǎn)上創(chuàng)建SST的認(rèn)證用戶,注意這個(gè)用戶名和密碼需要和前面配置文件指定的一致。
create user 'sstuser'@localhost identified by 'P@ssword1!'; grant reload,lock tables,process,replication client on *.* to 'sstuser'@localhost; flush privileges;4.加入第二、第三個(gè)節(jié)點(diǎn)
直接啟動(dòng)mysqld服務(wù)即可。
在第二、三個(gè)節(jié)點(diǎn)(pxc2、pxc3)上執(zhí)行:
/etc/init.d/mysql start #### 或 systemctl start mysql1.2 配置ProxySQL
以下過程均在proxysql節(jié)點(diǎn)(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啟動(dòng)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.創(chuàng)建監(jiān)控用戶,并設(shè)置監(jiān)控用戶憑據(jù)
在pxc上執(zhí)行(pxc1、pxc2、pxc3任意一個(gè))創(chuàng)建監(jiān)控用戶,如果不監(jiān)控replication lag,只需usage權(quán)限即可,如果監(jiān)控replication lag,則需要replication client權(quán)限。這里直接授予replication client權(quán)限。
create user monitor@'192.168.100.%' identified by 'P@ssword1!'; grant replication client on *.* to monitor@'192.168.100.%';回到ProxySQL節(jié)點(diǎn)上配置監(jiān)控用戶憑據(jù)。
set mysql-monitor_username='monitor'; set mysql-monitor_password='P@ssword1!';load mysql variables to runtime; save mysql variables to disk;注意,不要監(jiān)控PXC的read_only,也不要配置mysql_replication_hostgroup。因?yàn)槟壳鞍姹镜腜roxySQL不支持指定Galera集群中哪些節(jié)點(diǎn)作為讀,哪些節(jié)點(diǎn)作為寫節(jié)點(diǎn)。在未來的ProxySQL 2.0版本,將會(huì)添加mysql_galera_hostgroups表,可以指定集群中的讀寫節(jié)點(diǎn),讓ProxySQL對(duì)Galera的支持更豐富、具體,該表的意義和作用,見mysql_galera_hostgroups 。
所以,目前版本的ProxySQL+PXC,無法將讀、寫操作分離到同一個(gè)組中的不同節(jié)點(diǎn)上。但是可以保證同一個(gè)事務(wù)內(nèi)的語句全都路由到同一個(gè)組中的同一個(gè)節(jié)點(diǎn)(ProxySQL在某些情況下會(huì)自動(dòng)禁用multiplexing功能)。
4.設(shè)置ProxySQL連接后端PXC的用戶,即配置 mysql_users 表
在pxc上執(zhí)行(pxc1、pxc2、pxc3任意一個(gè))創(chuàng)建連接用戶,這里假設(shè)ProxySQL全都使用root用戶連接PXC,以及接受app的SQL請(qǐng)求。
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特性,只是把它當(dāng)作普通的MySQL,要保證Galera的合理運(yùn)行,只能通過任務(wù)調(diào)度模塊(scheduler)來調(diào)度外部腳本做Galera的健康檢查,并根據(jù)檢查結(jié)果動(dòng)態(tài)修改ProxySQL的配置。
ProxySQL自身已帶Galera集群的健康檢查腳本,路徑為/usr/share/proxysql/tools/proxysql_galera_checker.sh。可以自己打開這個(gè)shell腳本看看,并不復(fù)雜。注意這個(gè)腳本,能自動(dòng)配置ProxySQL標(biāo)記某個(gè)MySQL節(jié)點(diǎn)offline_soft,并將重新上線的節(jié)點(diǎn)加回ProxySQL中。
再ProxySQL中創(chuàng)建一個(gè)scheduler,用于調(diào)用這個(gè)腳本:
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:調(diào)度任務(wù)的id
interval_ms:執(zhí)行腳本的時(shí)間間隔,也就是檢查Galera集群的時(shí)間間隔,單位毫秒
filename:該調(diào)度任務(wù)所要調(diào)度的文件名
arg1:指定ProxySQL的admin管理接口監(jiān)聽地址
arg2:admin管理接口端口
arg3:指定待檢查的組hostgroup_id,腳本會(huì)從檢查這個(gè)組中所有節(jié)點(diǎn)的"wsrep_local_state"值,并根據(jù)值來自動(dòng)重新配置ProxySQL
arg4:指定腳本運(yùn)行過程中產(chǎn)生的數(shù)據(jù)保存路徑。默認(rèn)值為/dev/null
需要注意,上述是ProxySQL官方提供的腳本,percona提供的ProxySQL的Galera檢查腳本和ProxySQL官方提供的不一樣,具體用法以及參數(shù)可打開腳本查看。
對(duì)于scheduler模塊來說,scheduler表最多允許接受5個(gè)參數(shù)位。
6.測(cè)試
上述配置完成后,可以進(jìn)行讀、寫測(cè)試,并測(cè)試是否會(huì)按預(yù)期移除、加回故障節(jié)點(diǎn)。
轉(zhuǎn)載于:https://www.cnblogs.com/f-ck-need-u/p/9372382.html
總結(jié)
以上是生活随笔為你收集整理的MySQL中间件之ProxySQL(14):ProxySQL+PXC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP Uploadify+jQuery
- 下一篇: 二叉树三种遍历(递归以及非递归实现)