首页 > 数据库 >使用MySQL主主复制加Keepalived实现高可用

使用MySQL主主复制加Keepalived实现高可用

时间:2024-05-29 12:00:10浏览次数:32  
标签:00 log 主主 Keepalived keepalived forever lft master MySQL

目录

资源列表

基础环境

关闭防火墙

关闭内核安全机制

修改主机名

时间同步

一、安装MySQL

准备yum源

清理mariadb相关的包

安装

启动

二、MySQL主主复制

两个节点授权用户

两个节点使用授权用户进行连接

启动同步

三、安装keepalived

安装

修改配置文件

启动服务

验证


 

       本文详细记录了使用MySQL主主复制结合keepalived实现数据库高可用的流程。方便大家进行参考。

资源列表

操作系统配置主机名IP
CentOS7.3.16112C4Gmysql01192.168.207.131
CentOS7.3.16112C4Gmysql02192.168.207.131

基础环境

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭内核安全机制

setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

修改主机名

hostnamectl set-hostname mysql01
hostnamectl set-hostname mysql02

时间同步

yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
chronyc sources -v

一、安装MySQL

准备yum源

# 下载MySQL源
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
​
# 安装MySQL源
yum -y install mysql57-community-release-el7-10.noarch.rpm

清理mariadb相关的包

for i in $(rpm -qa | grep mariadb); do yum -y remove $i ;done

安装

# 安装MySQL
yum -y install mysql-community-server

启动

# mysql1和mysql2只有server-id不同和auto-increment-offset不同,其他必须相同
# binlog_format= mixed:指定mysql的binlog日志的格式,mixed是混合模式
# relay-log:开启中继日志功能
# relay-log-index:中继日志清单
# auto-increment-increment= 2:表示自增长字段每次递增的量,其默认值是1。它的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。
# auto-increment-offset= 2:用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。
cat >> /etc/my.cnf << EOF
server-id=1
log-bin=node1-bin
binlog_format=mixed
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
auto-increment-increment=2
auto-increment-offset=1
EOF
​
cat >> /etc/my.cnf << EOF
server-id=2
log-bin=node2-bin
binlog_format=mixed
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
auto-increment-increment=2
auto-increment-offset=2
EOF
​
systemctl enable mysqld
systemctl start mysqld
​
# 查看密码登陆数据库
grep password /var/log/mysqld.log
[root@mysql01 ~]# grep password /var/log/mysqld.log
2022-02-11T03:52:31.002250Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 9jI=b.vbijSy
​
# 重新设置root密码
alter user 'root'@'localhost' identified by '1qaz@WSX';
flush privileges;

二、MySQL主主复制

两个节点授权用户

grant replication slave on *.* to repl@'%' identified by '1qaz@WSX';
flush privileges;
show master status;

两个节点使用授权用户进行连接

# mysql02节点执行,其中master_log_file和master_log_pos需要是mysql01节点show master status;查出来的数据
change master to master_host='192.168.207.131',
master_user='repl',
master_password='1qaz@WSX',
master_log_file='node1-bin.000002',
master_log_pos=1005;


# mysql01节点执行,其中master_log_file和master_log_pos需要是mysql02节点show master status;查出来的数据
change master to master_host='192.168.207.165',
master_user='repl',
master_password='1qaz@WSX',
master_log_file='node2-bin.000002',
master_log_pos=1005;

启动同步

start slave;

show slave status\G;

# 确保show slave status\G;的这个两个是yes
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

三、安装keepalived

安装

yum -y install keepalived

修改配置文件

cp /etc/keepalived/keepalived.conf{,.bak}

# mysql01的配置文件
cat > /etc/keepalived/keepalived.conf << EOF
vrrp_script chk_service_ok {
  script "netstat -an | grep LISTEN | grep 3306 || killall keepalived"
  interval2
}
vrrp_instance VI_1 {
  interface ens33
  state BACKUP           # 通过下面的priority来区分MASTER和BACKUP
  virtual_router_id 51
  priority 100
  nopreempt              # 防止切换到从库后,主keepalived恢复后自动切换回主库
  virtual_ipaddress {
    192.168.207.200/24
  }
  track_script {
    chk_service_ok
  }
}
EOF

