zoukankan      html  css  js  c++  java
  • mysql配置mysql-proxy读写分离

    192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读。myql-proxy的IP是192.168.23.130

    下面开整

    先安装lua

    Lua 是一个小巧的脚本语言。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
    一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

    先安装可能的依赖包

    [root@bogon ~]# yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
    libevent* glib* readline-devel
    
    
    [root@bogon ~]# mkdir /opt/install/
    
    [root@bogon ~]# cd /opt/install/
    
    [root@bogon install]# wget http://www.lua.org/ftp/lua-5.3.2.tar.gz
    
    [root@bogon install]# tar zxvf lua-5.3.2.tar.gz
    
    [root@bogon install]# cd lua-5.3.2
    
    [root@bogon install]# make linux

    下面开始安装mysql-proxy

    安装之前先看一下自己机器是否是64位系统
    查看centos内核的版本

    [root@bogon install]# cat /etc/issue 
    

      查看linux版本

    [root@bogon install]# cat /proc/version  
    [root@bogon install]# lsb_release -a  
    

      

    如果以上命令都没有出现64字眼说明是32位系统,这里主要是确定你将要下载的mysql-proxy版本应该是哪个。

    下载地址:http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

    [root@bogon install]# cd /opt/install  
      
    [root@bogon install]# wget http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz  
      
    [root@bogon install]# tar zxvf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz
    [root@bogon install]# mkdir /usr/local/mysql-proxy
    [root@bogon install]# cp /opt/install/mysql-proxy-0.8.4-linux-rhel5-x86-32bit/* /usr/local/mysql-proxy

    [root@bogon install]# cd /usr/local/mysql-proxy
    [root@bogon install]# export PATH=$PATH:/usr/local/mysql-proxy/bin/

      编辑mysql-proxy配置文件

    编辑mysql-proxy配置文件

    [root@bogon install]# cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql-proxy/
    [root@bogon install]# vi rw-splitting.lua

      找到:

    if not proxy.global.config.rwsplit then  
            proxy.global.config.rwsplit = {  
                    min_idle_connections = 4,  
                    max_idle_connections = 8,  
      
                    is_debug = false  
            }  
    end  
    

      

    这里的4、8是指定链接数,大家可以在做试验时调整为1。

    ok,保存,退出。

    mysql-proxy --proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.2.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua&  

    这里的192.168.23.131与192.168.23.132是主从数据库。参见http://blog.csdn.net/e421083458/article/details/19574049

    以上命令后缀追加&表示为后端任务。

    打开4040端口防火墙端口,因为mysql-proxy监听端口是4040再也不是3306了。正好做以区分。

    [root@bogon install]# /sbin/iptables -I INPUT -p tcp --dport 4040 -j ACCEPT  
      
    [root@bogon install]#  /etc/rc.d/init.d/iptables save  
      
    [root@bogon install]# service iptables save  
    

      查看监听情况:

    [root@bogon install]# netstat -tlp | grep mysql-proxy  
      
    tcp        0      0 *:yo-main                   *:*                         LISTEN      13364/mysql-proxy  
    

      

    yo-main很奇怪吧,对我也奇怪,不管它了,下面我们测试一下功能吧。

    刚刚我们提到的192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读。myql-proxy的IP是192.168.23.130

    创建用于读写分离的数据库连接用户

    在131服务器上操作以下命令:

    [root@bogon ~]# mysql -uroot  -p123456  
      
    mysql> grant all on *.* to 'proxy'@'192.168.23.130' identified by '123456'; 
    

      

    由于我们设置了131与132的主从复制,所以此时132也执行了以上命令,我们可以确定一下。

    在132服务上操作以下命令:

    mysql> select user,password,host from mysql.user;  
      
    +--------+-------------------------------------------+----------------+  
    | user   | password                                  | host           |  
    +--------+-------------------------------------------+----------------+  
    | root   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost      |  
    | root   |                                           | bogon          |  
    | root   |                                           | 127.0.0.1      |  
    | proxy | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 192.168.23.130 |  
    +--------+-------------------------------------------+----------------+  
    4 rows in set (0.00 sec)  

    没错结果存在。

    但是我们要做的试验是测试读写分离,所以要让这两台服务器有误差才行。所以暂停132的从服务:

    mysql> slave stop;  

    下面我们在131服务器上操作以下命令:

    mysql> insert into first_tb values (007,’first’);  
    mysql> insert into first_tb values (110,’second’); 

    最后再到132上确认一下数据是否有误差,下面试验开始。

    在131上打开4个终端,依次敲以下的命令:

    [root@bogon ~]# mysql -uproxy -p123456 -P4040 -h192.168.23.130   
      
    mysql> select * from first_db.first_tb;  

    你会发现结果会有不一样,那证明配置试验成功。也可以多此尝试以上两行代码直到得到结果。

    试验结束记得将slave start,方法参照http://blog.csdn.net/e421083458/article/details/19574049

    追加内容:设置mysql-proxy服务脚本。

    #!/bin/sh  
      
    #  
    # mysql-proxy This script starts and stops the mysql-proxy daemon  
    #  
    # chkconfig: - 78 30  
    # processname: mysql-proxy  
    # description: mysql-proxy is a proxy daemon to mysql  
      
    # Source function library.  
    . /etc/rc.d/init.d/functions  
      
    #PROXY_PATH=/usr/local/bin  
    PROXY_PATH=/opt/mysql-proxy/bin  
      
    prog="mysql-proxy"  
      
    # Source networking configuration.  
    . /etc/sysconfig/network  
      
    # Check that networking is up.  
    [ ${NETWORKING} = "no" ] && exit 0  
      
    # Set default mysql-proxy configuration.  
    #PROXY_OPTIONS="--daemon"  
      
    PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.23.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua"  
      
    PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid  
      
    # Source mysql-proxy configuration.  
    if [ -f /etc/sysconfig/mysql-proxy ]; then  
            . /etc/sysconfig/mysql-proxy  
    fi  
      
    PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH  
    # By default it's all good  
    RETVAL=0  
      
    # See how we were called.  
    case "$1" in  
      start)  
            # Start daemon.  
            echo -n $"Starting $prog: "  
            $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=root --log-level=debug --log-file=/opt/mysql-proxy/log/mysql-proxy.log  
            RETVAL=$?  
            echo  
            if [ $RETVAL = 0 ]; then  
                    touch /var/lock/subsys/mysql-proxy]  
                    echo "ok"  
            fi  
           ;;  
      stop)  
            # Stop daemons.  
            echo -n $"Stopping $prog: "  
            killproc $prog  
            RETVAL=$?  
            echo  
            if [ $RETVAL = 0 ]; then  
                    rm -f /var/lock/subsys/mysql-proxy  
                    rm -f $PROXY_PID  
            fi  
           ;;  
      restart)  
            $0 stop  
            sleep 3  
            $0 start  
           ;;  
      condrestart)  
           [ -e /var/lock/subsys/mysql-proxy ] && $0 restart  
          ;;  
      status)  
            status mysql-proxy  
            RETVAL=$?  
           ;;  
      *)  
            echo "Usage: $0 {start|stop|restart|status|condrestart}"  
            RETVAL=1  
           ;;  
    esac  
    exit $RETVAL  

    启动脚本:

    [root@bogon init.d]# /opt/mysql-proxy/init.d/mysql-proxy start

  • 相关阅读:
    【LeetCode】3. Longest Substring Without Repeating Characters
    【LeetCode】65. Valid Number
    【LeetCode】8. String to Integer (atoi)
    【Java】 大话数据结构(18) 排序算法(5) (直接插入排序)
    【LeetCode】557. Reverse Words in a String III
    【LeetCode】151. Reverse Words in a String
    【LeetCode】28. Implement strStr()
    【LeetCode】125. Valid Palindrome
    【Java】 遍历HashMap
    【LeetCode】170. Two Sum III – Data structure design
  • 原文地址:https://www.cnblogs.com/sandea/p/5542020.html
Copyright © 2011-2022 走看看