mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx

上传人:b****4 文档编号:16709390 上传时间:2022-11-25 格式:DOCX 页数:36 大小:811.47KB
下载 相关 举报
mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx_第1页
第1页 / 共36页
mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx_第2页
第2页 / 共36页
mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx_第3页
第3页 / 共36页
mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx_第4页
第4页 / 共36页
mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx

《mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。

mysql+keepalivdnginx+keepalived+lvs+keepalived+mysqlWord文档下载推荐.docx

Lvs+keepalived架构数据流向流程

参考地址

1.双主Master1和Master2通过keepalived虚拟出的VIP地址对外提供服务

2.Slave1和Slave2通过主从复制,获取与主库相同数据,对外提供读服务

3.通过lvs+keepalived实现mysql读服务的高可用

1.通过读写分离的方式,减轻了主库的压力(设定环境读远大于写)

2.通过lvs+keepalived实现mysql读服务的高可用

3.通过keepalived实现了mysql双主的同时对外提供服务,实现了写的高可用(当然还有heartbeat+drdb的方案)

4.通过lvs+keepalived的会话保持功能简单的避免了裂脑的风险

1.双主同时对外提供服务,必须保持两端数据的一致性。

这就要求Master1和Master2之间必须实时的进行数据的同步。

这样一来,当有大量数据插入的时候,Master1和Master2之间既要同步,又要将数据给Slave,所以Master端压力依然很重,数据延迟是一个问题。

2.Master和Slave之间,也需要做主从同步,势必会导致Master端的压力过大,所以我们在做监控的时候,应注意slave端与主库的延迟的问题,这里我会用脚本来简单实现的通过检查slave端的状态,来实现自动剔除功能。

3.同时基于高可用的考虑lvs+keepalived应尽量也采用主备的模式,因此此方案,的成本控制也会成为一个问题。

4.如果是基于vip地址的同步,同时设置了lvs的会话保持功能,那Slave会只跟这一台机器同步,如果采用的wrr一类的调度算法,很有可能会使,后端所有的Slave,跟同一台Master同步,那这台主库的压力就可想而知了。

所以在Slave端同步的选择上,必须跟同一台固定的MASTER同步我们也要注意。

5.当mysql主主切换的时候,主从会出现很多问题。

下面我们就开始基于一个原点,开始逐步配置我们的Mysql高可用

架构思路

1.首先在Master1和Master2之间做双向同步

2.配置三个Slave端

3.在Master1和Master2之间做keeplived的高可用

4.开发shell脚本检查slave的状态

5.做两台lvs+keepalived主备的读高可用

具体的实施思路

主机地址规划

主机IP地址

主机用途

VIP地址

Master1

10.0.0.104

主库

10.0.0.253

Master2

10.0.0.102

Apache

10.0.0.120

Web服务器

测试程序:

Discuz_:

下载地址:

[root@APACHEwww]#cat/etc/hosts

#Donotremovethefollowingline,orvariousprograms

#thatrequirenetworkfunctionalitywillfail.

127.0.0.1APACHE

:

1localhost6.localdomain6localhost6

10.0.0.253mysql.master.vip此为VIP地址

#10.0.0.252mysql.slave.vip

[root@APACHEwww]#pingmysql.master.vip

PINGmysql.master.vip(10.0.0.253)56(84)bytesofdata.

64bytesfrommysql.master.vip(10.0.0.253):

icmp_seq=1ttl=64time=0.322ms

2.在Mysql上授权使用用户(这个两端都要设置,因为我们不同步授权表)

mysql>

grantallprivilegesonweb.*to'

web'

@'

10.0.0.%'

identifiedby'

123'

;

复制前的说明:

①两边都要开启binlog功能

②server-id不能一样

③建议两端使用同一个用户进行授权

1)在Master1上的备份sql语句

flushtableswithreadlock;

QueryOK,0rowsaffected(0.01sec)

showmasterstatus;

+------------------+----------+--------------+------------------+

|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|

|mysql-bin.000001|512|||

1rowinset(0.00sec)

unlocktables;

QueryOK,0rowsaffected(0.00sec)

备份sql语句

[root@rsyncbak]#mysqldump-uroot-pbbs-B|gzip>

./bbs_B.sql.gz

授权用户

grantreplicationslaveon*.*to'

slave'

在Master2上从库设置

2)导入sql语句

[root@apache~]#mysql-uroot-p<

bbs_B.sql

CHANGEMASTERTOMASTER_HOST='

10.0.0.104'

MASTER_PORT=3306,MASTER_USER='

master_password='

MASTER_LOG_FILE='

mysql-bin.000001'

MASTER_LOG_POS=512;

这样Master2到Master1的从库就完成了

3)设置Master1到Master2的从库

|mysql-bin.000001|513|||

然后在Master1上重复上面操作

10.0.0.102'

MASTER_LOG_POS=513;

QueryOK,0rowsaffected(0.03sec)

这里注意下,两端的POS点可能不一样。

为了避免多余的复制,我们还忽略授权表,或者只复制这一个库。

(这里即使我上面指定的*.*,后来发现并没有同步授权表)

在Master1上查看

[root@rsync~]#mysql-uroot-p-e"

