欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-26 19:07:28
简介 part1:写在最前     oneproxy平民软件完全自主开发的分布式数据访问层,帮助用户在mysql/postgresql集群...

简介

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=$?
echo
}
stop() {
 echo -n $"stopping $prog ... "
if [ -e ${oneproxy_pid} ]; then
daemon kill -int $(cat ${oneproxy_pid})
 retval=$?
fi
echo
}
restart(){
 stop
sleep 1
 start
}
case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 restart
 ;;
 *)
 echo $"usage: $0 {start|stop|restart}"
 retval=1
esac
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的管理页面

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

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

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

[root@he1 ~]# mysql -usys_admin -pmanager -h192.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 -h192.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 -h192.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 -h192.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 -h192.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 -h192.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 -h192.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实现读写分离与负载均衡实验构建成功,oneproxy还具有分库分表功能,今后会进一步研究。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。