前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于HAVIP +Keepalived部署MySQL双主双从

基于HAVIP +Keepalived部署MySQL双主双从

原创
作者头像
初一
修改2020-11-16 09:56:10
1.3K0
修改2020-11-16 09:56:10
举报
文章被收录于专栏:centos 8.0centos 8.0

准备四台同VPC的下服务器,本次测试使用mysql5.7版本

四台云服务器
四台云服务器

1.首先部署HAVIP

该部分直接忽略,可直接参考官网文档

https://cloud.tencent.com/document/product/215/20186

唯一需要注意的是在部署时要填写对端所有的IP以及优先级的设置

建议主从分开进行部署使用

实现目的

1.一主多从架构可以缓解读的压力,但是一旦主宕机了,就不能写了

多主多从架构可避免该问题

01和02互为主主

03和04为从库

2.安装MySQL

vim /etc/yum.repos.d/mysql.repo

[Mysql] name = Mysql baseurl = https://mirrors.cloud.tencent.com/mysql/yum/mysql57-community-el7/ gpgcheck = 0 enable = 1

yum install mysql-server

在四台实例上全部安装MySQL 

配置如下

01

[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 log-bin=mysql-bin server-id=2021 auto_increment_increment=2 auto_increment_offset=1 log-slave-updates sync_binlog=1

02

[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 log-bin=mysql-bin server-id=2022 auto_increment_increment=2 auto_increment_offset=2 log-slave-updates sync_binlog=1

03

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql/

log-error=/var/log/mysqld.log

pid-file=/var/log/mysqld.log

character-set-server=utf8

lower_case_table_names=1

autocommit=1

server-id=2023

[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 server-id=2024

字段说明:

log-bin:二进制文件的位置

server-id:服务id,每台库的server-id值都要唯一

auto_increment_increment : 插入数据时主键的自增步长

auto_increment-offset:增长的起始值

如:01长为 2,起始值为1,插入数据的主键为 1,3,5,7...。同样02步长为2,起始值为2,所以插入数据主键为2,4,6,8...。

log-slave-updates:设置两台主服务器,彼此间复制的数据要不要往其下面的从服务器复制。有这个字段表示往下面从服务器复制。

sync_binlog:从库复制的延迟。值为0表示延迟时间长,1表示延迟时间短。

port:端口号 3306

socker:IP和port

datadir:数据路径

log-error:错误文件文位置

pid-file :pid文件位置

character-set-server :字符集

lower_case_table_names:是否忽略表大小写 1为忽略

autocommit:自动提交   1

主要必须保证server-id的唯一性,否则必报错。

查看服务启动状态

01
01
02
02
03
03
04
04

然后分别在两台主服务器上创建数据的账号并且授权

mysql5.7默认随机一个密码的查看可参考

cat /var/log/mysqld.log |grep password

创建一个复制账户报错

mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码

先重置下localhos的密码

alter user 'root'@'localhost' identified by '1lEeMihS&KpO';

再次创建成功

02相同操作

03和04也要进行以上重置操作

查看01binlog位置以及pos点位

show master status;

File为 mysql-bin.000001,Position为154表示正常

所以上图显示不正常需要重置:

stop slave;#如果之前启动过,需要先关闭

reset master;#重置

重置之后File为 mysql-bin.000001,Position为154即可

查看02

在从slave服务器上设置主Master:

在02和03的主为01,同理01和04的主为02。

搞清楚主从关系后,在02和03执行如下操作:

CHANGE MASTER TO MASTER_HOST='172.16.48.3', MASTER_USER='copy01', MASTER_PASSWORD='1lEeMihS&KpO', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001',  MASTER_LOG_POS=154; 

01和04执行

CHANGE MASTER TO MASTER_HOST='172.16.48.16', MASTER_USER='copy02', MASTER_PASSWORD='(Fk(k3(%_euu', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001',  MASTER_LOG_POS=154; 

showslavestatus \G进行验证

测试

1.在01中创建root%账户

使用02的外网IP进行登陆正常

在01中创建表

在04中查询

确定同步无异常

2.测试HAVIP——使用root账户登陆正常

qinhl——双主多从环境3 (很尴尬的是飘到03上了,03是从)

坑:

一定要注意赋权账户的密码

注:以上所有的实例为新实例,无数据以及binlog产生。所以binlog位置为01 pos点位偏移量一致。

具体请务必以实际查询到的个人数据为准。

03和04两个从库在开始登陆时请务必注意一并对系统随机密码再次重置下,以上为方便 ,重置密码时再次重置了系统随机下发密码。

如果有报错等可以在cat /var/log/mysqld.log中进行查看

最开始在配置HAVIP时将所有的实例均配置为高可用,使用过程中会存在03和04从库数据写入的情况。

建议分开进行配置

01和02作为主配置一个HAVIP 

03和04作为从配置一个HAVIP 以方便业务上进行配置读写分离的场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档