共计 5157 个字符,预计需要花费 13 分钟才能阅读完成。
简介
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。主从的构建不是本文的重点,需要的可移步:
1 分钟利用 mysqlreplicate 快速搭建 MySQL 主从 http://www.linuxidc.com/Linux/2017-11/148306.htm
Part3: 配置 O neproxy
目录中的 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: 启动 O neproxy
[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 -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 还具有分库分表功能,今后会进一步研究。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-11/148305.htm