amoeba+mmm+mysql主主复制实现读写分离

本文详细介绍了如何使用MySQL MMM(Master-Master Monitor)和Amoeba搭建高可用数据库集群,包括集群规划、MMM安装配置、Amoeba配置步骤及常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作:


集群规划

服务器名

物理地址

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节点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值