Mysql主主,主从集群部署

目录

​架构

mysql 安装

集群配置

注意:

添加主从同步账户

配置同步信息

配置从节点



​架构

masterA: 123.23.23.1

masterB: 123.23.23.2

互为主从,数据互相同步,通过binary log 数据互相同步,其实两个库里面的数据是一致的。

简单来说,相比主从更具有健壮性。

mysql 安装

这里可以参考网上的mysql服务器安装教程 ,略过

集群配置

服务器:

masterA: 123.23.23.1

masterB: 123.23.23.2

修改各个master配置文件my.cnf

文件位置一般在 /etc/my.cnf 或者mysql安装目录/public/mysql/my.cnf

masterA:

[mysqld]
server-id=1
auto_increment_offset=1
auto_increment_increment=2                                          #奇数ID
​
log-bin=mysql-bin                                                     
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
max_binlog_size=1024M                                                   
​
replicate_wild_ignore_table =mysql.%
replicate_wild_ignore_table =test.%
replicate_wild_ignore_table =information_schema.%
replicate_wild_ignore_table =performance_schema.%
​
max_connections=3000
max_connect_errors=30
​
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-storage-engine=INNODB
lower_case_table_names=1
slave_skip_errors=ddl_exist_errors
skip-character-set-client-handshake                                     
init-connect='SET NAMES utf8'                                           
character-set-server=utf8                                               
wait_timeout=1800                                                       
interactive_timeout=1800                                                
skip-name-resolve

masterB:

[mysqld]
server-id=2
auto_increment_offset=2    #AUTO_INCREMENT列值的起点,也就是初始值。取值范围是1 .. 65535
auto_increment_increment=2 #偶数ID  控制列中的值的增量值,也就是步长。其默认值是1,取值范围是1 .. 65535
​
log-bin=mysql-bin                                                     
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
max_binlog_size=1024M                                                   
​
replicate_wild_ignore_table =mysql.%
replicate_wild_ignore_table =test.%
replicate_wild_ignore_table =information_schema.%
replicate_wild_ignore_table =performance_schema.%
max_connections=3000
max_connect_errors=30
​
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-storage-engine=INNODB
lower_case_table_names=1
slave_skip_errors=ddl_exist_errors
skip-character-set-client-handshake                                     
init-connect='SET NAMES utf8'                                           
character-set-server=utf8                                               
wait_timeout=1800                                                       
interactive_timeout=1800                                                
skip-name-resolve

其实主要配置是

server-id=1
auto_increment_offset=1
auto_increment_increment=2                                          #奇数ID
​
log-bin=mysql-bin 

然后分别重启两个数据库。

注意:

两台数据库的配置差别就在于server-id不同,以及auto_increment_offset的不同,如果有N个主,每个主的auto_increment_offset可分别设置为1、2….直到N, 而auto_increment_increment设置为N。

建立授权用户

查看具有权限的用户:Repl_slave_priv

select host,user,Repl_slave_priv from mysql.`user`

一般root用户即可满足。

添加主从同步账户

(PS:笔者在操作中发现,这步命令执行失败显示:1045 - Access denied for user 'root'@'%' (using password: YES),但是密码没错,用户也是有权限的,很尴尬,查找 了半天这个命令也不通过,然后续继续往下执行,发现还是可以实现同步数据,希望有大佬看到这里,给我留个言,让我了解下,感谢!)

我想了下,因为我是用root@%用户登录的,所以,这步其实是可以省略的,但是为什么会报错呢

在masterA上执行:

grant replication slave on *.* to 'root'@'123.23.23.2' identified by 'password';
flush privileges;

在masterB上执行:

grant replication slave on *.* to 'root'@'123.23.23.1' identified by 'password';
flush privileges;

查看主库状态

masterA执行:

show master status;

得到结果:

记下下面的File和Position对应的值。

同理masterB上面也是这样操作。

配置同步信息

在masterA上执行:B的 File和Position的值在这里放这里

change master to 
master_host='123.23.23.2',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

在masterB上执行:A的File和Position的值在这里放这里

change master to 
master_host='123.23.23.1',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

随后分别在两个主库执行:

start slave;
show slave status;

显示下面的结果即为正常:

 

到此,两个主库已经建立了互为主从关系,我们可以测试在masterA新建一个数据库是否会在masterB库中出现。

配置从节点

假设我们新增一个从节点,是masterB的从节点:

理论上说,需要执行我在上面说的哪个执行不了的步骤,用在masterA上面执行的即可,执行不通过,也可以继续往下走:

在slaveC上执行:B的 File和Position的值在这里放这里

change master to 
master_host='123.23.23.2',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

随后在slaveC上执行:

start slave;
show slave status;

显示和Slave_IO_Running 和Slave_SQL_Running 都是Yes,就是正常的,

另外,如果项配置从库只读,可以在从库的my.cnf里面添加一个  read-only = 1 或者在客户端执行

set read_only = 1;

不过此命令对超级管理员无效,请注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(k8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。MySQL是一个流行的关系型数据库管理系统。在Kubernetes上部署MySQL8.0主从集群意味着在该平台上使用容器化的方式来管理MySQL数据库,主从集群是一种数据库复制的架构,用于提高数据库的可用性和性能。 要在Kubernetes上部署MySQL8.0主从集群,首先需要创建一个包含MySQL8.0镜像的容器,并定义相应的Pod和Service。然后可以使用Kubernetes的Deployment和StatefulSet等资源对象来定义MySQL主从集群部署配置。可以通过定义多个Replica来实现数据库的水平扩展,同时可以使用Kubernetes的存储卷来实现数据的持久化存储,并通过Service来实现集群内部和外部的访问。 Kubernetes提供了一些工具和资源对象,如PersistentVolume(PV)、PersistentVolumeClaim(PVC)等,可以帮助用户管理数据库的持久化存储。此外,Kubernetes还提供了一些网络策略和服务发现的功能,可以帮助用户实现容器间的通信和负载均衡。 通过使用Kubernetes的灵活性和强大的管理能力,可以方便地部署和管理MySQL8.0主从集群,实现高可用性和高性能的数据库服务。同时,Kubernetes的自动扩展和自愈能力也可以帮助用户实现数据库集群的自动化管理,提高运维效率。因此,Kubernetes是一个理想的平台,用于部署和管理MySQL8.0主从集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值