就是mysql主主复制管理器,实现的功能有:

高可用性(类似keepalived的vip浮动技术)

同个时间只提供一台数据库写操作,保证数据库的一致性。

提升slave为master,延续双主的架构

在每台数据库中为monitor的机器来监控当前的同步情况:

创建一个mmm-monitor的账户,主要用于监控和同步

Grant super, replication client ,process on *.* to  ‘user’@’ip’ identified by ‘password’

创建一个mmm-agent的账户,用于客户端的各种操作

 


Mysql-mmm的下载地址为Mysql-mmm下载网址http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


由于使用的是epel的方式需要把/etc/yum.repos.d/epel.repo中的mirrorlist换为baseurl

 

 

 

===========================================================================

配置mmm_common.conf的文件:所有节点的配置都是一样的包括监控端


active_master_role      writer
 
 
<host default>
 
    cluster_interface       eth0
 
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
 
    bin_path                /usr/libexec/mysql-mmm/
 
    replication_user        ccd      //同步的账户
 
    replication_password    ccd
 
    agent_user              ccd       //大一点的权限
 
    agent_password          ccd
 
</host>
 
<host db1>
 
     ip 172.20.138.212
 
     mode master
 
     peer db2
 
</host>
 
<host db2>
 
  ip  172.20.138.209
 
  mode  master
 
  peer  db1
 
</host>
 
<role writer>
 
    hostsdb1,db2
 
    ips  172.20.138.100
 
    mode exclusive    //exclusive为单写
 
</role>



<role reader>


    Hosts b1,db2


    ips 172.20.138.250  //可以有多个ip,每个数据库可以单独有一个vip


    mode balanced    //读取为负载均衡


</role>


============================================================================

修改mmm_agent.conf文件中不同的db值

 

最后配置一下mmm_mon.conf

主要修改的地方有:

为监控的主机的真实ip,

修改为数据库赋予的账户

密码

 

在/etc/init.d/中启动服务,在监控服务器中输入命令:

检查所有的数据库同步情况和运行情况

查看vip绑定情况,类似ipvsadm

 

 

不适合用于mysql主从的高负载

验证vip均可以跳转,但是发现读ip也具有写入数据的功能。。。。如果加上读写分离的话就可以实现读取的vip不具备写入的功能

 

 

 

 

 

 

实现负载均衡和读写分离

目前的mysql-proxy的版本为0.8.5aplha

 

在安装mysql-proxy之前需要安装lua

到官网下载lua的源文件

yum -y install readline-devel ncurses-devel

安装readline-devel和ncurses-devel   否则安装会出现readline寻找不到的问题

tar zxvf luaxxxxx
make linux
make install

这时候输入lua可以进入编译模式表示lua安装成功

 

安装所需要的依赖包

yum install gcc* gcc-c++* autoconf*automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*

到mysql-proxy官网下载最新的mysql-proxy源文件

安装十分简单解压之后即可使用

将mysql-proxy添加到相对应的环境变量中

export PATH =$PATH:/usr/local/mysql-proxy
 source /etc/profile

 

修改mysql-proxy的配置文件

常用的命令参数如下:

以daemon的模式启动

默认端口为4401

查看所有命令

可以配置启动的配置文件

多个以逗号隔开

--proxy-address=:3307

主机的端口

只读mysql主机的端口

可以指定多个只读mysql主机的端口

使用系统只带的lua脚本实现读写分离的功能

 

 

使用系统自带的rw.split.lua脚本需要修改两个参数

min_idle_connections=1
 max_idle_connections = 3
  
  
启动脚本:
 #!/bin/bash
 mode=$1
 if [ -z "$mode" ] ;then
   mode="start"
 fi
 case $mode in
 'start')
    mysql-proxy --daemon --proxy-address=:3307 --proxy-backend-addresses=172.20.138.209:3306;172.20.138.212:3306 --proxy-read-only-backend-addresses=172.20.138.212:3306  --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
   ;;
 'stop')
    killall mysql-proxy
    ;;
 esac
 exit 0

 

 

 

 

 

 

 

或者使用配置方式的方法来启动

Vim /etc/mysql-proxy.cnf
 admin-username = ccd
 admin-password = ccd
 daemon = true
 keepalive = true
 proxy-backend-addresses =172.20.138.209:3306;172.20.138.212:3306
 proxy-read-only-backend-addresses =172.20.138.212:3306
 proxy-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua
 admin-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua
 log-file = /usr/local/proxy-mysql/cn.log
 log-level = debug
修改相对应的脚本即可:
 Mysql-proxy –defaults-file =/etc/mysql-proxy.cnf
对于数据库的测试可以使用sysbench工具,之前很多Java教程里面讲过这个
利用keepalived实现对mysql主主/主从的高可用
配置keepalived.conf文件:
 Vrrp_instatance  HA_1{
配置为slave,也可以是master
 Interface eth0
主从配置的虚拟路由标识需要一样
配置不同的优先级
配置主备之间同步检查的周期
 Authenication{
 Auth_type PASS
 Auth_pass 1111
 }
 Virtual_ipaddress {
     vip/24 dev eth0
 }
 }
 Virtual_server  xxxxxx  3306{
 Delay_loop 2
算法为加权轮询
的模式为DR模式
 protocol TCP
 reall_server   xxxx 3306 {
 weight  1
 TCP_CHECK {
 Connect_timeout  3
 nb_get_retry    3
 delay_before_retry  3
 connect_port  3306
 }
  
 Real  server xxxx  3306{
同上
 }
 }
  
的real serverloop端口需要绑定vip的地址脚本为:
 #!/bin/bash
 SNS_VIP=172.138.20.244
 ./etc/rc.d/init.d/functions
 case"$1" in
 start)
        ifconfig lo:0 $SNS_VIP netmask255.255.255.255 broadcast $SNS_VIP
  
        /sbin/route add -host $SNS_VIP dev lo:0
  
        echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
  
        echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
  
        echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
  
        echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
  
        sysctl -p >/dev/null 2>&1
  
        echo "RealServer Start OK"
  
  
  
        ;;
  
 stop)
  
        ifconfig lo:0 down
  
        route del $SNS_VIP >/dev/null2>&1
  
        echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
  
        echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
  
        echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
  
        echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
  
        echo "RealServer Stoped"
  
        ;;
  
 *)
  
        echo "Usage: $0 {start|stop}"
  
        exit 1
  
 esac
  
  
  
 exit 0

 

授权远程主机可以通过vip来连接登录vip

Grant allprivileges to  on *.* to xxxx identifiedby xxxxx

    Flushprivileges

由此可以实现mysql数据库的高可用

 

 

 

 

使用keepalived的方式有两种 一种为keepalived加脚本实现vip的切换,另外一种是keepalived+lvs的方式来实现数据库的高可用