tidb 分布式高可用架构

简介:

 

架构图:

wKiom1gtcCWhUUA6AAAiJCTEifk249.png-wh_50

 

 

一、环境规划:

Pd node

192.168.9.42

192.168.15.57


Tikv node

192.168.15.2

192.168.15.2

192.168.15.23

tidb

192.168.15.57

192.168.15.104


VIP

192.168.15.219

Haproxy  -v

1.4.20

192.168.15.57


192.168.9.42

Keepalived-v

1.2.19

准备前工作:

A、同步系统时间

B、是否把刷屏日志写到一个文件里,可在启动命令后面追加到一个文件

/tmp/sh-error1.log 2>&1 &

C、不同版本需要的包glibc

D、启动服务开启守护进程要加nohup,

bash -c 'nohup command args... &'

E、系统版本为CENTOS6

F、包下载

http://down.51cto.com/data/2258987  ##CENTOS7

http://down.51cto.com/data/2259295  ##CENTOS6

http://down.51cto.com/data/2259848  ##pd tikv配置文件

友情提示:需要的其他包可以在其他章节博客里找到

 

G、IPTABLES 设置,需要开通集群使用的端口或者直接关闭

启动服务开启守护进程要加nohup

1、  下载包,解压后把命令存放在/usr/bin/目录下

 

#ln –s ……..

2、 修改57pd配置文件,并启动:##默认参数不展示

name = "tidb_pd"

data-dir = "/home/tidb_pd"

client-urls = http://192.168.15.57:2379#本机

advertise-client-urls = ""

peer-urls = http://192.168.15.57:2380#本机

advertise-peer-urls =http://192.168.15.57:2380#本机

initial-cluster ="tidb57=http://192.168.15.57:2380,tidb104=http://192.168.15.104:2380"#PD节点信息

initial-cluster-state = "new"

lease = 1

log-level = "debug"

tso-save-interval = "3s"

max-peer-count = 3

[balance]

min-capacity-used-ratio = 0.1

max-capacity-used-ratio = 0.9

address = ""

3、启动pd-server:

#bash -c 'nohup /usr/local/tidb/bin/pd-server--config=/usr/local/tidb/conf/pd.toml >>/tmp/aa.tx 2>&1   &' 

检查是否启动OK:

root@nod2 conf]# netstat -nletp |grep pd-server

tcp 0  0192.168.15.57:2379    0.0.0.0:* ……

tcp 0  0 192.168.15.57:2380   0.0.0.0:*  ……….

4、修改三个节点的tikv配置文件并 并启动  #####默认参数不展示

addr ="192.168.15.13:20160" #写各个节点IP

advertise-addr= ""

store = "/home/tikv13" 

log-level = "debug"  

job = "tikv_13"

endpoints = "192.168.15.57:2379,192.168.15.104:2379" #PDIP

#/usr/local/tidb/bin/tikv-server--config=/usr/local/tidb/conf/tikv.toml &

此方式启动没办法做到后台后台守护,需要在启动前加nohup

#bash -c 'nohup /usr/local/tidb/bin/tikv-server--config=/usr/local/tidb/conf/tikv.toml >>/tmp/aa.tx 2>&1   &'

直接这样启动  当前会话窗口不停的刷日志

5、启动tidb ##

#nohup /usr/local/tidb/bin/tidb-server--store=tikv --path="192.168.15.57:2379,192.168.15.104:2379" &

##--store=tikv为分布式是的引擎

 [root@nod2conf]# netstat -nltp |grep tidb

tcp        0     0 :::10080                   :::*                        LISTEN     

tcp        0     0 :::4000  

###基础点

4000:为服务监听端口

10080:服务状态监听端口,此端口展示

###基础操作tidb

TiDB内部数据用的,包括prometheus统计

http://192.168.15.57:10080/debug/pprof

http://192.168.15.57:10080/metrics

查看tidb状态信息:http://192.168.15.57:10080/status

{"connections":1,"version":"5.7.1-TiDB-1.0","git_hash":"01dde4433a0e5aabb183b3f6d00bd2f43107421a"}

查看集群状态,集群状态通过查看pd服务信息既可看到tikv信息

