文档章节

MySQL 8.0 Keepalived+双主架构——手把手搭建

LoSingSang
 LoSingSang
发布于 01/03 17:44
字数 1260
阅读 15
收藏 1

如需转载请注明出处https://my.oschina.net/feistel/blog/2996572

 

我丑 话说在前头:

192.168.1.200 主masterB, VMUbuntu18 MySQL8.0
192.168.1.123 主masterC, VMCentOS7  MySQL8.0
vip:192.168.1.199

B shell代表Ubuntu终端
C shell代表CentOS终端
shell代表两系统都需要操作

----------------------------------------------------------------------------------------------------------------

1

修改B的server-id为2,两个库的server-id不能相同
在B etc/mysqld.cnf里的[mysqld]添加:
# Server Id.
server-id=2

#开启GTID
gtid-mode=on
enforce_gtid_consistency=on
#开启binlog写二进制日志文件:
log_bin=on

保存

每次修改配置文件需要重启服务以便载入
B shell>service mysql restart

B mysql>show variables like "%id";
B mysql>show variables like "%slave";
查看相应值是否修改成功,否则说明配置文件不对
说明:如果etc/mysqld.cnf里新加的参数不对或打错什么的,重启数据库服务会出错

关闭AB防火墙,Windows控制面板,Ubuntu为:
B shell>service iptables stop

相应地,C也做相同操作,但是与CentOS略有区别,两Linux不同系别,Ubuntu是基于Debian,CentOS是基于Red Hat

在C etc/my.cnf里的[mysqld]添加:
# Server Id.
server-id=3

#开启GTID
gtid-mode=on
enforce_gtid_consistency=on
#开启binlog写二进制日志文件:
log_bin=on

保存

重启服务以便载入
C shell>service mysqld restart
注意是“mysqld”,已瞎,我什么都看不到,万恶的CentOS

关闭防火墙,CentOS为:
C shell>systemctl stop firewalld

可以参考:MySQL主从复制——异步方式(binlog+position、GTID)
这里采用GTID方式

----------------------------------------------------------------------------------------------------------------

2

创建主从复制账号并授权:
B mysql>create user 'lgl'@'%' identified by '123456';
B mysql>grant replication slave on *.* to 'lgl'@'%';
B mysql>flush privileges;

C mysql>create user 'lgl'@'%' identified by '123456';
C mysql>grant replication slave on *.* to 'lgl'@'%';
C mysql>flush privileges;

----------------------------------------------------------------------------------------------------------------

3

使用下面,保证双主库里的数据库、表和数据一致
必须参考:MySQL数据库备份

----------------------------------------------------------------------------------------------------------------

4

两两互从,即互主

B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.123',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1;

B mysql>start slave;
B mysql>show slave status\G;

C mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.200',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1;

C mysql>start slave;
C mysql>show slave status\G;

----------------------------------------------------------------------------------------------------------------

5

安装keepalived

B shell>apt-get install libssl-dev 
B shell>apt-get install openssl 
B shell>apt-get install libpopt-dev 
B shell>apt_get install keepalived

C shell>yum -y install keepalived

会看到安装完毕

----------------------------------------------------------------------------------------------------------------

6

两系统终端都新建shell脚本
shell>vim /etc/keepalived/checkmysql.sh

#!/bin/bash
mysqlstr=mysql
host=192.168.1.200
port=3306
user=lgl
password=123456
mysql_status=1

$mysqlstr -h $host -P $port -u $user -p$password -e "show status;" > /dev/null
if [ $? -eq 0 ] ;then
    echo "mysql_status=1"
    exit 0
else
    /etc/init.d/keepalived stop
fi

shell脚本参考:Linux常用命令、Vim、Shell、计划任务

上述脚本意思是:当数据库服务(B mysql)正常运行时,回显mysql_status=1,否则停止keepalived

shell>chmod +x /etc/keepalived/checkmysql.sh
shell>/etc/keepalived/checkmysql.sh
mysql_status=1

----------------------------------------------------------------------------------------------------------------

7

B shell>ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7c:0f:de brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.199/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2cf0:bf6d:e273:350d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

显示出网卡,以及网卡对应的信息,通常“1”表示回环网络
这里记录下本机ip所在的网卡,Unbuntu的为ens33

