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

我丑 话说在前头:

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

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

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

上述脚本意思是:当数据库服务(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: 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: 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

1664c10c83ca178b600fae69f433ad6e.png

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

41c386581049e8556d61175b06dd4f32.png

如果不存在虚拟地址,说明绑定失败,跳回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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值