showslavestatus\G"

|grepYes

Enterpassword:

Slave_IO_Running:

Yes

Slave_SQL_Running:

在Master2上查看

[root@apache~]#mysql-uroot-p-e"

1)配置安装keepalived

[root@rsynckeepalived]#ln-s/usr/src/kernels/2.6.18-194.el5-i686//usr/src/linux/

tarzxfkeepalived-1.1.17.tar.gz

cdkeepalived-1.1.17

./configure

make

makeinstall

2)规范配置,复制文件

[root@rsynckeepalived]#\cp/usr/local/etc/rc.d/init.d/keepalived/etc/init.d/

[root@rsynckeepalived]#\cp/usr/local/sbin/keepalived/usr/sbin/

[root@rsynckeepalived]#mkdir/etc/keepalived/

[root@rsynckeepalived]#\cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/

[root@rsynckeepalived]#\cp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/

3)测试启动

[root@rsynckeepalived]#ps-ef|grepkeep

root95241018:

11?

00:

00:

00keepalived-D

root95259524018:

root95269524018:

root97356476018:

20pts/000:

00grepkeep

在另一边执行相同的操作

4)给出两端的配置文件

主keepalived配置

Keepalived.conf

global_defs{

notification_email{

xinpengbj@

}

notification_email_from748152983@

smtp_server192.168.200.1

smtp_connect_timeout30

router_idLVS_xp_2

}

vrrp_instanceVI_1{

stateMASTER

interfaceeth0绑定的网卡

virtual_router_id92

priority100主上面的优先级要高于从的优先级

advert_int1

authentication{

auth_typePASS

auth_pass0229使用的密码

virtual_ipaddress{

10.0.0.253VIP的地址

virtual_server10.0.0.2533306{vip上的监控的端口

delay_loop6

lb_algorr

lb_kindDR

nat_mask255.255.255.0

persistence_timeout50

protocolTCP

real_server10.0.0.1023306{

weight1

notify_down/server/script/kill_keepalived.sh如果mysql宕机了,执行的脚本

TCP_CHECK{

connect_timeout8

nb_get_retry3

delay_before_retry3

connect_port3306

Kill脚本的内容

[root@apache~]#cat/server/script/kill_keepalived.sh

#!

/bin/sh

/etc/init.d/keepalivedstop

real_server两端都只有一台主机

这里也有一个问题,就是网上一些人说的keepalived两端都是备机状态,不抢占vip。

这个后来想了想,看需求,如果的确是需要主宕机恢复后,仍能切回去,就不要让它抢占vip,反之咋根据上面配置即可(可以在优先级较高的一边加入nopreempt)

备keepalived的配置

[root@rsyncdata]#cat/etc/keepalived/keepalived.conf

!

ConfigurationFileforkeepalived

router_idLVS_xp_1

stateBACKUP

interfaceeth0

priority50

nopreempt

auth_pass0229

10.0.0.253

virtual_server10.0.0.2533306{

real_server10.0.0.1043306{

weight1

1)主keepalived状态

[root@apache~]#ipvsadm-L-n--stats

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:

PortConnsInPktsOutPktsInBytesOutBytes

->

RemoteAddress:

Port

TCP10.0.0.253:

330693060319630

10.0.0.102:

330693060319630

2)从keepalived状态

[root@rsyncdata]#ipvsadm-L-n--stats

330600000

10.0.0.104:

330600000

首先我们先测试正常访问下的web

此时我们停掉Master1上的数据库,此时主keepalived上面的数据,

[root@apache~]#ipadd|grep253

inet10.0.0.253/32scopeglobaleth0

[root@apache~]#/etc/init.d/mysqldstop

ShuttingdownMySQL...[OK]

[root@apache~]#

VIP已经没有了

在备keepalived上面检查

[root@rsyncdata]#ipadd|grep253

inet10.0.0.253/32scopeglobaleth0

VIP已经跳转过来

客户端验证

此时我们在网页上发帖子

可以看到两个数据库之间的数据是同步的。

恢复主库测试

此时,我们启动主keepalived上面的数据库,然后启动Keepalived服务

[root@apache~]#/etc/init.d/mysqldstart

StartingMySQL..[OK]

[root@apache~]#/etc/init.d/keepalivedstart

Startingkeepalived:

[OK]

此时在在网站上测试

问题1

这个在keepalivedVIP漂移的时候,两边都出现的问题

No

Last_Errno:

1062

Last_Error:

Error'

Duplicateentry'

1'

forkey'

PRIMARY'

'

onquery.Defaultdatabase:

'

bbs'

.Query:

INSERTINTOpre_common_onlinetimeSET`uid`='

`thismonth`='

10'

`total`='

`lastupdate`='

1352792067'

问题描述

重复insert相同primarykey导致slaveSQLthread终止。

而SlaveI/Othread正常运行。

如果日志中出现了这样代码,可能是错误的select,或update操作,master是跳过这些操作,但是被记录到了二进制日志中,slave会依据二进制中的语句做相同的动作,就会报错,知道原理了要做的操作就很简单了

网上找的办法

编辑f

[mysqld]

slave_skip_errors=1062

问题2

主keepalived重启后,从keepal

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1