http://192.168.15.57:2379/pd/api/v1/stores

或者在本地查看 直接加curl 加地址

 

首次登录为:mysql –h192.168.15.57 –P4000 –uroot

mysql –h192.168.9.42 –P4000 –uroot

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| INFORMATION_SCHEMA |

| PERFORMANCE_SCHEMA |

| mysql             |

| test              |

| tidb              |

+--------------------+

登录后看到保存的元数据信息是相同的。集群OK    

5、在192.168.15.57 192.168.9.42上都安装haproxy keepalived服务

         ##keepalived主要提供资源高可用,解决单点故障,实现VIP漂移

1、  解压配置haproxy

###配置HAPROXY 若同时启动haproxy,一边没有IP资源的会提示

 Startingproxy admin_stats: cannot bind socket导致服务无法启动,修改:

修改内核参数: /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

保存结果,使结果生效

sysctl  –p

#useradd haproxy

#tar -zxvf haproxy-1.4.20.tar.gz

#cd haproxy-1.4.20 &&makeTARGET=linux26 PREFIX=/usr/local/haproxy ARCH=X86_64 && makeinstallPREFIX=/usr/local/haproxy

若出现此问题,则需要安装gcc

#yum –y install gcc

#chown -R haproxy.haproxy/usr/local/haproxy

2、添加修改配置文件,部分解释参数配置意义(具体看haproxy.cfg)

   #cd /usr/local/haproxy && makeconf&&cdconf && touch haproxy.cfg

###注意前段页使面用的端口48800和前端提供服务的端口,开通IPTABLES访问权限,

端口不能有冲突

3、默认情况下haproxy是不记录日志的,可以使用rsync本例LINUX服务记录日志。

1、在linux下是rsyslogd服务,

#yum –yinstallrsyslog先安装rsyslog

一般安装好rsyslog会自动生成rsyslog.d这个目录,若无自己创建

 #cd/etc/rsyslog.d/ && touch haproxy.conf

#vim/etc/rsyslog.d/haproxy.conf

$ModLoad imudp

$UDPServerRun 514

 local0.* /var/log/haproxy.log ###这个必须和haproxy.cfg的配置文件一致。

#vim /etc/rsyslog.conf

在62行 添加local0.*       /var/log/haproxy.log

重启服务

#service rsyslogrestart

现在你就可以看到日志(/var/log/haproxy.log)了

Haproxy.cfg:

# this config needs haproxy-1.1.28 orhaproxy-1.2.1

 

global

    log127.0.0.1   local0

    maxconn4096

    log127.0.0.1   local1 notice

    #logloghost    local0 info

    #maxconn4096

    #chroot/usr/local/haproxy

    chroot/usr/local/pxc

    uid501

    gid501

    daemon

    nbproc1

    pidfile/usr/local/haproxy/logs/haproxy.pid

    #debug

    #quiet

defaults

    log global

    #option dontlognull

    retries 3

    option      redispatch

    maxconn 4096

    timeout     http-keep-alive 10s

    timeoutcheck 10s

    contimeout  600s

    clitimeout  600s

    srvtimeout  50000

    timeoutqueue   50000

    timeoutconnect 600s

    timeoutclient  600s

    timeoutserver  600s

listen admin_stats 192.168.15.219:48800

       stats enable

    statshide-version

       stats realm <realm>

    statsrefresh 5s

    statsuri /admin-status

       stats auth admin:admin

       stats admin if TRUE

       mode http

       option httplog

       timeout connect 600s

       timeout check 5000

       timeout client 600s

       timeout server 600s

 

listen  tidb_server192.168.15.219:3306

    modetcp

    balance roundrobin

    optiontcpka

    optiontcplog

    server  tidb_server1 192.168.15.57:4000 weight 1 checkinter 2000 rise 2 fall 5

    server  tidb_server2 192.168.9.42:4000  weight 1 check inter 2000 rise 2 fall 5backup

    #timeoutconnect 50000

    #timeoutclient  50000

    #timeoutcheck   50000

    #timeouthttp-keep-alive 5000

    #timeoutserver  50000

 

