|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

 

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示