资讯专栏INFORMATION COLUMN

mysql主主+keepalived高可用

IT那活儿 / 1656人阅读
mysql主主+keepalived高可用

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

01

MySQL双主(主主)架构方案思路

  • 两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

  • masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

  • 两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

  • 建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式)。

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力。

1)环境

两台安装好mysql的服务器(yum安装比较快且方便),关闭防火墙,关闭selinux。

  • systemctl stop firewalld(临时关闭)

  • setenforce 0(临时关闭)

2)我的主机地址

  • mysql1:192.168.44.131

  • mysql2:192.168.44.133

  • 虚拟ip:192.168.44.199

02

mysql1配置

在/etc/my.cnf新增以下内容:

[mysqld]

#作为主从复制的唯一标识,集群中,不能重复

server-id = 1

#开启二进制日志

log-bin = master-log

#开启中继日志

relay-log = slave-log

auto_increment_offset = 1

auto_increment_increment = 2

注:auto_increment_offset确定AUTO_INCREMENT列值的起点,也就是初始值。

auto_increment_increment控制列中的值的增量值,也就是步长。

mysql中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:auto_increment_offset和auto_increment_increment。

在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。

03

mysql2配置

[mysqld]

#作为主从复制的唯一标识,集群中,不能重复

server-id = 2

#开启二进制日志

log-bin = master-log

#开启中继日志

relay-log = slave-log

auto_increment_offset = 2

auto_increment_increment = 2

04

重启mysql服务

systemctl restart mysqld


05

mysql1为主,mysql为从配置

进入mysql1数据库创建同步账号并赋予权限:

mysql> create user zjf@192.168.44.% identified by 123456;

mysql> grant replication slave on *.* to zjf@192.168.44.%;

mysql> show master status;

进入mysql2数据库执行以下语句:

#log_file和log_pos的数据是mariad1上show master status得到的数据。

mysql> change master to master_host=192.168.44.131, 
master_user=zjf, master_password=123456,
master_log_file=master-log.000001, master_log_pos=441;

开启主从:

mysql> start slave;

mysql> show slave statusG;

06

mysql2为主,mysql1为从配置

进入mysql2数据库创建同步账号并赋予权限:

mysql> create user zjf@192.168.44.% identified by 123456;

mysql> grant replication slave on *.* to zjf@192.168.44.%;

show master status;

进入mysql2数据库执行以下语句:

#log_file和log_pos的数据是mariad1上show master status得到的数据。

mysql> change master to master_host=192.168.44.131, 
master_user=zjf, master_password=123456,
master_log_file=master-log.000004, master_log_pos=441;

开启主从:

mysql> start slave;

mysql> show slave statusG;

至此, 主主同步复制配置完成!!!

07

在mysql1创建一个库test1:

Create database test1

mysql1和mysql2都有。

Show databases

在mysql2创建一个库test2:

Create database test2

Mysql1和msql2都有。

Show databases

主主同步复制配置便测试成功。

08

keepalived高可用

8.1 Mysql1和MySQL2都安装keepalived

yum -y install keepalived

8.2 mysql1的/etc/keepalived/keepalived.conf配置

! configuration File for keepalived

global_defs {

router_id mysql-01 #主机标示符,不一定要用主机名,默认值取主机名

}

vrrp_instance VI_1 {

state BACKUP #非抢占模式两台服务器都为BACKUP

interface ens33 #根据机器的ifconfig来定,vip要绑定的网卡

virtual_router_id 50 #虚拟路由ID,俩节点保持一致 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同

priority 100 #主节点的优先级(1-254),备用节点必须比主节点优先级低

advert_int 1 #组播信息发送间隔,两个节点设置必须一样

nopreempt #不抢占vip资源,防止故障节点恢复后因为优先级高导致vip再次飘移

authentication { #设置验证信息,两个节点必须一样

auth_type PASS

auth_pass 1111

}

virtual_ipaddress { #指定虚拟ip,两个节点必须一致

192.168.44.199

}

}

