• ADADADADAD

    MySQL+Amoeba+MySQLMMM高可用群集[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:17

    作者:文/会员上传

    简介:

    一、MySQL-MMM(Master-Master MySQL)MMM概述双主故障切换和日常管理的脚本程序由多个mysql主服务器和多个mysql从服务器组成虽然叫做双主复制,但是业务上同一时刻只允许对一

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    一、MySQL-MMM(Master-Master MySQL)MMM概述双主故障切换和日常管理的脚本程序由多个mysql主服务器和多个mysql从服务器组成虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制其内部附加的工具脚本也可以实现多个slave的read负载均衡。

    注:

    同一时刻只允许一个主进行写入,额外主提供部分读的服务

    不适用于要求数据一致性很高的场合(可替换产品为:Heartbeat+DRBD+MySQL高可用方案)MMM组成mmm_mond:监控进程,负责所有的监控、决定和处理所有节点mmm_agentd:运行在每个MySQL数据库的代理进程,完成监控本地状态并于监控端通信mmm_control:一个脚本,提供mmm_mond进程的命令二、案例

    实验环境:
    六台Centos6,两台主mysql(master01、master02),两台从mysql(slave01、slave02),一台监控(mmm_mond),一台读写调度器(amoeba)

    先部署主主(master01与master02)复制

    Master01

    1.准备工作
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.10NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth2DEVICE=eth2TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=dhcp
    vim /etc/hosts192.168.1.10db1192.168.1.20db2192.168.1.30db3192.168.1.40db4
    vim /etc/sysconfig/networkHOSTNAME=db1
    reboot
    2.YUM源配置并安装MMM
    rm -rf /etc/yum.repos.d/*
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum -y install epel-release
    yum -y install mysql-mmm* mysql mysql-server mysql-devel
    3.MySQL配置
    /etc/init.d/mysqld start && chkconfig --level 35 mysqld on
    mysqladmin -uroot password "123"
    cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
    vim /etc/my.cnf[mysqld]50 log-slave-updates
    /etc/init.d/mysqld restart
    4.授权并主主同步
    mysql -u root -pmysql> grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123';mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 |647 |||+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql> change master to master_host='192.168.1.20',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=481;//所跟IP、log、pos等信息都为第二台主的信息mysql> start slave;mysql> show slave status\G;//查看同步状态,I/0和SQL线程状态为yes则正确

    Master02

    1.准备工作
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.20NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth2DEVICE=eth2TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=dhcp
    vim /etc/hosts192.168.1.10db1192.168.1.20db2192.168.1.30db3192.168.1.40db4
    vim /etc/sysconfig/networkHOSTNAME=db2
    reboot
    2.YUM源配置并安装MMM
    rm -rf /etc/yum.repos.d/*
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum -y install epel-release
    yum -y install mysql-mmm* mysql mysql-server mysql-devel
    3.MySQL配置
    /etc/init.d/mysqld start && chkconfig --level 35 mysqld on
    mysqladmin -uroot password "123"
    cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
    vim /etc/my.cnf[mysqld]50 log-slave-updates58 server-id = 2
    /etc/init.d/mysqld restart
    4.授权并主主同步
    mysql -u root -pmysql> grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123';mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 |481 |||+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql> change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=647;//所跟IP、log、pos等信息都为第一台主的信息mysql> start slave;mysql> show slave status\G;
    再部署两对主从复制(m1与s1,m2与s2)

    Slave01

    1.准备工作
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.30NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth2DEVICE=eth2TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=dhcp
    vim /etc/hosts192.168.1.10db1192.168.1.20db2192.168.1.30db3192.168.1.40db4
    vim /etc/sysconfig/networkHOSTNAME=db3
    reboot
    2.YUM源配置并安装MMM
    rm -rf /etc/yum.repos.d/*
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum -y install epel-release
    yum -y install mysql-mmm* mysql mysql-server mysql-devel
    3.MySQL配置
    /etc/init.d/mysqld start && chkconfig --level 35 mysqld on
    mysqladmin -uroot password "123"
    cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
    vim /etc/my.cnf[mysqld]50 relay-log=relay-log-bin51 relay-log-index=slave-relay-bin.index59 server-id = 3
    /etc/init.d/mysqld restart
    4.授权并主从同步(m1,s1)
    mysql -u root -pmysql> change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=647;//所跟IP、log、pos等信息都为第一台主的信息mysql> start slave;mysql> show slave status\G;

    Slave02

    1.准备工作
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.40NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth2DEVICE=eth2TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=dhcp
    vim /etc/hosts192.168.1.10db1192.168.1.20db2192.168.1.30db3192.168.1.40db4
    2.YUM源配置并安装MMM
    rm -rf /etc/yum.repos.d/*
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum -y install epel-release
    yum -y install mysql-mmm* mysql mysql-server mysql-devel
    3.MySQL配置
    /etc/init.d/mysqld start && chkconfig --level 35 mysqld on
    mysqladmin -uroot password "123"
    cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf
    vim /etc/my.cnf[mysqld]50 relay-log=relay-log-bin51 relay-log-index=slave-relay-bin.index59 server-id = 4
    /etc/init.d/mysqld restart
    4.授权并主从同步(m2,s2)
    mysql -u root -pmysql> change master to master_host='192.168.1.20',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=647;//所跟IP、log、pos等信息都为第二台主的信息mysql> start slave;mysql> show slave status\G;
    配置高可用MySQL-MMM

    Master01

    1.新建授权用户
    mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.%' identified by '123';//主服务器授权,从服务器自动同步mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.1.%' identified by '123'; //主服务器授权,从服务器自动同步mysql> grant all on *.* to 'test'@'192.168.1.%' identified by '123';//新建测试用户
    2.配置MMM_COMMON
    vim /etc/mysql-mmm/mmm_common.confactive_master_rolewriter<host default>cluster_interface eth0//集群IP承载的接口pid_path/var/run/mysql-mmm/mmm_agentd.pid //PID文件位置(存放MMM的进程号)bin_path/usr/libexec/mysql-mmm/ //运行命令位置replication_userslave //需使用主从同步时授权用户replication_password123agent_usermmm_agent //代理连接agent_password123</host><host db1>ip192.168.1.10modemasterpeerdb2 //当db1主机不能使用,自动切换到db2</host><host db2>ip192.168.1.20modemaster//当前服务器作为主服务器(写)peerdb1 //当db2主机不能使用,自动切换到db1</host><host db3>ip192.168.1.30modeslave</host><host db4>ip192.168.1.40modeslave //当前主机作为从服务器(读)</host><role writer>hosts db1, db2ips 192.168.1.250 //写服务器VIPmodeexclusive //只有一个host可以writer</role><role reader>hosts db3, db4ips 192.168.1.251, 192.168.1.252//读服务器VIPmodebalanced//多个host可以reader</role>
    3.配置MMM_AGENT
    vim /etc/mysql-mmm/mmm_agent.confinclude mmm_common.confthis db1
    4.拷贝文件给其余主机
    scp /etc/mysql-mmm/mmm_common.conf root@192.168.1.20:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf root@192.168.1.30:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf root@192.168.1.40:/etc/mysql-mmm/
    /etc/init.d/mysql-mmm-agent restart && chkconfig --level 35 mysql-mmm-agent on

    Master02

    配置MMM_AGENT
    vim /etc/mysql-mmm/mmm_agent.confthis db2
    /etc/init.d/mysql-mmm-agent restart && chkconfig --level 35 mysql-mmm-agent on

    Slave01

    配置MMM_AGENT
    vim /etc/mysql-mmm/mmm_agent.confthis db3
    /etc/init.d/mysql-mmm-agent restart && chkconfig --level 35 mysql-mmm-agent on

    Slave02

    配置MMM_AGENT
    vim /etc/mysql-mmm/mmm_agent.confthis db4
    /etc/init.d/mysql-mmm-agent restart && chkconfig --level 35 mysql-mmm-agent on
    监控配置(mmm_mon)1.准备工作
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.50NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth2DEVICE=eth2TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=dhcp
    vim /etc/hosts192.168.1.10db1192.168.1.20db2192.168.1.30db3192.168.1.40db4
    reboot
    2.YUM源配置并安装MMM
    rm -rf /etc/yum.repos.d/*
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum -y install epel-release
    yum -y install mysql-mmm* mysql
    3.配置MMM_COMMON
    scp 192.168.1.10:/etc/mysql-mmm/mmm_common.conf /etc/mysql-mmm/
    4.配置MMM_MON
    vim /etc/mysql-mmm/mmm_mon.confinclude mmm_common.conf<monitor>ip127.0.0.1ping_ips192.168.1.10,192.168.1.20,192.168.1.30,192.168.1.40</monitor><host default>monitor_usermmm_monitormonitor_password123</host>debug 0
    5.启动服务并验证
    /etc/init.d/mysql-mmm-monitor restart && chkconfig --level 35 mysql-mmm-monitor on//监控端启动
    mmm_control show//查看节点状态
    mysql -u test -p -h 192.168.1.250

    报错解决方案:

    [root@localhost ~]# mysql -u test -p -h 192.168.1.250Enter password:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.254' (113)

    主服务器:

    grant super,replication client,process on *.* to 'mmm_agent'@'db1' identified by '123';grant super,replication client,process on *.* to 'mmm_agent'@'db2' identified by '123';grant super,replication client,process on *.* to 'mmm_agent'@'db3' identified by '123';grant super,replication client,process on *.* to 'mmm_agent'@'db4' identified by '123';

    日志查看:

    tail -f /var/log/mysql-mmm/mmm_agentd.log //MySQL端的Agent日志
    tail -f /var/log/mysql-mmm/mmm_mond.log //监控机端的Monitor日志
    部署读写调度器Amoeba1.环境准备
    vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticIPADDR=192.168.1.254NETMASK=255.255.255.0
    2.安装jdk与amoeba
    yum -y erase java-*
    chmod +x jdk-6u14-linux-x64.bin
    ./jdk-6u14-linux-x64.bin
    mv jdk1.6.0_14/ /usr/local/jdk1.6
    vim /etc/profileexport JAVA_HOME=/usr/local/jdk1.6export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/binexport AMOEBA_HOME=/usr/local/amoebaexport PATH=$PATH:$AMOEBA_HOME/bin
    source /etc/profile && java -version
    mkdir /usr/local/amoeba
    tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
    chmod -R 755 /usr/local/amoeba/
    3.在主Mysql数据库新建授权用户
    mysql -u root -pmysql> grant all on *.* to haha@'192.168.1.%' identified by '123';
    4.编辑amoeba配置文件
    vim /usr/local/amoeba/conf/amoeba.xml 30<property name="user">hehe</property>//设置连接Amoeba用户 31 32<property name="password">123</property> //设置连接Amoeba用户115 <property name="defaultPool">slaves</property>116117 <property name="writePool">master</property>注意删除<!---->的注释118 <property name="readPool">slaves</property> //定义读服务器池
    vim /usr/local/amoeba/conf/dbServers.xml 25 <!-- mysql user --> 26 <property name="user">haha</property> //设置连接Mysql的用户 27 28 <property name="password">123</property>//设置连接mysql的密码注意删除<!---->的注释 43 <dbServer name="master"parent="abstractServer"> 44 <factoryConfig> 45 <!-- mysql ip --> 46 <property name="ipAddress">192.168.1.254</property> //定义写服务器IP 47 </factoryConfig> 48 </dbServer> 49 <dbServer name="slave1"parent="abstractServer"> 50 <factoryConfig> 51 <!-- mysql ip --> 52 <property name="ipAddress">192.168.1.30</property>//定义读服务器IP 53 </factoryConfig> 54 </dbServer> 55 <dbServer name="slave2"parent="abstractServer"> 56 <factoryConfig> 57 <!-- mysql ip --> 58 <property name="ipAddress">192.168.1.40</property>//定义读服务器IP 59 </factoryConfig> 60 61 </dbServer> 62 <dbServer name="slaves" virtual="true"> 68 <property name="poolNames">slave1,slave2</property> //定义输入slaves读服务器池的主机 69 </poolConfig>
    amoeba start &
    netstat -utpln | grep 8066
    5.连接测试
    client:mysql -u hehe -p -h 192.168.1.254 -P 8066
    MySQL+Amoeba+MySQLMMM高可用群集.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 高可用mysqlmmm