192.168.44.161 主节点创建数据库信息
CREATE DATABASE `task_db`; USE `task_db`; DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; insert into `tb_user`(`id`,`name`) values (1,'刘一'),(2,'陈二'),(3,'张三'),(4,'李四'),(5,'王五'); insert into tb_user(name) values(@@hostname);查看153,154从节点信息
到此,一主多从配置完成
以161为Master、162为Slave
在161主机上创建授权信息、允许162 Slave节点访问 #创建账户: slave_m_162密码:147258 允许192.168.44.162访问 GRANT REPLICATION SLAVE ON *.* TO 'slave_m_162'@'192.168.44.162' IDENTIFIED BY '147258'; #刷新 flush privileges; 查询192.168.44.161 上Master信息 show master status; 以192.168.44.162为Slave节点、链接192.168.44.161 Master节点 #在192.168.44.162上执行 CHANGE MASTER TO MASTER_HOST='192.168.44.161', MASTER_USER='slave_m_162', MASTER_PASSWORD='147258', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=336; #启动Slave 节点 start slave; 查看192.168.44.162 Slave节点状态 show slave status\G;以162为Master、161为Slave
在162主机上创建授权信息、允许162 Slave节点访问 #创建账户: slave_m_161密码:147258 允许192.168.44.161访问 GRANT REPLICATION SLAVE ON *.* TO 'slave_m_161'@'192.168.44.161' IDENTIFIED BY '147258'; #刷新 flush privileges; 查询192.168.44.162 上Master信息 show master status; 以192.168.44.161为Slave节点、链接192.168.44.162 Master节点 #在192.168.44.161上执行 CHANGE MASTER TO MASTER_HOST='192.168.44.162', MASTER_USER='slave_m_161', MASTER_PASSWORD='147258', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=336; #启动Slave 节点 start slave; 查看192.168.44.161 Slave节点状态 show slave status\G;测试双主(互为准备)
192.168.44.161上创建数据库、192.168.44.162上查看备份 192.168.44.162上删除刚创建的数据库、192.168.44.161上查看是否删除 到此、双主搭建完成Amoeba简介
Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。资源相关
Amoeba 192.168.44.162MYSQL 一主多从配置参考如上步骤
Amoeba 负载均衡/读写分离配置
安装JDKLinux下配置JDK,MAVEN,TOMCAT(图文详细)【推荐链接】下载Amoeba wget https://liquidtelecom.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip #解压 unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /opt/module #切换目录 cd /opt/module/ && llAmoeba 配置文件详解
Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。
数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。
访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。
日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。
Amoeba 集群节点信息配置
① 编辑dbServers.xml #切换目录 cd /opt/module/amoeba-mysql-3.0.5-RC/conf #编辑dbServer.xml文件 vim dbServers.xml ② MYSQL 节点基本信息配置 <!-- 链接各MYSQL 节点的 用户密码配置 --> <dbServer name="abstractServer" abstractive="true"> <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"> <property name="connectionManager">${defaultManager}</property> <property name="sendBufferSize">64</property> <property name="receiveBufferSize">128</property> <property name="port">3306</property> <property name="schema">test</property> <property name="user">amoeba</property> <property name="password">amoeba</property> </factoryConfig> <!-- 优化相关 --> <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool"> <property name="maxActive">500</property> <property name="maxIdle">500</property> <property name="minIdle">1</property> <property name="minEvictableIdleTimeMillis">600000</property> <property name="timeBetweenEvictionRunsMillis">600000</property> <property name="testOnBorrow">true</property> <property name="testOnReturn">true</property> <property name="testWhileIdle">true</property> </poolConfig> </dbServer> ③ MYSQL 集群节点配置 <!-- 192.168.44.161 Master节点 --> <dbServer name="master_server1" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.161</property> </factoryConfig> </dbServer> <!-- 192.168.44.153 Slave从节点 --> <dbServer name="slave_server2" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.153</property> </factoryConfig> </dbServer> <!-- 192.168.44.154 Slave从节点 --> <dbServer name="slave_server3" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.154</property> </factoryConfig> </dbServer> ④ MYSQL 读写数据库链接池配置 <!-- 写数据库链接池 --> <dbServer name="masterPool" 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">master_server1</property> </poolConfig> </dbServer> <!--读数据库链接池 --> <dbServer name="slavePool" 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">slave_server2,slave_server3</property> </poolConfig> </dbServer>Amoeba 基本信息/读写分离配置
① 编辑amoeba.xml #编辑命令 vim /opt/module/amoeba-mysql-3.0.5-RC/conf/amoeba.xml ② Amoeba基本链接信息配置 <proxy> <!-- service class must implements com.meidusa.amoeba.service.Service --> <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService"> <!-- port --> <property name="port">8066</property> <!-- bind ipAddress --> <property name="ipAddress">192.168.44.162</property> <property name="connectionFactory"> <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"> <property name="sendBufferSize">128</property> <property name="receiveBufferSize">64</property> </bean> </property> <property name="authenticateProvider"> <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> <!-- 链接Amoeba的账户 密码 --> <property name="user">amoeba</property> <property name="password">amoeba</property> <property name="filter"> <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController"> <property name="ipFile">${amoeba.home}/conf/access_list.conf</property> </bean> </property> </bean> </property> </service> <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"> <property name="executeThreadSize">128</property> <property name="statementCacheSize">500</property> <property name="serverCharset">utf8</property> <property name="queryTimeout">60</property> </runtime> </proxy> ③ Amoeba读写分离配置 <!-- 读写分离配置--> <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> <property name="ruleLoader"> <bean class="com.meidusa.amoeba.route.TableRuleFileLoader"> <property name="ruleFile">${amoeba.home}/conf/rule.xml</property> <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property> </bean> </property> <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property> <property name="LRUMapSize">1500</property> <!-- 配置读写分离 MYSQL链接池 --> <property name="defaultPool">masterPool</property> <property name="writePool">masterPool</property> <property name="readPool">slavePool</property> <property name="needParse">true</property> </queryRouter>Amoeba JVM配置
#编辑命令 vim /opt/module/amoeba-mysql-3.0.5-RC/jvm.properties #修改-Xss196k 为512k JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m" 在MYSQL集群节点上为Amoeba配置授权信息 #创建用户 GRANT ALL ON *.* TO 'amoeba'@'192.168.44.162' IDENTIFIED BY 'amoeba'; #刷新配置 flush privileges; Amoeba 启动 #启动方式一 nohup bash -x /opt/module/amoeba-mysql-3.0.5-RC/bin/benchmark #启动方式二 #切换目录 cd /opt/module/amoeba-mysql-3.0.5-RC/bin/ #启动 ./launcher start #查看进程 ps -ef|grep amoeba Amoeba 读写分离测试 ① 链接Amoeba#链接Amoeba服务 mysql -h 192.168.44.162 -u amoeba -pamoeba -P 8066 ② 测试写操作 ③ 测试读操作 到此,Amoeba读写分离配置完成。