|NO.Z.00098|——————————|^^ 部署 ^^|——|Linux&MySQL集群.V06|——|MySQL中间件|读写分离|
一、配置读写分离
### --- 安装 gcc 环境(amoeba 需要源码安装)
[root@server23 ~]# yum -y install gcc*
### --- 拷贝第三方软件,创建单独的目录
~~~ 将amoeba-n.zip上传到服务器
[root@server23 ~]# unzip amoeba-n.zip
~~~ 创建单独的目录,用来存储安装amoeba相关的配置
[root@server23 ~]# mkdir /amoeba
### --- 先安装 jdk(amoeba 是由 java 语言编写的,所以先安装 jdk),配置 java 环境
[root@server23 ~]# cd amoeba-n
[root@server23 amoeba-n]# tar -zxvf jdk-7u40-linux-x64.gz
[root@server23 amoeba-n]# cp -a jdk1.7.0_40/ /amoeba/jdk
### --- 声明用 java 写出来的程序如何调用(/etc/profile)
~~~ 配置JDK+amoeba的环境变量
[root@server23 amoeba-n]# vim /etc/profile
# java + amoeba
export JAVA_HOME=/amoeba/jdk
export PATH=$JAVA_HOME:/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/bin/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
[root@server23 amoeba-n]# source /etc/profile
### --- 验证JDK是否部署成功
[root@server23 amoeba-n]# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-17)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
二、部署Amoeba服务
### --- 安装 amoeba
[root@server23 amoeba-n]# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba
### --- 给amoeba赋予可执行权限
[root@server23 amoeba]# chmod +x bin/*
### --- 修改amoeba配置文件
[root@server23 amoeba]# vim conf/amoeba.xml
//<server>.....</server>区域
<server> #server区域的配置
<!-- proxy server掳贸露篓碌?露?驴? -->
<property name="port">8066</property> #端口号
<!-- proxy server掳贸露篓碌?IP -->
<property name="ipAddress">20.20.20.23</property> #amoeba安装的ip地址
<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">20</property> #使用默认值
<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">30</property>
<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">30</property>
<!-- socket Send and receive BufferSize(unit:K) -->
<property name="netBufferSize">128</property>
<!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
<property name="tcpNoDelay">true</property>
<!-- 露??芒?茅?陇碌???禄搂?没 -->
<property name="user">amoeba</property> #登录amoeba的用户名,本来是root(和管理员用户没有关系)
<!-- 露??芒?茅?陇碌????毛 -->
<property name="password">123456</property> #登录用户使用的密码
<!-- query timeout( default: 60 second , TimeUnit:second) -->
<property name="queryTimeout">60</property>
</server>
### --- 连接主从数据库的参数
[root@server23 amoeba]# vim conf/amoeba.xml
<dbServerList>......</dbServerList>区域
<dbServerList>
<dbServer name="server1"> #服务器名字
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<property name="user">abc</property>
<property name="password">123456</property> #登录的是哪个数据库服务器(这里是主)
</factoryConfig>
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property> #使用过的用户名是什么(这里是在主服务器上授权的那个用户)
<property name="minIdle">10</property> #使用的密码
<property name="minEvictableIdleTimeMillis">600000</property> #下列为优化相关的参数,可以不执行配置
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
<dbServer name="server2"> #服务器名字
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<property name="port">3306</property>
<property name="ipAddress">20.20.20.22</property> #登录的是哪个数据库服务器(这里是从)
<property name="schema">atyanqi</property>
<property name="user">abc</property> #使用过的用户名是什么(这里是在从服务器上授权的那个用户)
<property name="password">123456</property> #使用的密码
</factoryConfig>
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
#默认写的时候找谁写
</dbServer>
<dbServer name="write" virtual="true"> #默认连接哪一个,默认连接主还是从,默认连接write用来写
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property>
<property name="poolNames">server1</property>·· #默认连接时使用server1去连接
</poolConfig>
</dbServer>
#默认读的时候找谁读
<dbServer name="read" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property>
<property name="poolNames">server1,server2</property> #默认读的时候server1和server2都可以用来读
</poolConfig>
</dbServer>
#配置读写分离操作模块
</dbServerList>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
<property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">write</property> #默认访问的池为write池
<property name="writePool">write</property> #写的时候默认是write池
<property name="readPool">read</property> #读的时候默认是read池
<property name="needParse">true</property>
</queryRouter>
### --- 启动 amoeba,修改一下启动脚本:/usr/local/amoeba/bin/amoeba
~~~ 注意:将-Xss128k 修改为 –Xss256
[root@server23 amoeba]# vim /usr/local/amoeba/bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
三、DBServerList结构图

### --- 在主和从服务器上进行指定用户授权,
~~~ 授权目的为了让 amoeba 能连接到主从服务器进行查询。
[root@server23 amoeba]# nohup bash -x /usr/local/amoeba/bin/amoeba &
### --- 在主服务器上授权
mysql> grant all on atyanqi.* to abc@'20.20.20.23' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
### --- 在从服务器上授权
mysql> grant all on atyanqi.* to abc@'20.20.20.23' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
### --- 使用amoeba服务器进行测试
[root@server23 ~]# yum install -y mysql
[root@server23 ~]# mysql -uabc -p123456 -h20.20.20.21 // 连接主服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| atyanqi |
| test |
+--------------------+
3 rows in set (0.00 sec)
[root@server23 ~]# mysql -uabc -p123456 -h20.20.20.22
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| atyanqi |
| test |
+--------------------+
3 rows in set (0.00 sec)
### --- 把这个放到后台 退出终端也可以继续运行
~~~ 自动输出
[root@server23 ~]# nohup bash -x /usr/local/amoeba/bin/amoeba &
[1] 1945
[root@server23 ~]# nohup: ignoring input and appending output to `nohup.out'
### --- 查看一下运行的程序 查看到的话就说明程序已经运行了起来
[root@server23 ~]# ps -aux |grep amoeba
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 1945 3.9 3.1 1555704 60220 pts/0 Sl 15:12 0:00 /amoeba/jdk/bin/java -server -Xms256m -Xmx256m -Xss256k -Damoeba.home=/usr/local/amoeba -Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath /usr/local/amoeba/lib/classworlds-1.0.jar org.codehaus.classworlds.Launcher
root 1976 0.0 0.0 103312 876 pts/0 S+ 15:13 0:00 grep amoeba
[root@server23 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 ::ffff:20.20.20.23:8066 :::* LISTEN 1945/java
四、验证测试(安装一个 MySQL 软件包才可以连接)
### --- 验证测试(安装一个 MySQL 软件包才可以连接)
[root@server23 ~]# mysql -uamoeba -p123456 -P8066 -h20.20.20.23
mysql>
### --- 在主、从服务器上创建表 a1,在主服务器的表中插入数据
### --- 两次产生的结果不一致,说明它是从主从里面各查询一次,说明负载均衡实现OK
### --- 以上测试纯粹为了实验效果,在实际生产中,主从开启,主服务器上写入的数据也会同步到从服务器中
mysql> select * from atyanqi.yjs;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | laow | 28 |
| 2 | laos | 29 |
| 3 | laox | 18 |
+------+------+------+
3 rows in set (0.00 sec)
mysql> select * from atyanqi.yjs;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | laow | 28 |
| 2 | laos | 29 |
+------+------+------+
2 rows in set (0.01 sec)
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv007-network
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」