构建MySQL+DRBD+Keepalived高性能架构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

前言* DRBD(DistributedReplicatedBlockDevice)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于RAID1数据镜像,通常配合keepalived、heartbeat等HA软件来实现高可用性。这里简单记录仅供参考。

一、实施环境

1
2
3
4
5
系统版本:CentOS  5.8
DRBD版本: drbd- 8.3 . 15
Keepalived:keepalived- 1.1 . 15
Master: 192.168 . 149.128
Backup: 192.168 . 149.129

二、初始化配置

1)   在128、129两台服务器/etc/hosts里面都添加如下配置:

1
2
192.168 . 149.128   node1
192.168 . 149.129   node2

2)   优化系统kernel参数,直接上sysctl.conf配置如下:

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
net.ipv4.ip_forward =  0
net.ipv4.conf. default .rp_filter =  1
net.ipv4.conf. default .accept_source_route =  0
kernel.sysrq =  0
kernel.core_uses_pid =  1
net.ipv4.tcp_syncookies =  1
kernel.msgmnb =  65536
kernel.msgmax =  65536
kernel.shmmax =  68719476736
kernel.shmall =  4294967296
net.ipv4.tcp_max_tw_buckets =  10000
net.ipv4.tcp_sack =  1
net.ipv4.tcp_window_scaling =  1
net.ipv4.tcp_rmem =  4096         87380    4194304
net.ipv4.tcp_wmem =  4096         16384    4194304
net.core.wmem_default =  8388608
net.core.rmem_default =  8388608
net.core.rmem_max =  16777216
net.core.wmem_max =  16777216
net.core.netdev_max_backlog =  262144
net.core.somaxconn =  262144
net.ipv4.tcp_max_orphans =  3276800
net.ipv4.tcp_max_syn_backlog =  262144
net.ipv4.tcp_timestamps =  0
net.ipv4.tcp_synack_retries =  1
net.ipv4.tcp_syn_retries =  1
net.ipv4.tcp_tw_recycle =  1
net.ipv4.tcp_tw_reuse =  1
net.ipv4.tcp_mem =  94500000  915000000  927000000
net.ipv4.tcp_fin_timeout =  1
net.ipv4.tcp_keepalive_time =  30
net.ipv4.ip_local_port_range =  1024     65530
net.ipv4.icmp_echo_ignore_all =  1

3)   两台服务器分别添加一块设备,用于DRBD主设备存储,我这里为/dev/sdb 30G硬盘;

wKioL1Np_7aTusfaAAKJoxAzkU4740.jpg

执行如下命令:

1
mkfs.ext3 /dev/sdb ;dd  if =/dev/zero of=/dev/sdb bs=1M count= 1 ;sync

三、DRBD安装配置

1
yum -y install drbd83* kmod-drbd83 ; modprobe  drbd

安装完成并加载drbd模块后,vi修改/etc/drbd.conf配置文件,本文内容如下:

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
global {
     usage-count yes;
}
common {
syncer { rate 100M; }
}
resource r0 {
  protocol C;
  startup {
                                                                                                                                                                                                                                                                                                                                                                                                                     
  }
  disk {
  on-io-error detach;
  #size 1G;
  }
  net {
  }
  on node1 {
  device /dev/drbd0;
  disk /dev/sdb;
  address  192.168 . 149.128 : 7898 ;
  meta-disk  internal ;
  }
  on node2 {
  device /dev/drbd0;
  disk /dev/sdb;
  address  192.168 . 149.129 : 7898 ;
  meta-disk  internal ;
  }
}

配置修改完毕后执行如下命令初始化:

1
drbdadm create-md  r0  ;/etc/init.d/drbd restart ;/etc/init.d/status

如下图:

wKiom1NqA0_gZAfCAATMZZdgNLI315.jpg

以上步骤,需要在两台服务器都执行,两台都配置完毕后,在node2从上面执行如下命令:/etc/init.d/drbd status 看到如下信息,表示目前两台都为从,我们需要设置node1为master,命令如下:

1
2
3
drbdadm -- --overwrite-data-of-peer primary all
mkfs.ext3 /dev/drbd0
mkdir  /app  ;mount /dev/drbd0  /app

自此,DRBD配置完毕,我们可以往/app目录写入任何东西,当master出现宕机或者其他故障,手动切换到backup,数据没有任何丢失,相当于两台服务器做网络RAID1。

四、Keepalived配置

1
2
3
wget http: //www.keepalived.org/software/keepalived-1.1.15.tar.gz; tar -xzvf keepalived-1.1.15.tar.gz ;cd keepalived-1.1.15 ; ./configure ; make ;make install
DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/ ; cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ ;
mkdir -p /etc/keepalived ; cp $DIR/sbin/keepalived /usr/sbin/

   两台服务器均安装keepalived,并进行配置,首先在node1(master)上配置,keepalived.conf内容如下:

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
! Configuration File  for  keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_script check_mysql {
         script  "/data/sh/check_mysql.sh"
         interval  5
         }
vrrp_instance VI_1 {
     state MASTER
     interface  eth0
     virtual_router_id  52
     priority  100
     advert_int  1
     authentication {
         auth_type PASS
         auth_pass  1111
     }
     virtual_ipaddress {
         192.168 . 149.100
          }
         track_script {
         check_mysql
         }
}

 然后创建check_mysql.sh检测脚本,内容如下:

1
2
3
4
5
6
7
8
#!/bin/sh
A=`ps -C mysqld --no-header |wc -l`
if
[ $A -eq  0  ];then
/bin/umount /app/
drbdadm secondary r0
killall keepalived
fi

添加node2(backup)上配置,keepalived.conf内容如下:

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
! Configuration File  for  keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_sync_group VI{
group {
       VI_1
}
notify_master /data/sh/master.sh
notify_backup /data/sh/backup.sh
}
vrrp_instance VI_1 {
     state BACKUP
     interface  eth0
     virtual_router_id  52
     priority  90
     advert_int  1
     authentication {
         auth_type PASS
         auth_pass  1111
     }
     virtual_ipaddress {
         192.168 . 149.100
          }
}

  创建master.sh检测脚本,内容如下:

1
2
3
4
#!/bin/bash
drbdadm primary r0
/bin/mount /dev/drbd0 /app/
/etc/init.d/mysqld start

  创建backup.sh检测脚本,内容如下:

1
2
3
4
#!/bin/bash
/etc/init.d/mysqld stop
/bin/umount /dev/drbd0
drbdadm secondary r0

  发生脑裂恢复步骤如下:

1
2
3
4
5
Master执行命令:
drbdadm  secondary r0
drbdadm  --  --discard-my-data  connect r0
Backup上执行命令:
drbdadm  connect r0
本文转自 wgkgood 51CTO博客,原文链接:http://blog.51cto.com/wgkgood/1408056
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
29天前
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
90 2
|
10天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
131 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
5天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
13天前
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构
|
23天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
21天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
67 5
|
19天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
36 2
|
19天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
20天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####