#虚拟主机是可选部分,主要用来配置负载均衡。这里可以绑定端口

virtual_server 192.168.44.199 3306 { #绑定端口为3306,0代表所有端口

delay_loop 2

lb_algo rr ##负载均衡轮训算法,详见官方文档

lb_kind DR #路由模式,同网段DR,不同网段NAT

persistence_timeout 50

protocol TCP

real_server 192.168.44.131 3306 {

weight 3

notify_down /etc/keepalived/bin/killkeepalived.sh

notify_down /etc/keepalived/bin/mysql_check.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

8.3 mysql2的/etc/keepalived/keepalived.conf配置

! configuration File for keepalived

global_defs {

router_id mysql-02 #主机标示符,不一定要用主机名,默认值取主机名

}

vrrp_instance VI_1 {

state BACKUP #非抢占模式两台服务器都为BACKUP

interface ens33 #根据机器的ifconfig来定,vip要绑定的网卡

virtual_router_id 50 #虚拟路由ID,俩节点保持一致 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同

priority 50 #主节点的优先级(1-254),备用节点必须比主节点优先级低

advert_int 1 #组播信息发送间隔,两个节点设置必须一样

nopreempt #不抢占vip资源,防止故障节点恢复后因为优先级高导致vip再次飘移

authentication { #设置验证信息,两个节点必须一样

auth_type PASS

auth_pass 1111

}

virtual_ipaddress { #指定虚拟ip,两个节点必须一致

192.168.44.199

}

}

#虚拟主机是可选部分,主要用来配置负载均衡。这里可以绑定端口

virtual_server 192.168.44.199 3306 { #绑定端口为3306,0代表所有端口

delay_loop 2

lb_algo rr ##负载均衡轮训算法,详见官方文档

lb_kind DR #路由模式,同网段DR,不同网段NAT

persistence_timeout 50

protocol TCP

real_server 192.168.44.133 3306 {

weight 3

notify_down /etc/keepalived/bin/killkeepalived.sh

notify_down /etc/keepalived/bin/mysql_check.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

8.4 脚本

在两台服务器上编写两个脚本,就在keepalived配置文件指定的地方创建notify_down,当Mysql和keepalived 出现问题的时候会触发此脚本,用于关掉本机的keepalived进程,之后才能进行切换到另外一个节点上去,并且授予执行权限+x。

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

systemctl stop keepalived

fi

8.5 结果

启动两台服务器的keepalived,可以看到一台服务器有虚拟ip,另一台没有。

8.6 测试

停掉有虚拟ip的那台主机的keepalived,虚拟ip会跑到另一台主机上,且配置了不抢占规则,即使恢复服务,ip也不会漂移回去。


END



本文作者:朱景锋

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129469.html

相关文章

  • MySQL集群搭建(6)-双主+keepalived可用

    摘要:双主是一个比较简单的高可用架构,适用于中小集群,今天就说说怎么用做的高可用。缺点也比较明显,就是增加从节点的情况下,从节点不会主动切换同步对象,而且脚本需要自己实现,有一定风险。 双主 + keepalived 是一个比较简单的 MySQL 高可用架构,适用于中小 MySQL 集群,今天就说说怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...

    CarlBenjamin 评论0 收藏0
  • MySQL集群搭建(6)-双主+keepalived可用

    摘要:双主是一个比较简单的高可用架构,适用于中小集群,今天就说说怎么用做的高可用。缺点也比较明显,就是增加从节点的情况下,从节点不会主动切换同步对象,而且脚本需要自己实现,有一定风险。 双主 + keepalived 是一个比较简单的 MySQL 高可用架构,适用于中小 MySQL 集群,今天就说说怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...

    lily_wang 评论0 收藏0
  • MySQL可用方案测试

    MySQL高可用方案测试 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...

    IT那活儿 评论0 收藏2496

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<