返回顶部
分享到

StoneDB主从配置及切换实践方案

数据库其他 来源:互联网 作者:佚名 发布时间:2022-10-14 23:37:05 人浏览
摘要

StoneDB 的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件 Replication Manager,当 master 发生宕机时,可自动切换至 slave,

StoneDB 的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件 Replication Manager,当 master 发生宕机时,可自动切换至 slave,保证业务正常运行,故障节点恢复后再加入主从。

服务器配置说明

IP Memory CPU OS version
192.168.30.40 8G 8C CentOS Linux release 7.9
192.168.30.41 8G 8C CentOS Linux release 7.9
192.168.30.42 8G 8C CentOS Linux release 7.9
192.168.30.46 16G 16C CentOS Linux release 7.9

注:主从环境中的各个服务器的配置一般情况下建议是一致的,但由于 StoneDB 不管重放 binlog,还是用于 OLAP 场景的查询,都是较消耗系统资源的,建议 StoneDB 配置略高于 MySQL。

主从环境说明

IP DATABASE ROLE DB version
192.168.30.40 MySQL master MySQL 5.7
192.168.30.41 / Replication Manager /
192.168.30.42 MySQL slave MySQL 5.7
192.168.30.46 StoneDB slave StoneDB 5.7

注:MySQL 与 StoneDB 的版本建议保持一致。

推荐采用一主两从的架构,其中 StoneDB 不参与主从切换:

1)master(192.168.30.40)使用 InnoDB 引擎,可读写,提供 OLTP 场景的读写业务;

2)slave1(192.168.30.42)使用 InnoDB 引擎,只读,同时作为 standby,当 master 发生宕机时,可切换至 slave1,保证业务正常运行;

3)slave2(192.168.30.46)使用 Tianmu 引擎,只读,提供 OLAP 场景的读业务。

1、操作系统环境检查

操作系统环境检查的步骤在四个节点均需要执行。

1.1 关闭防火墙

1

2

# systemctl stop firewalld

# systemctl disable firewalld

1.2 关闭SELINUX

1

2

# vim /etc/selinux/config

SELINUX = disabled

1.3 设置Swap分区

修改vm.swappiness的值为1,表示尽量不使用Swap。

1

2

# vi /etc/sysctl.conf

vm.swappiness = 1

1.4 修改操作系统的限制

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 1031433

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 65535

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 1024

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

 

修改操作系统的软硬限制

# vim /etc/security/limits.conf

* soft nofile 65535

* hard nofile 65535

mysql soft nproc 1028056

mysql hard nproc 1028056

1.5 创建用户

1

2

3

# groupadd mysql

# useradd -g mysql mysql

# passwd mysql

Replication Manager 节点无需创建,以上步骤执行完之后,重启操作系统。

2、部署MySQL

在 master 节点和 slave1 节点安装 MySQL。

2.1 下载安装包

https://downloads.mysql.com/archives/community/从官网下载 MySQL 5.7 的安装包。

2.2 卸载mariadb

1

2

3

4

5

6

# rpm -qa|grep mariadb

mariadb-5.5.56-2.el7.x86_64

mariadb-server-5.5.56-2.el7.x86_64

mariadb-libs-5.5.56-2.el7.x86_64

# yum remove mariadb*

# rpm -qa|grep mariadb

2.3 上传tar包并解压

1

2

3

# tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

# cd /usr/local/

# mv mysql-5.7.36-linux-glibc2.12-x86_64 mysql

2.4 创建目录

1

2

3

# mkdir -p /mysql/data/

# mkdir -p /mysql/log

# chown -R mysql:mysql /mysql/

2.5 配置参数文件 my.cnf

master

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# vim /etc/my.cnf

[client]

port    = 3306

socket  = /mysql/data/mysql.sock

 

[mysqld]

port      = 3306

basedir   = /usr/local/mysql

datadir   = /mysql/data

socket    = /mysql/data/mysql.sock

pid_file  = /mysql/data/mysqld.pid

log_error = /mysql/log/mysqld.log

log_bin   = /mysql/log/mybinlog

server_id = 40

character_set_server = utf8mb4

collation_server = utf8mb4_general_ci

max_connections = 1000

binlog_format = row

default_storage_engine = innodb

read_only=0

 

innodb_buffer_pool_size = 4096000000

