准备工作:
集群规划
服务器名 |
物理地址 |
VIP |
db01 |
172.16.1.9 |
172.16.1.20 (写) |
db02 |
172.16.1.10 |
172.16.1.21(读) |
monitor |
172.16.1.11 |
172.16.1.22(读) |
ameoba |
172.16.1.12 |
|
说明:需要提前配置好MySQL的主主复制。完了才能进行下面的内容。
安装配置MMM:
(1) monitor(监控节点)
# yum install mysql-mmm mysql-mmm-agent mysql-mmm-tools mysql-mmm-monitor
(2) db01和db02 (mysql节点)
# yum install mysql-mmm-agent
(3) 所有的MySQL节点添加以下两个用户,这里可以在(db01)做该操作,会自动同步到其它节点。
mysql> grant replication client on *.* to 'mmm_monitor'@'172.16.1.%' identified by 'monitor_password';
mysql> grant super, replication client, process on *.* to 'mmm_agent'@'172.168.1.%' identified by 'agent_password';
mysql> flush privileges;
(4)节点(db01,db02,monitor)创建如下文件:
vi /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface eth0
pid_path /run/mysql-mmm-agent.pid
bin_path /usr/libexec/mysql-mmm/
replication_user xxxxx #创建主主复制的时候的复制账号
replication_password xxxxx
agent_user mmm_agent
agent_password agent_password
</host>
<host db1>
ip 172.16.1.9
mode master
peer db2
</host>
<host db2>
ip 172.16.1.10
mode master
peer db1
</host>
<role writer>
hosts db1
ips 172.16.1.20
mode exclusive
</role>
<role reader>
hosts db1, db2
ips 172.16.1.21, 172.16.1.22
</role>
(5) 配置agent节点,所有mysql主主复制服务器均为agent节点
① db01,db02 的MySQL节点配置mmm_agent.conf
# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #在四台mysql节点上设置对应的db,分别为db1、db2、db3、db4
② 默认为启用,可以不用修改
# cat /etc/default/mysql-mmm-agent
# mysql-mmm-agent defaults
ENABLED=1
③ mysql节点启动服务
# systemctl start mysql-mmm-agent
(6)配置monitor监控节点
[root@node5 ~]# vi /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /run/mysql-mmm-monitor.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 172.16.1.9,172.16.1.10,172,16.1.61 #配置测试连通性的地址,地址可以随意只要能通就行。
auto_set_online 60
# The kill_host_bin does not exist by default, though the monitor will
# throw a warning about it missing. See the section 5.10 "Kill Host
# Functionality" in the PDF documentation.
#
# kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host
#
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password monitor_password
</host>
debug 0
启动monitor服务
# systemctl start mysql-mmm-monitor
(7) 在monitor节点上查看个节点状态
[root@monitor mysql-mmm]# mmm_control show
db1(172.16.1.9) master/ONLINE. Roles: reader(172.16.1.21), writer(172.16.1.20)
db2(172.16.1.10) master/ONLINE. Roles: reader(172.16.1.22)
安装配置Amoeba:
(1)安装软件
unzip amoeba-mysql-3.0.5-RC-distribution.zip
cd amoeba-mysql-3.0.5-RC
说明:无需安装,直接解压即可。另外,还需要配置Java环境,参考本文最后的注意事项。
(2)配置
解压目录:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf
配置conf下的dbServers.xml和Ameoba.xml两个文件。
vim dbServers.xml配置:
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="connectionManager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>
<!-- mysql port -->
<property name="port">3306</property>
<!-- mysql schema -->
<property name="schema">wordpressdb</property>
<!-- mysql user -->
<property name="user">wordpress</property>
<property name="password">redhat</property>
</factoryConfig>
【说明】:配置的是后端登陆数据库名、登陆数据库的用户名、密码。
<dbServer name="writedb" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">172.16.1.20</property>
</factoryConfig>
</dbServer>
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">172.16.1.21</property>
</factoryConfig>
</dbServer>
<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">172.16.1.22</property>
</factoryConfig>
</dbServer>
【说明】三个规划好的虚拟ip配置。
<dbServer name="readdb" 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>
【说明】两个读ip的负载均衡策略配置。
Ameoba.xml配置:
<property name="authenticateProvider">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">root</property>
<property name="password">redhat</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>
【说明】连接amoeba使用的用户名和密码。
</property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">writedb</property>
<property name="writePool">writedb</property>
<property name="readPool">readdb</property>
<property name="needParse">true</property>
【说明】读写池的配置。
最后,标记的地方都是需要修改的地方,命名和密码可以根据自己需要进行更改,至此amoeba配置完成。记得启动amoeba服务:
/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher
需要解决的问题:
问题一:Java环境配置
下载:
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
安装:
rpm -ivh jdk-8u131-linux-x64.rpm
配置:
vi /etc/profile.d/java.sh # 采用bin文件安装jdk
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
问题二:启动Amoeba报The stack size specified is too small解决方法
启动Amoeba时,
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher
如下提示::
The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
从错误文字上看,应该是由于stack size太小,导致JVM启动失败,要如何修改呢?
其实Amoeba已经考虑到这个问题,并将JVM参数配置写在属性文件里。现在,让我们通过该属性文件修改JVM参数。
修改jvm.properties文件JVM_OPTIONS参数。
[root@chenllcentos ~]# vi /usr/local/amoeba-mysql-3.0.5-RC/jvm.properties
将内容:
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
替换为:
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
再次启动Amoeba。OK!
[root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher
需要注意的:
这里在配置应用程序的数据库时:主机:(Ameoba)的地址:8066
数据库名:实际数据库名
用户和密码:Ameoba.xml配置文件中配置的内容。
最后,这里规划的mmm只有两个节点(db01、db02),配置了主主复制。当然也可以增加多个slave从节点,作为读的负载均衡。这里只是为了说明这个架构,没有配置那么多的slave节点。