千家信息网

如何在OneProxy的基础上实行MySQL读写分离与负载均衡

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章将为大家详细讲解有关如何在OneProxy的基础上实行MySQL读写分离与负载均衡,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介Part1:写在最前On
千家信息网最后更新 2024年11月30日如何在OneProxy的基础上实行MySQL读写分离与负载均衡

这篇文章将为大家详细讲解有关如何在OneProxy的基础上实行MySQL读写分离与负载均衡,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

简介

Part1:写在最前

OneProxy平民软件完全自主开发的分布式数据访问层,帮助用户在MySQL/PostgreSQL集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有SQL白名单(防SQL注入)及IP白名单功能的SQL防火墙软件。采用与MySQL Proxy一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的数据库故障切换(Failover)、读写分离(Read/Write Split)、分库分表(Horizontal Partitioning)等复杂方案变得极其简单可控!基于Libevent机制实现,单个实例可以实现25万的SQL转发能力,用一个OneProxy节点可以带动整个MySQL集群,为业务发展贡献一份力量。

Part2:环境简介

HE1:192.168.1.248 slave1

HE2:192.168.1.249 slave2

HE3:192.168.1.250 Master

HE4:192.168.1.251 Oneproxy

环境构建

Part1:安装Oneproxy

[root@HE4 ~]# tar xvf oneproxy-rhel5-linux64-v5.8.5-ga.tar.gz[root@HE4 oneproxy]# lsbin conf demo.sh log oneproxy.service README testadmin.sql testautocommit.sql testproxy.sql trantest.sql

Part2:构建主从环境

本文的架构是一主两从,HE3作为Master,HE1,HE2作为Slave。主从的构建不是本文的重点,需要的可移步:

如何快速使用mysqlreplicate搭建MySQL主从

Part3:配置Oneproxy

目录中的demo是初次启动脚本,oneproxy.service是启停脚本,在新版的oneproxy中,conf文件夹的proxy.cnf为配置文件

[root@HE4 oneproxy]# cat demo.sh #/bin/bash#export ONEPROXY_HOME=/root/oneproxy# valgrind --leak-check=full \ ${ONEPROXY_HOME}/bin/oneproxy --defaults-file=${ONEPROXY_HOME}/conf/proxy.conf

我们将demo.sh中的ONEPROXY_HOME变更为解压oneproxy时所在的目录

[root@HE4 oneproxy]# cat oneproxy.service #!/bin/bash# chkconfig: - 30 21# description: OneProxy service.# Source Function Library. /etc/init.d/functions# OneProxy SettingsONEPROXY_HOME=/root/oneproxyONEPROXY_SBIN="${ONEPROXY_HOME}/bin/oneproxy"ONEPROXY_CONF="${ONEPROXY_HOME}/conf/proxy.conf"ONEPROXY_PID="${ONEPROXY_HOME}/log/oneproxy.pid"RETVAL=0prog="OneProxy"start() { echo -n $"Starting $prog ... " daemon $ONEPROXY_SBIN --defaults-file=$ONEPROXY_CONFRETVAL=$?echo}stop() { echo -n $"Stopping $prog ... "if [ -e ${ONEPROXY_PID} ]; thendaemon kill -INT $(cat ${ONEPROXY_PID}) RETVAL=$?fiecho}restart(){ stopsleep 1 start}case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=1esacexit $RETVAL

同时,将oneproxy.service中的ONEPROXY_HOME也改为解压时的目录

进入oneproxy中的bin目录,使用mysqlpwd对密码进行加密

[root@HE4 oneproxy]# cd bin/[root@HE4 bin]# lsmysqlpwd oneproxy[root@HE4 bin]# ./mysqlpwd MANAGER1C6D087BA5D2607A27DECB2F2AFE247E911E877A

编辑proxy.cnf中的内容

[root@HE4 conf]# cat proxy.conf [oneproxy]keepalive = 1event-threads = 4proxy-group-policy.2 = test:read-slavelog-file = log/oneproxy.logpid-file = log/oneproxy.pidlck-file = log/oneproxy.lckproxy-auto-readonly = 1proxy-forward-clientip = 1proxy-trans-debug = 1proxy-address = :3307mysql-version = 5.7.16proxy-master-addresses.1 = 192.168.1.250:3306@testproxy-slave-addresses.2 = 192.168.1.248:3306@testproxy-slave-addresses.3 = 192.168.1.249:3306@testproxy-user-list = sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@testproxy-user-group = test:sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@testproxy-part-template = conf/template.txtproxy-part-tables.1 = conf/part.txtproxy-part-tables.2 = conf/part2.txtproxy-part-tables.3 = conf/cust1.txtproxy-charset = utf8_binproxy-secure-client = 127.0.0.1# proxy-license = 32C54560E06EFF3Eproxy-httpserver = :8080proxy-httptitle = OneProxy Monitor

Part4:启动Oneproxy

[root@HE4 oneproxy]# ./demo.sh[root@HE4 oneproxy]# ./oneproxy.service restartStopping OneProxy ... [ OK ]Starting OneProxy ... [ OK ]

测试

Part1:Oneproxy状态校验

浏览器打开192.168.1.251:8080端口能够看到oneproxy的管理页面

这里可以看到主从的各种状态信息。

Part2:负载均衡与读写分离校验

[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"select @@hostname;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE1 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"select @@hostname;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE2 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"select @@hostname;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE1 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"select @@hostname;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE2 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"select @@hostname;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE1 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"begin;select @@hostname;commit;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE3 |+------------+[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 -e"begin;select @@hostname;commit;"mysql: [Warning] Using a password on the command line interface can be insecure.+------------+| @@hostname |+------------+| HE3 |+------------+

可以看到HE1,HE2两个slave作为负载均衡没有问题,HE3作为写服务器也没有问题。

关于"如何在OneProxy的基础上实行MySQL读写分离与负载均衡"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0