MySQL高可用方案几种方案

tangjianft 2016-03-09

转载于:http://www.itxuexiwang.com/a/shujukujishu/2016/0221/155.html?1456383602

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

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

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

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

首先先搭建好数据库主主,主从架构:类似图:(不再叙述)

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

Grantreplivationclientto‘user@’ip’identifiedby‘password’创建一个mmm-monitor的账户,主要用于监控和同步

Grantsuper,replicationclient,processon*.*to‘user’@’ip’identifiedby‘password’

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

Mysql-mmm的下载地址为

------------------------------------------分割线------------------------------------------

免费下载地址在http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在/2016年资料/2月/20日/MySQL高可用方案几种方案/

下载方法见http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割线------------------------------------------

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

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

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

active_master_rolewriter

<hostdefault>

cluster_interfaceeth0

pid_path/var/run/mysql-mmm/mmm_agentd.pid

bin_path/usr/libexec/mysql-mmm/

replication_userccd//同步的账户

replication_passwordccd

agent_userccd//大一点的权限

agent_passwordccd

</host>

<hostdb1>

ip172.20.138.212

modemaster

peerdb2

</host>

<hostdb2>

ip172.20.138.209

modemaster

peerdb1

</host>

<rolewriter>

hostsdb1,db2

ips172.20.138.100

modeexclusive//exclusive为单写

</role>

<rolereader>

Hostsb1,db2

ips172.20.138.250//可以有多个ip,每个数据库可以单独有一个vip

modebalanced//读取为负载均衡

</role>

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

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

最后配置一下mmm_mon.conf

主要修改的地方有:

Ping_ips为监控的主机的真实ip,

Monitor修改为数据库赋予的账户

Monitor_assword密码

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

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

Mmm_controlshow查看vip绑定情况,类似ipvsadm

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

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

Mysql-proxy实现负载均衡和读写分离

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

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

到官网下载lua的源文件

yum-yinstallreadline-develncurses-devel

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

tarzxvfluaxxxxx

makelinux

makeinstall

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

安装所需要的依赖包

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

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

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

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

exportPATH=$PATH:/usr/local/mysql-proxy

source/etc/profile

修改mysql-proxy的配置文件

常用的命令参数如下:

--daemon以daemon的模式启动

--admin-address=:4401默认端口为4401

-help查看所有命令

-default-file可以配置启动的配置文件

--proxy-backend-addresses=$host:$port多个以逗号隔开

--proxy-address=:3307

--proxy-backend-addresses=:3306mysql主机的端口

--proxy-read-only-backend-address=xxx13306只读mysql主机的端口

--proxy-read-only-backend-address=xxx23306可以指定多个只读mysql主机的端口

--proxy-lua-script=/usr/local/xxx/rw-splitting.lua使用系统只带的lua脚本实现读写分离的功能

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

min_idle_connections=1

max_idle_connections=3

启动脚本:

#!/bin/bash

mode=$1

if[-z"$mode"];then

mode="start"

fi

case$modein

'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')

killallmysql-proxy

;;

esac

exit0

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

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工具来进行测试

利用keepalived实现对mysql主主/主从的高可用

配置keepalived.conf文件:

Vrrp_instatanceHA_1{

StateBACKUP#配置为slave,也可以是master

Interfaceeth0

Virtual_router_id80//主从配置的虚拟路由标识需要一样

Priority100#配置不同的优先级

Advert_int1#配置主备之间同步检查的周期

Authenication{

Auth_typePASS

Auth_pass1111

}

Virtual_ipaddress{

vip/24deveth0

}

}

Virtual_serverxxxxxx3306{

Delay_loop2

lb_algowrr//lvs算法为加权轮询

lb_kindDR//lvs的模式为DR模式

protocolTCP

reall_serverxxxx3306{

weight1

TCP_CHECK{

Connect_timeout3

nb_get_retry3

delay_before_retry3

connect_port3306

}

Realserverxxxx3306{

同上

}

}

DR的realserverloop端口需要绑定vip的地址脚本为:

#!/bin/bash

SNS_VIP=172.138.20.244

./etc/rc.d/init.d/functions

case"$1"in

start)

ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP

/sbin/routeadd-host$SNS_VIPdevlo: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/null2>&1

echo"RealServerStartOK"

;;

stop)

ifconfiglo:0down

routedel$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"RealServerStoped"

;;

*)

echo"Usage:$0{start|stop}"

exit1

esac

exit0

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

Grantallprivilegestoon*.*toxxxxidentifiedbyxxxxx

Flushprivileges

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

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

相关推荐