listen tidb_status 192.168.15.219:6688

    modetcp

    balanceroundrobin

    optiontcpka

    optiontcplog

    servertidb_status1 192.168.15.57:10080 weight 1 check inter 2000 rise 2 fall 5

    servertidb_status2 192.168.9.42:10080 weight 1 check inter 2000 rise 2 fall 5

    timeoutconnect 50000

       timeout client  50000

       timeout check   50000

       timeout http-keep-alive 5000

       timeout server  50000

listen tikv_server

    bind*:20160

    modetcp

       balance roundrobin

       option tcpka

       option tcplog

       server tikv_server1 192.168.15.2:20160 weight 1 check inter 2000 rise 2fall 5

       server tikv_server2 192.168.15.13:20160 weight 1 check inter 2000 rise 2fall 5

       server tikv_server3 192.168.15.23:20160 weight 1 check inter 2000 rise 2fall 5

       timeout connect 50000

       timeout client  50000

       timeout check   50000

       timeout http-keep-alive 5000

       timeout server  50000

6安装keepalived服务:

#cd keepalived-1.2.12

#./configure--prefix=/usr/local/keepalived

若报错:

configure:error:

  !!! OpenSSL is notproperly installed on yoursystem. !!!

  !!! Can not include OpenSSL headersfiles.           !!!

 

yuminstall  openssl* check* -y

#make &&  make install

#cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

#cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

#mkdir /etc/keepalived

#cp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/

#cp/usr/local/keepalived/sbin/keepalived/usr/sbin/

 

Keepalived.conf:

cat keepalived.conf

! Configuration File for keepalived

 

global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

   }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

   state BACKUP

   interface em1

   virtual_router_id 51

   realserver 192.168.15.57

   priority 90

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       192.168.15.219 dev em1 scope global

    }

#notify_master/etc/keepalived/check_master_haproxy.sh

#notify_master/etc/keepalived/check_backup_haproxy.sh

}

###注意这里需要写个简单的脚本判断haproxykeepalived服务的高可用,若出现故障进行切换。脚本略

##tikvtidb,pd都加到haproxy里去,不知道会不会影响效率,若是有还是老老实实的使用原生态界面查看


wKioL1gtb9uxQbuRAAG4WKLNZnQ186.png-wh_50

##在负载均衡,可以替换的有maxscale也是不错的,,,配置简单,就是没有监控界面



本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/1873964

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
SQL 监控 关系型数据库
MySQL主从复制:构建高可用架构
本文深入解析MySQL主从复制原理与实战配置,涵盖复制架构、监控管理、高可用设计及性能优化,助你构建企业级数据库高可用方案。
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
258 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
11月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1497 3
|
11月前
|
运维 监控 搜索推荐
MSE ZooKeeper:Flink 高可用架构的企业级选择
本文深入解析了 Apache Flink 架构中 ZooKeeper 的核心作用,包括 Leader 选举、Checkpoint 管理、作业协调及配置管理等关键功能,并结合金融风控与电商推荐等典型场景,分析了 ZooKeeper 在实际应用中的技术实现。
|
9月前
|
运维 监控 安全
公链开发中的高可用架构设计要点
本指南提供公链高可用架构的可复用流程与模板,涵盖目标拆解、先决条件、分步执行、故障排查及验收标准,结合跨链DApp与量化机器人案例,提升落地效率与系统稳定性。
|
9月前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
9月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
631 1
|
监控 算法 关系型数据库
分布式事务难题终结:Seata+DRDS全局事务一致性架构设计
在分布式系统中,CAP定理限制了可用性、一致性与分区容错的三者兼得,尤其在网络分区时需做出取舍。为应对这一挑战,最终一致性方案成为常见选择。以电商订单系统为例,微服务化后,原本的本地事务演变为跨数据库的分布式事务,暴露出全局锁失效、事务边界模糊及协议差异等问题。本文深入探讨了基于 Seata 与 DRDS 的分布式事务解决方案,涵盖 AT 模式实践、分片策略优化、典型问题处理、性能调优及高级特性实现,结合实际业务场景提供可落地的技术路径与架构设计原则。通过压测验证,该方案在事务延迟、TPS 及失败率等方面均取得显著优化效果。
645 61
|
10月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
10月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的&quot;神经网络&quot;,强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,