当前位置:Gxlcms > mysql > 在OneProxy的基础上实行MySQL读写分离与负载均衡

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

时间:2021-07-01 10:21:17 帮助过:15人阅读

简介

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

  1. [root@HE4 ~]# tar xvf oneproxy-rhel5-linux64-v5.8.5-ga.tar.gz
  2. [root@HE4 oneproxy]# ls
  3. 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为配置文件

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

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

  1. [root@HE4 oneproxy]# cat oneproxy.service
  2. #!/bin/bash
  3. # chkconfig: - 30 21
  4. # description: OneProxy service.
  5. # Source Function Library
  6. . /etc/init.d/functions
  7. # OneProxy Settings
  8. ONEPROXY_HOME=/root/oneproxy
  9. ONEPROXY_SBIN="${ONEPROXY_HOME}/bin/oneproxy"
  10. ONEPROXY_CONF="${ONEPROXY_HOME}/conf/proxy.conf"
  11. ONEPROXY_PID="${ONEPROXY_HOME}/log/oneproxy.pid"
  12. RETVAL=0
  13. prog="OneProxy"
  14. start() {
  15. echo -n $"Starting $prog ... "
  16. daemon $ONEPROXY_SBIN --defaults-file=$ONEPROXY_CONF
  17. RETVAL=$?
  18. echo
  19. }
  20. stop() {
  21. echo -n $"Stopping $prog ... "
  22. if [ -e ${ONEPROXY_PID} ]; then
  23. daemon kill -INT $(cat ${ONEPROXY_PID})
  24. RETVAL=$?
  25. fi
  26. echo
  27. }
  28. restart(){
  29. stop
  30. sleep 1
  31. start
  32. }
  33. case "$1" in
  34. start)
  35. start
  36. ;;
  37. stop)
  38. stop
  39. ;;
  40. restart)
  41. restart
  42. ;;
  43. *)
  44. echo $"Usage: $0 {start|stop|restart}"
  45. RETVAL=1
  46. esac
  47. exit $RETVAL

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

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

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

编辑proxy.cnf中的内容

  1. [root@HE4 conf]# cat proxy.conf
  2. [oneproxy]
  3. keepalive = 1
  4. event-threads = 4
  5. proxy-group-policy.2 = test:read-slave
  6. log-file = log/oneproxy.log
  7. pid-file = log/oneproxy.pid
  8. lck-file = log/oneproxy.lck
  9. proxy-auto-readonly = 1
  10. proxy-forward-clientip = 1
  11. proxy-trans-debug = 1
  12. proxy-address = :3307
  13. mysql-version = 5.7.16
  14. proxy-master-addresses.1 = 192.168.1.250:3306@test
  15. proxy-slave-addresses.2 = 192.168.1.248:3306@test
  16. proxy-slave-addresses.3 = 192.168.1.249:3306@test
  17. proxy-user-list = sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@test
  18. proxy-user-group = test:sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@test
  19. proxy-part-template = conf/template.txt
  20. proxy-part-tables.1 = conf/part.txt
  21. proxy-part-tables.2 = conf/part2.txt
  22. proxy-part-tables.3 = conf/cust1.txt
  23. proxy-charset = utf8_bin
  24. proxy-secure-client = 127.0.0.1
  25. # proxy-license = 32C54560E06EFF3E
  26. proxy-httpserver = :8080
  27. proxy-httptitle = OneProxy Monitor

Part4:启动Oneproxy

  1. [root@HE4 oneproxy]# ./demo.sh
  2. [root@HE4 oneproxy]# ./oneproxy.service restart
  3. Stopping OneProxy ... [ OK ]
  4. Starting OneProxy ... [ OK ]

测试

Part1:Oneproxy状态校验

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

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

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

  1. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"select @@hostname;"
  2. mysql: [Warning] Using a password on the command line interface can be insecure.
  3. +------------+
  4. | @@hostname |
  5. +------------+
  6. | HE1 |
  7. +------------+
  8. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"select @@hostname;"
  9. mysql: [Warning] Using a password on the command line interface can be insecure.
  10. +------------+
  11. | @@hostname |
  12. +------------+
  13. | HE2 |
  14. +------------+
  15. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"select @@hostname;"
  16. mysql: [Warning] Using a password on the command line interface can be insecure.
  17. +------------+
  18. | @@hostname |
  19. +------------+
  20. | HE1 |
  21. +------------+
  22. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"select @@hostname;"
  23. mysql: [Warning] Using a password on the command line interface can be insecure.
  24. +------------+
  25. | @@hostname |
  26. +------------+
  27. | HE2 |
  28. +------------+
  29. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"select @@hostname;"
  30. mysql: [Warning] Using a password on the command line interface can be insecure.
  31. +------------+
  32. | @@hostname |
  33. +------------+
  34. | HE1 |
  35. +------------+
  36. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"begin;select @@hostname;commit;"
  37. mysql: [Warning] Using a password on the command line interface can be insecure.
  38. +------------+
  39. | @@hostname |
  40. +------------+
  41. | HE3 |
  42. +------------+
  43. [root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"begin;select @@hostname;commit;"
  44. mysql: [Warning] Using a password on the command line interface can be insecure.
  45. +------------+
  46. | @@hostname |
  47. +------------+
  48. | HE3 |
  49. +------------+

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

——总结——

OneProxy配合MySQL实现读写分离与负载均衡实验构建成功,Oneproxy还具有分库分表功能,今后会进一步研究。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

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

您可能感兴趣的文章:

  • 如何使用nginx充当mysql的负载均衡器
  • 基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作
  • Keepalived+HAProxy实现MySQL高可用负载均衡的配置
  • 具有负载均衡功能的MySQL服务器集群部署及实现
  • MySQL如何实现负载均衡功能

人气教程排行