innodb_log_file_size = 1024000000

innodb_log_files_in_group = 3

innodb_io_capacity = 4000

innodb_io_capacity_max = 8000

 

#开启GTID模式

gtid_mode = on

enforce_gtid_consistency = 1

 

#并行复制

binlog_transaction_dependency_tracking = WRITESET

transaction_write_set_extraction = XXHASH64

slave1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# vim /etc/my.cnf

[client]

port    = 3306

socket  = /mysql/data/mysql.sock

 

[mysqld]

port      = 3306

basedir   = /usr/local/mysql

datadir   = /mysql/data

socket    = /mysql/data/mysql.sock

pid_file  = /mysql/data/mysqld.pid

log_error = /mysql/log/mysqld.log

log_bin   = /mysql/log/mybinlog

server_id = 42

character_set_server = utf8mb4

collation_server = utf8mb4_general_ci

max_connections = 1000

binlog_format = row

default_storage_engine = innodb

read_only=1

 

innodb_buffer_pool_size = 4096000000

innodb_log_file_size = 1024000000

innodb_log_files_in_group = 3

innodb_io_capacity = 4000

innodb_io_capacity_max = 8000

 

#开启GTID模式

gtid_mode = on

enforce_gtid_consistency = 1

 

#并行复制

slave_parallel_type = LOGICAL_CLOCK

slave_parallel_workers = 4

2.6 初始化实例

1

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

2.7 启动实例

1

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

注:管理员用户的临时密码在 mysqld.log 中,第一次登陆后需要修改管理员用户的密码。

3、部署StoneDB

3.1 下载安装包

https://stonedb.io/zh/docs/download/从官网下载 StoneDB 5.7 的安装包。

3.2 上传tar包并解压

1

2

# cd /

# tar -zxvf stonedb-ce-5.7-v1.0.0.el7.x86_64.tar.gz

用户可根据安装规范将安装包上传至服务器,解压出来的目录是 stonedb57,示例中的安装路径是 /stonedb57。

3.3 检查依赖文件

1

2

3

# cd /stonedb57/install/bin

# ldd mysqld

# ldd mysql

如果检查返回有关键字"not found",说明缺少文件,需要安装对应的依赖包。例如:

libsnappy.so.1 => not found

在 Ubuntu 上使用命令 "sudo apt search libsnappy" 检查,说明需要安装 libsnappy-dev。在 RedHat 或者 CentOS 上使用命令 "yum search all snappy" 检查,说明需要安装 snappy-devel、snappy。

3.4 创建目录

1

2

3

4

5

6

7

mkdir -p /stonedb57/install/data

mkdir -p /stonedb57/install/binlog

mkdir -p /stonedb57/install/log

mkdir -p /stonedb57/install/tmp

mkdir -p /stonedb57/install/redolog

mkdir -p /stonedb57/install/undolog

chown -R mysql:mysql /stonedb57

3.5 配置参数文件 my.cnf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

# vim /stonedb57/install/my.cnf

[client]

port    = 3306

socket  = /stonedb57/install/tmp/mysql.sock

 

[mysqld]

port      = 3306

basedir   = /stonedb57/install/

datadir   = /stonedb57/install/data

socket    = /stonedb57/install/tmp/mysql.sock

pid_file  = /stonedb57/install/data/mysqld.pid

log_error = /stonedb57/install/log/mysqld.log

log_bin   = /stonedb57/install/binlog/binlog

server_id = 46

character_set_server = utf8mb4

collation_server = utf8mb4_general_ci

max_connections = 1000

binlog_format = row

default_storage_engine = tianmu

read_only=1

 

innodb_buffer_pool_size = 2048000000

innodb_log_file_size = 1024000000

innodb_log_files_in_group = 3

innodb_io_capacity = 4000

innodb_io_capacity_max = 8000

innodb_log_group_home_dir   = /stonedb57/install/redolog/

innodb_undo_directory       = /stonedb57/install/undolog/

innodb_undo_log_truncate    = 1

innodb_undo_tablespaces     = 3

innodb_undo_logs            = 128

 

#开启GTID模式

gtid_mode = on

enforce_gtid_consistency = 1

 

#并行复制

slave_parallel_type = LOGICAL_CLOCK

slave_parallel_workers = 8 

3.6 初始化实例

1

