zoukankan      html  css  js  c++  java
  • mysql数据库的读写分离

    如果对数据库的读和写都在同一个数据库中,对其压力太大,而且不能保证其安全性和高可用等

    简单来说就是在主服务器上写,在从上面读

    就是在主从复制的基础上安装一个代理层

    常见的方案

    • 在代码中由开发人员根据select,insert进行路由分类
    • 在客户端和数据库和服务器之间,有一个代理服务器,即mysql-proxy,通过自带的lua脚本对sql进行判断。
      还有就是变形虫(Amoeba)致力于前端代理层,主要应用层访问mysql充当sql路由功能比较广泛

    实验

    #准备四台虚拟机10(master),11(slave),12(slave),13(Amoeba)
    #Amoeba基于jbk开发
    chmod +x jbx-6u31-linux-x64.bin  #在13中给jbk权限,保证前提
    ./jbk...  
    mv jbk /usr/local/jbk  #给jbk位置方便配置变量
    
    vim /etc/profile  #配置jbk变量和amoeba变量
    export JAVA_HOME=/usr/local/jbk
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH:$JAVE_HOME/lib:$JAVE_HOME/jre/bin:$HOME/bin
    
    export AMOEBA_HOME=/usr/local/amoeba
    export PATH=$PATH:$AMOEBA_HOME/bin
    
    jave -version  #查看Java是否报错和版本
    
    mkdir /usr/local/amoeba  #安装配置amoeba
    tar xf amoeba... -C /usr/local/amoeba
    chmod -R 775 /usr/local/amoeba
    
    #10,11,12配置Amoeba的访问授权
    #首先10,11,12完成主从复制配置
    MariaDB[(nome)]>grant on **.* to 'test'@'192.168.200.%' identified by '123.com';
    flush privileges;
    
    cp /usr/local/amoeba/conf/amoeba.xml{,.bak}  #编译Amoeba配置文件
    vim /usr/local/amoeba/conf/amoeba.xml
       <property name="user">amoeba</property>
       <property name="password">123456</property>
       <property name="defaultPool">master</property>
       <property name="writePool">master</property>
       <property name="readPool">slaves</property>
    
    cp /usr/local/amoeba/conf/dbServers.xml{,.bak}  #编译dbServers配置文件
    vim /usr/local/amoeba/conf/dbServers.xml
      
    #启动Amoeba默认端口8066:13号
    nohup /usr/local/amoeba/bin/amoeba start &
    
    
    #在一台新机器上启动mariadb连接13
    mysql -uamoeba -p123123 -h192.168.200.13 -P8066
    
    #在Mysql主服务器上创建一个表,会自动同步到各个从服务器上,然后关掉各个从服务器上的Slave功能,在分别插入语句测试。
    #在10中创建一个库,在新机器上查看11,12的库
    
    dbServers.xml配置文件
    	<!-- mysql port -->
    			<property name="port">3306</property>
    			
    			<!-- mysql schema -->
    			<property name="schema">test</property>
    			
    			<!-- mysql user -->
    			<property name="user">test</property>
    			
    			<!--  mysql password -->
    			<property name="password">123.com</property>
    
    	<dbServer name="master"  parent="abstractServer">
    		<factoryConfig>
    			<property name="ipAddress">192.168.200.10</property>
    		</factoryConfig>
    	</dbServer>
    	
    	<dbServer name="slave1"  parent="abstractServer">
    		<factoryConfig>
    			<property name="ipAddress">192.168.200.11</property>
    		</factoryConfig>
    	</dbServer>
    	
    	<dbServer name="slave2"  parent="abstractServer">
    		<factoryConfig>
    			<property name="ipAddress">192.168.200.12</property>
    		</factoryConfig>
    	</dbServer>
    	
    	<dbServer name="slaves" virtual="true">
    		<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    			<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
    			<property name="loadbalance">1</property>
    			
    			<!-- Separated by commas,such as: server1,server2,server1 -->
    			<property name="poolNames">slave1,slave2</property>
    		</poolConfig>
    	</dbServer>
    
    
  • 相关阅读:
    js 解析 url参数中文的情况
    ++i i++ 的理解
    Linux 下升级python和安装pip
    sipp中的action使用方法
    Linux shell实现阳历转农历
    Linux 终端命令行提示符的艺术PS1进阶
    SQL系列学习(三) 获取Oracle、SqlServer、Access中表名、字段和主键
    SQL系列学习(一) 分页
    自定义服务器控件属性的特性
    JQuery使用$.ajax跨域调用winform托管的WCF服务(原创)
  • 原文地址:https://www.cnblogs.com/wml3030/p/15399028.html
Copyright © 2011-2022 走看看