MySql之讀寫分離

前言

本篇是以MySql之主從複製爲基礎作的拓展mysql

在主從複製中,咱們設置了兩臺數據庫服務器(master,slave)linux

接下來咱們須要作到在master進行寫操做(insert,update,delete)
在slave上進行讀操做(select)sql

通常狀況下,會有多臺slave,由於數據庫的讀寫操做比基本是4:1
因此咱們使用多臺slave服務器來進行負載均衡,分擔數據庫的壓力數據庫

安裝lua

要完成讀寫分離,咱們還要繼續準備一臺數據庫服務器,做爲其集羣的中間件segmentfault

Mysql-Proxy是基於rw-splitting.lua實現的
首先安裝rw-splitting.lua:服務器

wget wget http://www.lua.org/ftp/lua-5.2.4.tar.gz
tar zvfx lua-5.2.4.tar.gz
cd lua-5.2.4

配置安裝文件:負載均衡

vi src/Makefile

找到
CFLAGS= -O2 -Wall (MYCFLAGS)
修改成:
CFLAGS=−O2−Wall−fPIC (MYCFLAGS) 

:wq

安裝lua

make
make install

配置系統變量:rest

cp etc/lua.pc /usr/lib/pkgconfig/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig

安裝中間件Mysql-Proxy

下載地址:code

https://downloads.mysql.com/archives/proxy/

解壓安裝:

tar zxvf mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz
mv mysql-proxy-0.8.0-linux-rhel5-x86-32bit mysql-proxy

配置mysql-proxy

mkdir /mysql-proxy/init.d
cd /mysql-proxy/init.d
vi 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="--admin-username=root --admin-password=password --proxy-read-only-backend-addresses=192.168.10.131:3306 --proxy-backend-addresses=192.168.10.130:3306  --admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua --proxy-lua-script=/opt/mysql-proxy/scripts/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: "
            NICELEVELNICELEVELPROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=warning --log-file=/opt/mysql-proxy/log/mysql-proxy.log
            RETVAL=$?
            echo
            if [ $RETVAL = 0 ]; then
                    touch /var/lock/subsys/mysql-proxy
            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

chmod +x /opt/mysql-proxy/init.d/mysql-proxy

mkdir /opt/mysql-proxy/run
mkdir /opt/mysql-proxy/log
mkdir /opt/mysql-proxy/scripts

安裝rw-splitting.lua讀寫分離腳本

拿到最新的rw-splitting.lua讀寫分離腳本
https://downloads.mysql.com/archives/proxy/下載最新的源碼包

解壓並cd到根目錄,把腳本考到咱們本地mysql-proxy的scripts文件夾下

cp lib/rw-splitting.lua /mysql-proxy/scripts

修改rw-splitting.lua:
vi /mysql-proxy/scripts/rw-splitting.lua

min_idle_connections = 1, //默認爲4
max_idle_connections = 1, //默認爲8

保存後啓動

/mysql-proxy/init.d/mysql-proxy start

以上即是MySql之讀寫分離

相關文章
相關標籤/搜索