/stonedb57/install/bin/mysqld --defaults-file=/stonedb57/install/my.cnf --initialize --user=mysql

3.7 启动实例

1

/stonedb57/install/bin/mysqld_safe --defaults-file=/stonedb57/install/my.cnf --user=mysql &

注:管理员用户的临时密码在 mysqld.log 中,第一次登陆后需要修改管理员用户的密码。

4、配置主从

4.1 创建复制用户

1

2

create user 'repl'@'%' identified by 'mysql123';

grant replication slave on *.* to 'repl'@'%';

4.2 备份主库

1

/usr/local/mysql/bin/mysqldump -uroot -pmysql123 --single-transaction --set-gtid-purged=on -B aa > /tmp/aa.sql

4.3 传输备份文件

1

2

scp /tmp/aa.sql root@192.168.30.42:/tmp

scp /tmp/aa.sql root@192.168.30.43:/tmp

注:如果数据较大,建议使用 mydumper.

4.4 slave1节点

1

2

/usr/local/mysql/bin/mysql -uroot -pmysql123 -S /mysqldb/data/mysql.sock

source /tmp/aa.sql

注:恢复前需要确保 gtid_executed 为空。

4.5 slave2节点

在恢复前,需要修改存储引擎,注释锁表语句。

1

2

3

4

5

6

sed -i 's/UNLOCK TABLES/-- UNLOCK TABLES/g' /tmp/aa.sql

sed -i 's/LOCK TABLES `/-- LOCK TABLES `/g' /tmp/aa.sql

sed -i 's/ENGINE=InnoDB/ENGINE=tianmu/g' /tmp/aa.sql

 

/stonedb57/install/bin/mysql -uroot -pmysql123 -S /stonedb57/install/tmp/mysql.sock

source /tmp/aa.sql

注:恢复前需要确保 gtid_executed 为空。

4.6 建立主从复制

slave1节点

1

2

3

4

5

6

7

8

9

CHANGE MASTER TO

MASTER_HOST='192.168.30.40',

MASTER_PORT=3306,

MASTER_USER='repl',

MASTER_PASSWORD='mysql123',

MASTER_AUTO_POSITION = 1;

 

start slave;

show slave status\G

slave2节点

1

2

3

4

5

6

7

8

9

CHANGE MASTER TO

MASTER_HOST='192.168.30.40',

MASTER_PORT=3306,

MASTER_USER='repl',

MASTER_PASSWORD='mysql123',

MASTER_AUTO_POSITION = 1;

 

start slave;

show slave status\G

5、配置Replication Manager

5.1 配置hosts文件

在所有节点都要配置

1

2

3

4

5

# vim /etc/hosts

192.168.30.40 HAMI01

192.168.30.41 HAMI02

192.168.30.42 HAMI03

192.168.30.46 HAST05

5.2 配置免密

在 Replication Manager 节点配置

1

2

3

4

5

6

7

8

ssh-keygen

ssh-copy-id HAMI01

ssh-copy-id HAMI03

ssh-copy-id HAST05

 

ssh HAMI01

ssh HAMI03

ssh HAST05

注:若 ssh 免密登录表示免密配置成功。

5.3 配置yum源

1

2

3

4

5

6

# vim /etc/yum.repos.d/signal18.repo

[signal18]

name=Signal18 repositories

baseurl=http://repo.signal18.io/centos/2.1/$releasever/$basearch/

gpgcheck=0

enabled=1

5.4 安装Replication Manager

1

2

3

# yum install -y replication-manager-osc

# rpm -qa|grep replication

replication-manager-osc-2.2.20-1.x86_64

5.5 主库创建监控用户

1

2

3

4

5

create user 'rep_monitor'@'%' identified by 'mysql123';

grant reload, process, super, replication slave, replication client, event ON *.* to 'rep_monitor'@'%';

grant select ON mysql.event to 'rep_monitor'@'%';

grant select ON mysql.user to 'rep_monitor'@'%';

grant select ON performance_schema.* to 'rep_monitor'@'%';

5.6 配置config.toml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

# vim /etc/replication-manager/config.toml

 

# 集群名称

[StoneDB-HA]

# 主从节点

db-servers-hosts = "192.168.30.40:3306,192.168.30.42:3306,192.168.30.46:3306"

# 主节点

db-servers-prefered-master = "192.168.30.40:3306"

