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

71次阅读
没有评论

共计 5007 个字符,预计需要花费 13 分钟才能阅读完成。

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

简介

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]# ls
bin 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 Settings
ONEPROXY_HOME=/root/oneproxy
ONEPROXY_SBIN= ${ONEPROXY_HOME}/bin/oneproxy 
ONEPROXY_CONF= ${ONEPROXY_HOME}/conf/proxy.conf 
ONEPROXY_PID= ${ONEPROXY_HOME}/log/oneproxy.pid 
RETVAL=0
prog= OneProxy 
start() {
 echo -n $ Starting $prog ...  
 daemon $ONEPROXY_SBIN --defaults-file=$ONEPROXY_CONF
RETVAL=$?
stop() {
 echo -n $ Stopping $prog ...  
if [ -e ${ONEPROXY_PID} ]; then
daemon kill -INT $(cat ${ONEPROXY_PID})
 RETVAL=$?
restart(){
 stop
sleep 1
 start
case  $1  in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 restart
 ;;
 *)
 echo $ Usage: $0 {start|stop|restart} 
 RETVAL=1
exit $RETVAL

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

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

[root@HE4 oneproxy]# cd bin/
[root@HE4 bin]# ls
mysqlpwd oneproxy
[root@HE4 bin]# ./mysqlpwd MANAGER
1C6D087BA5D2607A27DECB2F2AFE247E911E877A

编辑 proxy.cnf 中的内容

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

Part4: 启动 Oneproxy

[root@HE4 oneproxy]# ./demo.sh
[root@HE4 oneproxy]# ./oneproxy.service restart
Stopping 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 读写分离与负载均衡”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计5007字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)