奇虎360公司开源的Atlas是优秀的数据库中间件,美团点评DBA团队针对公司内部需求,在其上做了很多改进工作,形成了新的高可靠、高可用企业级数据库中间件DBProxy,已在公司内部生产环境广泛使用,较为成熟、稳定。 |
|
yum install -y Percona-Server-devel-55.x86_64 Percona-Server-client-55.x86_64 Percona-Server-shared-55 jemalloc jemalloc-devel libevent libevent-devel openssl openssl-devel lua lua-devel bison flex libtool.x86_64 |
http://pkgs.fedoraproject.org/repo/pkgs/mingw-glib2/glib-2.42.0.tar.xz/71af99768063ac24033ac738e2832740/ cd glib-2.42.0 autoreconf -ivf ./configure |
configure: error: Package requirements (libffi >= 3.0.0) were not met: No package 'libffi' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBFFI_CFLAGS and LIBFFI_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. |
[root@mycat_eye glib-2.42.0]# yum install libffi-devel ./configure make && make install |
git clone git@github.com:Meituan-Dianping/DBProxy.git |
sh autogen.sh sh bootstrap.sh make && make install # yum -y install glib2-devel |
DBProxy 可以配置一主多从结构,即必须配置一个主库,0个或多个从库,主库可进行读写操作,从库只可进行读操作。上游组件/应用的流量可以通过DBProxy中设置的规则,将流量路由到合适的数据库中。DBProxy部署示意图如下所示:
mkdir /usr/local/mysql-proxy/conf # 创建配置文件所在文件夹 cp script/source.cnf.samples /usr/local/mysql-proxy/conf/db1.cnf #拷贝示例配置文件 |
[mysql-proxy] #管理接口的用户名 admin-username=guest #管理接口的密码 admin-password=guest #用户名与其对应的加密过的MySQL密码,密码需要进行加密! pwds=guest:uqmOY9A= #DBProxy监听的管理接口IP和端口 admin-address=0.0.0.0:3308 #DBProxy监听的工作接口IP和端口 proxy-address=0.0.0.0:3307 #DBProxy后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔 如果不配置则默认127.0.0.1:3306 proxy-backend-addresses=1.1.1.1:3306 #DBProxy后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔 proxy-read-only-backend-addresses=1.1.1.2:3306 #工作线程数,对DBProxy的性能有很大影响,可根据情况适当设置,默认为1 event-threads=8 #实例名称,用于同一台机器上多个DBProxy实例间的区分 instance=db1 ##日志存放的路径 log-path=/opt/tmp/dbproxy_log/ |
特别注意
配置文件中配置的“pwds=guest:uqmOY9A=”项中的密码是加密后的密码,加密方法:
./dbproxy/script/encrypt [原始密码] |
2.3 启动DBProxy
在安装目录下的bin/mysql-proxy进行启动,启动时需传入配置文件的路径。例如:默认安装的路径为:/usr/local/mysql-proxy,配置文件路径为:/usr/local/mysql-proxy/conf/source.cnf,且配置文件中配置了必须配置的参数,启动命令如下:
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/source.cnf |
脚本启动: $install_path/mysql-proxyd $instance_name(实例名) start/restart/stop /usr/local/mysql-proxy/bin/mysql-proxyd db1 start/restart/stop |
2.4 查看进程
[root@mycat_eye mysql-proxy]# ps -ef|grep mysql-proxy root 116910 1 0 17:51 ? 00:00:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/source.cnf root 116911 116910 0 17:51 ? 00:00:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/source.cnf root 116966 37381 0 17:52 pts/1 00:00:00 grep --color=auto mysql-proxy |
DBProxy 对外暴露两类端口:admin端口和proxy端口。
admin端口是用来管理DBProxy的,管理员可以连接DBProxy的管理端口对DBProxy当前状态、参数进行查看和设置;
proxy端口是用来与数据库进行交互的,应用端连接该端口,可与后台数据库进行交互。
#管理接口的用户名 admin-username=guest #管理接口的密码 admin-password=guest #DBProxy监听的管理接口IP和端口 admin-address=0.0.0.0:3308 |
[root@mycat_eye mysql-proxy]# mysql -uguest -pguest -P3309 -h127.0.0.1 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.35-33.0-log Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. guest@127.0.0.1 :(none)05:53:15> |
mysql -uguest -pguest -P3309 -h127.0.0.1 |
登录DBProxy的admin端口后,可以使用所提供的命令对DBProxy进行管理,查看DBProxy所提供的命令可使用:
select * from help; |
#用户名与其对应的加密过的MySQL密码,密码需要进行加密! pwds=guest:uqmOY9A= #DBProxy监听的工作接口IP和端口 proxy-address=0.0.0.0:3307 |
[root@mycat_eye conf]# mysql -uguest -pguest -P3308 -h127.0.0.1 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.35-33.0-log Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. guest@127.0.0.1 :(none)05:58:07> |
连接proxy端口之后,便可以正常发送DBProxy兼容的sql语句了,例如:
use dbproxy_test; select * from dbproxy_function_test; |
注意:编译安装过程中会遇到多种错误,如果遇到,请看下一篇