返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.htmlhtml
本文演示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.安装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
如下过程均在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.测试
上述配置完成后,能够进行读、写测试,并测试是否会按预期移除、加回故障节点。