C shell>ip addr
记下CentOS的为eno16777736

part8有用

----------------------------------------------------------------------------------------------------------------

8

B shell>vim /etc/keepalived/keepalived.conf

vrrp_svript vs_mysql_100 {
  script "/etc/keepalived/checkmysql.sh"  ##执行shell脚本
  interval 10                ##间隔10s
}

vrrp_instance VI_100 {      ##集群名
    state BACKUP            ##MASTER
    nopreempt                 ##非抢占式
    interface ens33            ##part7中所寻找的网卡
    virtual_router_id 100   ##vrid,主备必须一致
    priority 100            ##优先级
    advert_int 5            ##主备同步间隔时间

    authentication {        
        auth_type PASS
        auth_pass 1111      ##主备密码一致
    }

    track_script {
      vs_mysql_100          ##执行监控服务
    }

    virtual_ipaddress {
        192.168.1.199
    }
}

C shell>vim /etc/keepalived/keepalived.conf

vrrp_script vs_mysql_101 {
  script "/etc/keepalived/checkmysql.sh"  ##执行shell脚本
  interval 10                ##间隔10s
}

vrrp_instance VI_101 {      ##集群名
    state BACKUP            ##MASTER
    nopreempt                 ##非抢占式
    interface eno16777736    ##part7中所寻找的网卡
    virtual_router_id 100   ##vrid,主备必须一致
    priority 90             ##优先级,低于BMySQL的
    advert_int 5            ##主备同步间隔时间

    authentication {        
        auth_type PASS
        auth_pass 1111      ##主备密码一致
    }

    track_script {
      vs_mysql_101          ##执行监控服务
    }

    virtual_ipaddress {
        192.168.1.199
    }
}

----------------------------------------------------------------------------------------------------------------

9

启动keepalived进程,两系系统区别很大!
B shell>/etc/init.d/keepalived start
C shell>service keepalived start

B shell>ip addr |grep 192.168

表示成功绑定了虚拟地址,此时用A mysql客户端连接192.168.1.199。

 

如果不存在虚拟地址,说明绑定失败,跳回part7,看看网卡正误。

查看日志,一定要查!如果不存在文件,那肯定是不想给你看,怕你玩坏,跳part10(一)先解决
B shell>cat /var/log/messages

----------------------------------------------------------------------------------------------------------------

10

疑难杂症

一、

如果
B shell>cat /var/log/messages
出现
cat: /var/log/messages: 没有那个文件或目录


sudo vim /etc/rsyslog.d/50-default.conf

#*.=debug;\
#        auth,authpriv.none;\
#        news.none;mail.none     -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#        auth,authpriv.none;\
#        cron,daemon.none;\
#       mail,news.none          -/var/log/messages

这几行注释去掉
B shell>systemctl restart rsyslog

OK

----------------------------------------------------------------------------------------------------------------

至此,共勉,如需转载请注明出处https://my.oschina.net/feistel/blog/2996572

© 著作权归作者所有

共有 人打赏支持
LoSingSang
粉丝 3
博文 53
码字总数 16173
作品 0
深圳
程序员
私信 提问
基于keepalived搭建mysql双主高可用

目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能把人肉去恢复故障...

java_龙
2018/11/29
0
0
企业中MySQL高可用集群架构三部曲之MM+keepalived

各位老铁们,老张与大家又见面了。看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可。我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战...

superZS
2018/06/26
0
0
服务器集群之keepalived配置高可用(资料)

Linux集群概述 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开...

寰宇01
2018/05/24
0
0
MySQL 高可用性之keepalived+mysql双主

生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有一台MySQL服务器挂掉后,另外一台能立马接替其进行工作。 MySQL的高可用方案一般有如下几...

FJCA
2017/03/30
0
0
《循序渐进Linux》第二版即将出版发行(附封面)

从《循序渐进Linux》第一版发布,到现在已经近6年了,6年的时间,技术发生了很大的变化,Linux系统的内核版本从2.6.9(RHEL4.x)已经更新到了现在的3.10(Centos7.x),第一版中的部分内容已经...

南非蚂蚁
2015/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
54分钟前
0
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
1
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部