# 监控用户

db-servers-credential = "rep_monitor:mysql123"

db-servers-connect-timeout = 2

# 复制用户

replication-credential = "repl:mysql123"

# StoneDB不被用于切换

db-servers-ignored-hosts="192.168.30.46:3306"

 

##############

## FAILOVER ##

##############

# 故障自动切换

failover-mode = "automatic"

# 30s内再次发生故障不切换,防止硬件问题或网络问题

failover-time-limit=30

 

[Default]

#########

## LOG ##

#########

log-file = "/var/log/replication-manager.log"

log-heartbeat = false

log-syslog = false

monitoring-datadir = "/var/lib/replication-manager"

log-level=1

 

replication-multi-master = false

replication-multi-tier-slave = false

failover-readonly-state = true

http-server = true

http-bind-address = "0.0.0.0"

http-port = "10001"

5.7 启动Replication Manager

1

2

3

4

# systemctl start replication-manager

# netstat -lntp|grep replication

tcp6       0      0 :::10001                :::*                    LISTEN      13128/replication-m

tcp6       0      0 :::10005                :::*                    LISTEN      13128/replication-m

5.8 WEB登录

http://192.168.30.41:10001默认用户名密码为 admin/repman

6、建议项

1)建议设置为 GTID 模式;

2)建议主从配置成半同步模式;

3)StoneDB 不参与主从切换。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 : https://www.cnblogs.com/yangwilly/archive/2022/10/11/16778554.html
相关文章
  • 一文介绍在Hive中NULL的理解
    在 Hive 中,NULL 是一个特殊的值,表示未知或缺失。任何与NULL的比较操作(如=,,,=,=,)都会返回NULL,而不是TRUE或FALSE。 1.NULL 的比较规则 在
  • Navicat Premium 12数据库管理解决方案

    Navicat Premium 12数据库管理解决方案
    Navicat Premium 12是一款全面的数据库管理工具,支持多种数据库系统如MySQL、MariaDB、Oracle、SQL Server、PostgreSQL等。它提供了多数据库连接、数据
  • sqlite3命令行工具使用介绍
    一、启动与退出 启动数据库连接 1 2 3 sqlite3 [database_file] # 打开/创建数据库文件(如 test.db) sqlite3 # 启动临时内存数据库 (:memory:) sqlite3 :m
  • StarRocks简介与搭建使用介绍

    StarRocks简介与搭建使用介绍
    StarRocks简介 StarRocks 是一款高速、实时、全场景的MPP(大规模并行处理)分析型数据库系统,专为现代数据分析场景设计,强调亚秒级查询性
  • centos虚拟机部署opengauss数据库详细图文

    centos虚拟机部署opengauss数据库详细图文
    一、基本信息 1、虚拟机安装的centos版本 2、opengauss版本 地址:https://opengauss.org/zh/download/ 3、opengauss和gaussdb的区别 高斯数据库(GaussDB)是云
  • 达梦数据库文件故障的恢复方法

    达梦数据库文件故障的恢复方法
    1、概述 1.1 概述 本文介绍了达梦数据库文件损坏或误删除后的恢复方法。这里的数据库文件包括,表空间数据文件、重做日志文件、UNDO文件
  • Sql Server 2008 数据库附加错误:9004问题解决方案介
    【问题描述】 数据库文件存在异常状况,有可能是因为硬盘有坏区引起的。附加数据库的时候,提示错误9004。 【解决方法】 假设数据库名
  • Access数据中的SQL偏移注入原理解析介绍
    使用场景: 目标数据表的字段较多,无法一一获取的时候,尝试使用偏移注入的方式实现SQL注入。 原理: 例如:一个表有6个字段,而你想
  • Navicat导入Excel数据时数据被截断的问题分析与解

    Navicat导入Excel数据时数据被截断的问题分析与解
    在数据库的日常操作中,将Excel数据导入MySQL是常见的需求之一,特别是通过Navicat工具进行Excel数据导入时,可能会遇到数据截断的问题。具
  • GaussDB数据库事务管理及高级应用

    GaussDB数据库事务管理及高级应用
    事务管理是数据库系统中至关重要的一部分,它确保了数据库的一致性和可靠性。在GaussDB数据库中,事务管理不仅遵循传统的ACID特性,还提
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计