# mysql02的配置文件
cat > /etc/keepalived/keepalived.conf << EOF
vrrp_script chk_service_ok {
  script "netstat -an | grep LISTEN | grep 3306 || killall keepalived"
  interval2
}
vrrp_instance VI_1 {
  interface ens33
  state BACKUP           # 通过下面的priority来区分MASTER和BACKUP
  virtual_router_id 51
  priority 80
  nopreempt              # 防止切换到从库后,主keepalived恢复后自动切换回主库
  virtual_ipaddress {
    192.168.207.200/24
  }
  track_script {
    chk_service_ok
  }
}
EOF

启动服务

systemctl start keepalived
systemctl enable keepalived

验证

[root@mysql01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:6f:a6:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.207.131/24 brd 192.168.207.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.207.200/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7ef6:a206:d3ad:5f6f/64 scope link 
       valid_lft forever preferred_lft forever

标签:00,log,主主,Keepalived,keepalived,forever,lft,master,MySQL
From: https://blog.csdn.net/qq_33906471/article/details/139258870

相关文章

  • 在mysql上构建soctt库
    --1.创建部门表createtabledept(deptnoint(2)unsignedprimarykey,dnamevarchar(14),locvarchar(13));--2.添加部门数据insertintodept(deptno,dname,loc)values(10,'ACCOUNTING','NEWYORK'),(20,'RESEARCH','DALLAS')......
  • MySQL并发事务是怎么处理的?
    在数据库系统中,并发事务处理是一个至关重要的概念。特别是在MySQL这样的关系型数据库中,当多个事务同时尝试访问或修改相同的数据时,就需要有一种机制来确保数据的一致性和完整性。本文将深入探讨MySQL如何处理并发事务,并通过Java代码示例来进一步说明。1.事务的ACID属性在......
  • 高性能MySQL实战(一):表结构
    最近因需求改动新增了一些数据库表,但是在定义表结构时,具体列属性的选择有些不知其所以然,索引的添加也有遗漏和不规范的地方,所以我打算为创建一个高性能表的过程以实战的形式写一个专题,以此来学习和巩固这些知识。1.实战我使用的MySQL版本是5.7,建表DDL语句如下所示:根据需......
  • MySQL - [09] 正则表达式
    转载:https://mp.weixin.qq.com/s/7RavuYGs9SthX2pxGJppqw  select*fromt1wherenamerlike'^[a-zA-Z]+$';  一、简介正则表达式使用rlike作为模式匹配的关键字,其语法结构如下selectcolumn_namefromtable_namewherecolumn_namerlike'pattern';column_n......
  • (免费领源码)Java/Mysql数据库+01012大学生爱心互助代购网站,计算机毕业设计项目推荐上万
    摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,企业只能以用户为导向,按品种分类规划,以产品的持续创新作为企业最重要的竞争手段。系统采用了B/S结构,将所有业务模块采用以浏览器交互的模式,选择My......
  • (免费领源码)Java/Mysql数据库+00895springboot的校园二手书销售平台,计算机毕业设计项目
    本科学生毕业设计校园二手书销售平台设计与实现                院系名称:    计算机科学与技术学院    专业班级:                            学生姓名:                           ......
  • (免费领源码)Java/Mysql数据库+00750基于python的音乐电台推荐系统设计,计算机毕业设计项
    毕业设计(论文)Django音乐电台推荐系统学   院:                           专   业:                           年   级:                           姓   名:   ......
  • (免费领源码)Java/Mysql数据库+00485 个性化音乐推荐系统的设计与实现,计算机毕业设计项
    毕业设计(论文)NodeJS个性化音乐推荐系统学   院:                           专   业:                           年   级:                           姓   名:  ......
  • MYSQL的默认事务隔离级别REPEATABLE-READ也会出现数据更新丢失问题
      本文为多年前自己进行的测试试验: publish:April13,2017-Thursday现转移到CSDN同时带上原个人博客网站中的评论内容。一、MYSQL的默认事务隔离级别REPEATABLE-READ也会出现数据更新丢失问题    今天的这个试验,主要是在考虑MYSQL的默认事务隔离级别REPEATABLE-R......
  • 一文讲透MySQL锁机制
    数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作......