赞
踩
1.前言
最近和搞中间件的同事聊了聊,他感叹了几句,如今最大的难处在于中间件太多了,不知道用哪个。社区有几款不错的中间件,mycat算是影响力比较大的吧(以前听一位哥们儿说他认为mycat是java写的,效率很低,然后就对mycat狂轰滥炸),oneproxy是我们楼教主的扛鼎巨著,还有mariadb社区那个延迟开源的收费软件maxscale。好咯,今天我们不讲这些高大上的中间件,今天我们说的这个中间件是percona现在主推的一款中间件:ProxySQL。
可能很多同志没有听过ProxySQL,我们也很难在中文社区看到他的一些资料。首先我不得不说的是ProxySQL几个优点,首先它足够的轻量化,其次性能也足够满足常规需求。他可以干哪些事情呢,基本上社区中间件可以做的事情,它都可以做,什么读写分离啊,故障容错啊,分库分表啊。
2.安装部署
2.1安装包下载
安装包有两个地方可以下载,
percona站点:
github:
选择适合自己操作系统以及相关版本吧,这里我们选择ProxySQL-1.2.2-1.x86_64.rpm。rpm包直接装好了。
2.2安装
直接使用rpm安装即可:
[root@hpc01 ~]# rpm -ivh ProxySQL-1.2.2-1.x86_64.rpm
2.3启动ProxySQL
[root@hpc01 ~]# sudo service ProxySQL start
Starting ProxySQL: DONE!
2.4ProxySQL相关文件
[root@hpc01 ProxySQL]# pwd
/var/lib/ProxySQL
[root@hpc01 ProxySQL]# ls -l
total 604
-rw-------. 1 root root 32768 Dec 24 23:25 ProxySQL.db
-rw-------. 1 root root 571154 Dec 24 23:29 ProxySQL.log
-rw-r--r--. 1 root root 5 Dec 24 23:25 ProxySQL.pid
[root@hpc01 ProxySQL]# ls -l /etc/ProxySQL.cnf
-rw-------. 1 root root 3588 Aug 4 21:37 /etc/ProxySQL.cnf
ProxySQL.db是SQLITE的数据文件,Proxysql很多东西是存储在这个迷你数据库里面的。ProxySQL.log是日志文件,排查问题好地方。ProxySQL.pid这个pid文件不多说了。ProxySQL.cnf是ProxySQL的一些静态配置项,比如一些启动选项,sqlite的数据目录等等。
2.5 ProxySQL的相关进程
[root@hpc01 ProxySQL]# ps -ef|grep ProxySQL
root 1575 1 0 23:25 ? 00:00:00 ProxySQL -c /etc/ProxySQL.cnf -D /var/lib/ProxySQL
root 1576 1575 0 23:25 ? 00:00:02 ProxySQL -c /etc/ProxySQL.cnf -D /var/lib/ProxySQL
细心的同学可能发现了进程有些奇怪哦,1575的父进程号居然是1,1576的父进程号是1575,他们不就是父子关系咯。这是不是很熟悉呢,和MySQL的很相似,我们启动一个进程,然后fork出一个子进程,父进程负责监控子进程运行状况如果挂了则拉起来,子进程负责执行真正的任务。
3.登录ProxySQL
ProxySQL初体验,第一次登录中间件是不是好鸡冻。
使用MySQL客户端工具登录。
[MySQL@hpc01 ~]$ MySQL -u admin -padmin -h 127.0.0.1 -P6032
MySQL: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 0
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
admin@127.0.0.1 [(none)] 11:53:11>>>
很多同学可能已经蒙逼,这不是进入了MySQL数据库了吗?哈哈。笔者第一次玩这个的时候也陷入了这种尴尬的局面,以为特么的搞错了。其实这事ProxySQL作者的一番用意,他使用MySQL客户端作为用户和ProxySQL之间的交换工具,让MySQL的DBA有一种亲切感和熟悉感,我们做DBA的用起来上手更快,不用花时间学习,熟悉,适应,直接上手用。如果以上的prompt有点不一样,请设置环境变量
export MYSQL_PS1="\\u@\\h [\\d] \\r:\\m:\\s>>>"
既然使用MySQL客户端登录,那我们来尝试执行我们常用的MySQL命令,看看啥效果。
admin@127.0.0.1 [(none)] 11:58:13>>>show databases;
+-----+---------+-------------------------------+
| seq | name | file |
+-----+---------+-------------------------------+
| 0 | main | |
| 2 | disk | /var/lib/ProxySQL/ProxySQL.db |
| 3 | stats | |
| 4 | monitor | |
+-----+---------+-------------------------------+
4 rows in set (0.00 sec)
admin@127.0.0.1 [(none)] 11:58:18>>>show tables;
+--------------------------------------+
| tables |
+--------------------------------------+
| global_variables |
| MySQL_collations |
| MySQL_query_rules |
| MySQL_replication_hostgroups |
| MySQL_servers |
| MySQL_users |
| runtime_global_variables |
| runtime_MySQL_query_rules |
| runtime_MySQL_replication_hostgroups |
| runtime_MySQL_servers |
| runtime_scheduler |
| scheduler |
+--------------------------------------+
12 rows in set (0.00 sec)
admin@127.0.0.1 [(none)] 11:58:21>>>
厉害了,word哥。这些命令居然可以用,只是显示的东西有些不一样对吧。哈哈。里面这些配置什么的,详细信息我们后续再详细解释哦。
4.ProxySQL小试牛刀
ProxySQL既然是中间件嘛,就是我们访问数据库主机的一个代理嘛,这里我就给大家一个最简单的demo,我们不直接登录数据库,而是使用ProxySQL来登录数据库。
我们就在安装ProxySQL的本机上安装一个MySQL,然后通过ProxySQL来登录数据库。(很多同学可能不乐意,这有什么鸟用。可是同学,复杂总是从简单开始的嘛)
4.1 初始化数据库
/opt/percona-server-5.7.13-6/bin/MySQLd --initialize-insecure --basedir=/opt/percona-server-5.7.13-6 --datadir=/data/px_MySQL
4.2数据库配置文件
[MySQLd]
# server configuration
datadir=/data/px_MySQL
basedir=/opt/percona-server-5.7.13-6
port=24801
socket=/data/px_MySQL/px_MySQL.sock
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
gtid_mode = ON
enforce_gtid_consistency = 1
log_bin=/data/px_MySQL/MySQL-bin
relay-log=/data/px_MySQL/relay_binary_log
4.3启动数据库
./bin/MySQLd_safe --defaults-file=/data/conf/px_MySQL.cnf &
4.4 在数据库端创建监控ProxySQL的监控用户和业务用户
CREATE USER 'ProxySQL'@'%' IDENTIFIED BY 'ProxySQLPa55';
GRANT USAGE ON *.* TO 'ProxySQL'@'%';
CREATE USER 'sbuser'@'%' IDENTIFIED BY 'sbpass';
GRANT ALL ON * . * TO 'sbuser'@'%';
FLUSH PRIVILEGES;
注意:这是在MySQL数据库中执行的SQL命令
4.5ProxySQL配置
将数据库和数据库相关用户配置进ProxySQL。
这些命令是在ProxySQL中执行的。
INSERT INTO MySQL_servers(hostgroup_id, hostname, port) VALUES (0,'10.25.7.48',24801);
INSERT INTO MySQL_users(username,password,default_hostgroup) VALUES ('sbuser','sbpass',0);
UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='MySQL-monitor_username';
UPDATE global_variables SET variable_value='ProxySQLPa55' WHERE variable_name='MySQL-monitor_password';
最后还要讲配置生效。下面命令也在ProxySQL中执行。
LOAD MYSQL SERVERS TO RUNTIME;
LOAD MYSQL USERS TO RUNTIME;
SAVEMYSQL SERVERS TO DISK;
SAVEMYSQL USERS TO DISK;
关于配置生效,后面详解,ProxySQL配置是三层架构。
4.6 通过ProxySQL登录MySQL
[MySQL@hpc01 ~]$ MySQL -u sbuser -psbpass -h 127.0.0.1 -P 6033 -e "select @@hostname"
MySQL: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| hpc01 |
+------------+
[MySQL@hpc01 ~]$ MySQL -u sbuser -psbpass -h 127.0.0.1 -P 6033
MySQL: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.30 (ProxySQL)
Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
sbuser@127.0.0.1 [(none)] 12:26:14>>>show variables like '%port%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| extra_port | 0 |
| innodb_support_xa | ON |
| large_files_support | ON |
| port | 24801 |
| report_host | |
| report_password | |
| report_port | 24801 |
| report_user | |
| require_secure_transport | OFF |
+--------------------------+-------+
9 rows in set (0.01 sec)
厉害了,word哥。终于通过proxy登录数据库了,是不是有不一样的feel呢。哈哈。后面再续ProxySQL的其他特性,包括查询重写,读写分离,防火墙,query cache等功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。