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

1.ProxySQL+PXC

本文演示ProxySQL代理PXC(Percona XtraDB Cluster)的方法,不涉及原理,纯配置过程,所以如有不懂之处,请先掌握相关理论。

ProxySQL要代理PXC,需要使用ProxySQL额外提供的脚本/usr/share/proxysql/tools/proxysql_galera_checker.sh做健康检查并动态调整,通过Scheduler来调用实现。ProxySQL v2.0版本将原生支持Galera并增加相关表mysql_galera_hostgroups,到时就无需借用第三方脚本。

实验环境:

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 cluster

3个节点上(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-57

2.提供配置文件

第一个节点(pxc1)配置文件/etc/my.cnf:

[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.加入第二、第三个节点

直接启动mysqld服务即可。

在第二、三个节点(pxc2、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上执行(pxc1、pxc2、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上执行(pxc1、pxc2、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.测试

上述配置完成后,可以进行读、写测试,并测试是否会按预期移除、加回故障节点。

MySQL中间件之ProxySQL(14):ProxySQL+PXC的更多相关文章

  1. MySQL中间件之ProxySQL(1):简介和安装

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL简介 之前的文章里,介绍了一个MySQL的中间件: ...

  2. mysql中间件proxysql实现mysql读写分离

    目录 1. mysql实现读写分离的方式 2. ProxySQL简介 3. ProxySQL安装 4. ProxySQL的Admin管理接口 5. 和admin管理接口相关的变量 5.1 admin- ...

  3. MySQL中间件之ProxySQL(3):Admin管理接口

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的Admin管理接口 当ProxySQL启动后,将 ...

  4. MySQL中间件之ProxySQL(4):多层配置系统

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL中的库 使用ProxySQL的Admin管理接口连 ...

  5. MySQL中间件之ProxySQL(6):管理后端节点

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQ ...

  6. MySQL中间件之ProxySQL(13):ProxySQL集群

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html ProxySQL有原生的集群功能,但是这个原生的集群功能还正在试验阶段 ...

  7. MySQL中间件之ProxySQL(15):ProxySQL代理MySQL组复制

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+组复制前言 在以前的ProxySQL版本中,要支 ...

  8. MySQL-ProxySQL中间件(一)| ProxySQL基本概念

    目录     MySQL-ProxySQL中间件(一)| ProxySQL基本概念: https://www.cnblogs.com/SQLServer2012/p/10972593.html     ...

  9. Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记

    GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...

随机推荐

  1. rem 是如何实现自适应布局的

    摘要:rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高.本文讲的是如何使用rem实现自适应.· rem这是个低调的css单位,近一 ...

  2. PC装MAC(VM虚拟机)想体验苹果系统的福利

    Windows下 VM12虚拟机安装OS X 10.11(详细教程) 工具/原料 Mac OS X 10.11 镜像文件 unlocker208文件 VMware Workstation12(版本不一 ...

  3. 正确理解python中的赋值语句:a, b = b, a + b

    赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 但不必显式写出临时变量t就可以赋值.

  4. 基于面向方面和UML的实时系统建模研究

    一.基本信息 标题:基于面向方面和UML的实时系统建模研究 时间:2010 出版源:计算机技术与发展 领域分类:面向方向:实时系统:横切关注点:统一建模语言: 二.研究背景 问题定义:实时系统建模研究 ...

  5. pycharm的console显示乱码和中文的配置

    第一种方式: 在python脚本开始的地方加入指定编码方式 # -*- coding : UTF-8 -*- 第二种方式: 有些时候我们会得到这种格式的字符串: "name": & ...

  6. kali入门

    第一章:入门kalilinux By:鬼尘 第一章基本上就是涵盖以下的主题: ·kali的发展简史 ·kali的一般用途 ·kali的下载与安装 ·kali的配置与更新 在本章结尾部分,我们还会介绍k ...

  7. echarts 调整图表 位置 的方法

    ###内部图表大小是与div容器大小位置相关的,如果想调整图表大小位置,调整div的属性就可以了### ###如果是想调整图表与div间上下左右留白,则设置grid属性就可以了### 如图所示: 具体 ...

  8. @ResponseBody 返回乱码 的解决办法

    1:最快的  最简单的办法是  在Ajax请求脸面指定头信息Accept属性,StringHttpMessageConverter默认iso-8859-1编码,但是会根据请求头信息指定的编码格式来转换 ...

  9. Android学习笔记(1):常用按钮点击事件处理方式

    1.从布局文件获取对应的控件然后对其添加点击监听器. Button loginBtn; @Override protected void onCreate(Bundle savedInstanceSt ...

  10. Java中不定项参数(可变参数)的作用和使用方式

    引言: 我们在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况.一般我们会用方法重载来解决问题: //方法重载,解决参数个数不确定问题 public void method(); publi ...