该章节的实验需要基于http://t.csdnimg.cn/mT4Bs中的实验来进行。
-
读写分离
-
实现方法
-
在代码上实现读写分离,但对于运维者不友好
-
设置代理
-
现在大多采用amoeba作为中间代理服务器做读写分离操作。
- 2008,阿里巴巴前员工,陈思儒基于java1.6的环境开发,因为没有做过大型升级,因此依赖的java环境较老。不支持事务的分离
-
-
注意事项
- 要用与amoeba相比配的jdk环境,1.6或者1.5
-
实验过程
-
本实验基于前文的主从复制,在添加一个amoeba服务器与客户端即可。
-
以jdk1.6的二进制包为例
-
-
将该软件执行后移动到常用软件目录下即可一般为/usr/local/jdk,"jdk"是重命名后的目录名
-
安装后修改变量信息将jdk与amoeba的相关变量都写入/etc/profile中
-
export JAVA_HOME=/usr/local/jdk1.6
-
export CLASSPATH=CLASSPATH:JAVA_HOME/lib:$JAVA_HOME/jre/lib
-
export PATH=JAVA_HOME/lib:JAVA_HOME/jre/bin:PATH:JAVA_HOME/bin
-
export AMOEBA_HOME=/usr/local/amoeba/
-
export PATH=PATH:AMOEBA_HOME/bin
-
-
然后在系统命令行中执行java -version查看版本信息,出现如下字样表示jdk环境部署成功。
-
-
-
以amoeba-mysql-binary-2.2.0.tar.gz为例
-
由于解压后该tar包并不会创建一个综合目录,存放所有信息,所以我们需要提前创建一个目录将解压后的数据放到该目录下。
-
mkdir /usr/local/amoeba
- 创建存放软件目录
-
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
- -C :指定解压目录
-
-
修改配置文件参数(/usr/local/amoeba/conf)
-
有两个文件需要注意
-
amoeba.xml
-
该文件是对应了amoeba与客户端的连接
-
有几个单元需要注意
-
标识1:该位置定义了服务的名称-
标识2:该位置决定了该服务监听的端口
- 通常情况下,一个amoeba只会与一个数据库的某一个库或者表建立连接,当根据不同的需要,要访问不同的库时,基于安全的考虑并不会给予amoeba与数据库的连接的账号过大的权限,因此在同一台服务器上跑多个amoeba程序是一种解决办法。修改监听端口即可实现。
-
认证器单元:
-
标识1:提供给客户端的访问账号,
-
标识2:客户端访问账号的密码
-
请求路由单元:
-
标识1:定义默认池的名字
-
标识2:定义写入池的名字
-
标识3:定义读取池的名字
- 这是修改后的配置,不是默认的配置
-
-
-
-
dbServers.xml
-
该文件对应了amoeba与数据库的连接
-
标识1:amoeba与数据库建立连接的端口-
标识2:类似于默认登录到的数据库,要么提前创建一个没用的库,要么指定一个已有的库,要有安全考虑。
-
标识3:amoeba访问数据库的账号,需要在数据库中授予相应的权限。
-
标识4:amoeba访问数据路的账号的密码。
-
在这个单元中,有多少个服务器就可以指定多少个服务器,给每个服务器起名用于区分,并指定IP地址。在这个amoeba中只负责与3306的端口的MySQL数据库建立连接。
-
标识1:与amoeba.xml默认池的名字要一致
-
标识2:与amoeba.xml的读取池名字要一致
-
标识3:可以设置多个读取服务器,分担压力。
-
-
-
-
-
解压后因为前面已经添加过系统变量,所以直接执行amoeba 会有相关提示证明部署没有问题。
-
修改完毕后就可以进行启动测试
-
amoeba start &
- 因为该程序运行时会占用前端,因此可以放到后端运行。
-
查看进程后出现该字样标识成功。
-
-
之后就可以进行创建数据测试是否读写分离。默认是按照轮询的方式从读取池中的服务区读取信息。
-
-
-
将以上全选复制,粘贴到xmind中可查看到条理性笔记。