最近在负责公司Couchbase版本升级工作,之前只有一台Cache服务器,使用Couchbase Enterprise Edition 1.8,为避免单点故障现在需要新增加一台Cache服务器做负载,并对老版本couchbase进行升级。(以下均在windows系统下操作)

在进行主题之前先提一下Couchbase一些基本概念:在Couchbase的集群架构中,没有中心节点和Router的概念,这些工作是由Smartclient完成的,在客户端与couchbase server交互时,Couchbase集群是作为一个黑匣子存在的。客户端负责客户程序与群集里独立节点的通信,首次连接的那个节点并不会充当代理或者风发的角色。Smartclient或Moxi(couchbase server端的proxy组件)会加载vBucket映射表,并决定连接到集群里的哪个节点去获取和存储数据。如果集群的拓扑图改变了(比如执行rebalance或者failover操作),客户端库会自动处理任何会话错误。可以这样理解,集群的配置和结构,对应用程序是透明的,你无需去关注。

什么是Buckets,Buckets是独立的虚拟的数据容器,一个bucket就是couchbase服务器集群中的一个逻辑组,可以被集群中的多个客户端应用使用。它提供安全的机制来组织、管理、分析数据存储资源。

什么是vBuckets,一个vBucket定义为couchbase集群里key空间的一个子集的拥有者。通过使用vBuckets,信息在集群里分发更有效。vBucket系统被用于分布式数据,以及支持多节点间的数据复制。

在Couchbase中bucket有两种类型,一种是couchbase类型,另一种是memcache类型,Couchbase类型bucket支持数据的持久化,因为它的数据是存储在磁盘上,把活跃的数据读取到内存中供客户端使用(后续的备份和Failover也仅是针对着用类型的bucket),而memcache类型的bucket是内存级别的,所有的数据均保存在内存中。现在我们开始切入主题,我们老的couchbase服务器,使用了这两种类型的bucket,我们使用couchbase类型的bucket存储的是持久化的数据,供我们的客户端调用,这部分数据相当重要且不能丢失。

基本思路:

  • 备份老的couchbase服务数据
  • 将新couchbase服务器加入到老服务器集群中,并通过rebalance同步两台服务器cache数据
  • 修改客户端Couchbase配置节点
  • Failover老服务器进行升级

第一步备份:

根据Couchbase官方说明(http://docs.couchbase.com/couchbase-manual-2.5/cb-install/#getting-started)couchbase由1.8升级到2.0+必须要经过1.8.1版本,这个过程是要对数据类型的升级。

而且couchbase1.8和2.5版本的备份方式不一致,这里提供两个版本的备份脚本(注意只能备份Couchbase类型的bucket)

#1.8版本:

@echo off

echo 开始执行Couchbase buckets备份

cd "C:\Program Files\Couchbase\Server\bin"

echo 当前路径:%cd%

cbbackup "C:\Program Files\Couchbase\Server\var\lib\couchbase\data\default-data\default" c:/cbbackup/

pause...

#2.5版本

@echo off

echo 开始执行Couchbase buckets备份

cd "C:\Program Files\Couchbase\Server\bin"

echo 当前路径:%cd%

cbbackup http://localhost:8091 c:/cbbackup/ -u Administrator -p 123456 --single-node

pause...

第二步 将新couchbase服务器加入集群,操作如下:(10.4.18.26老Server,10.4.18.101新Server)

  1. 打开10.4.18.26 Couchbase 控制台"MANAGE->ServerNodes"节点,单击"Add Server",如图:

  1. 点击当前页面的"Pending Rebalance",单击"Rebalcnce"进行两台server的数据同步,如图:

  1. 系统自动实现数据同步,该过程可能会持续很长时间,如图:

说明:Couchbase有两种类型的Bucket:Couchbase和Memcache,Couchbase类型可实现每台server node拥有完整的副本,支持故障转移Failover;Memcache不支持Failover,多server node共同实现完整数据。

  1. 开启Auto-Failover,保证一台机器down掉,另一台机器能正常工作,操作如图:

说明:Couchbase默认是关闭Auto-Failover,需要手动开启,Timeout默认最低为30秒。

第三步 修改客户端配置节点:

<servers bucket="default" bucketPassword="">

<add uri="http://10.4.18.101:8091/pools" />

<add uri="http://10.4.18.26:8091/pools" />

</servers>

说明:在原有uri后添加一个uri

第四步 升级Couchbase版本

升级老版本couchbase直线需要将老的服务从集群中挂起,操作如下:

  1. 登录10.4.18.26 Couchbase 控制台,使用Failover 挂起10.4.18.26服务,如图:

1.8版本Couchbase升级到2.5版本,要经过1.8.1版本,先停掉Couchbase服务(windows服务),直接运行1.8.1版本couchbase客户端文件,这个版本会重复安装两次,第一次是upgrade 注册表数据,第二次才是完整的安装升级,升级完1.8.1,再次进入windows服务关闭couchbase服务,进行2.5版本的升级,该过程只执行一次。

升级完成后,我们需要将服务器重新加入集群,操作如下:

  1. Add Back让10.4.18.26重新加入集群,使用Rebalace同步数据。

整个操作过程看起来简单,其中做了很多次的实验和测试,生产环境的更新只能确保万无一失。测试代码已分享至github。点击这里!

Couchbase进阶-集群与版本升级的更多相关文章

  1. couchbase failover 集群故障自动转移方案研究!

    最近迷上Couchbase了,现在所有的站点全部试用Couchbase进行缓存及持久化,这样以来貌似风险比较大啊,缓存服务器挂了就完了. 看到有讲到Couchbase的集群方案很简单,于是照着教程做了 ...

  2. 生产环境上,哨兵模式集群Redis版本升级应用实战

    背景: 由于生产环境上所使用的Redis版本并不一致,好久也没有更新,为了避免版本不同对Redis集群造成影响,从而升级为统一Redis版本! 1.集群架构 一主两从三哨兵: 2.升级方案 (1)升级 ...

  3. Couchbase集群和Redis集群解析

    Couchbase集群和Redis集群解析 首先,关于一些数据库或者是缓存的集群有两种结构,一种是Cluster;一种是master-salve. 关于缓存系统一般使用的就是Redis,Redis是开 ...

  4. Couchbase集群

    Couchbase集群 http://www.cnblogs.com/sunwubin/p/3426801.html Couchbase服务器可以单独运行,也可以作为集群运行.在Couchbase集群 ...

  5. 集群版本升级——rolling upgrade在ES 单节点从 restart 到加入集群,大概要 100s 左右的时间。也就是说,这 100s 内,该节点上的所有分片都是 unassigned 状态

    集群版本升级 Elasticsearch 作为一个新兴项目,版本更新非常快.而且每次版本更新都或多或少带有一些重要的性能优化.稳定性提升等特性.可以说,ES 集群的版本升级,是目前 ES 运维必然要做 ...

  6. 【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复

    目录 一. CouchBase概述 1.1.简述 1.2.CouchDB和CouchBase比对 1.2.1.CouchDB和CouchBase的相同之处 1.2.2.CouchDB和CouchBas ...

  7. Elasticsearch集群升级指引

    目录 背景 第一部分 版本升级指引 第二部分 升级方法和具体步骤 总结 参考文献及资料 背景 Elasticsearch集群的版本升级是一项重要的集群维护工作.本篇文章参考官方文档,将详细介绍相关细节 ...

  8. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  9. Scala进阶之路-Spark独立模式(Standalone)集群部署

    Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...

随机推荐

  1. NETSH.EXE操作SSL

    NETSH.EXE操作SSL 程序位置:c:\windows\syswow64\netsh.exe 查看当前端口配置 netsh http show sslcert 将 SSL 证书绑定至端口号 ne ...

  2. linux服务器下配置多tomcat

    车辆交易用的系统模块,正在做.老板要看看,以便车城那边的人提出意见.于是在服务器上再次增加一个tomcat. 以前是配置过的,配置过程其实很简单,这次太大意了,找了半天问题. 首先是拷贝一个tomca ...

  3. [转载]WCF系列_分布式事务(下)

    浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下. 1. WCF分布式事务例子这里也用转账的例子说事.用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...

  4. MYC编译器源码分析之程序入口

    前文.NET框架源码解读之MYC编译器讲了MyC编译器的架构,整个编译器是用C#语言写的,上图列出了MyC编译器编译一个C源文件的过程,编译主路径如下: 首先是入口Main函数用来解析命令行参数,读取 ...

  5. String调用Array相关方法——有点古怪

    这个系列的前面几篇文章中有谈到在一个Object上使用apply.call等方法操作另一个Object的方法,今天我们来学习怎么样在String上调用Array相关方法. 在许多方面,字符串表现的好像 ...

  6. Hibernate 零配置之Annotation注解

    JPA规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java 实体类 和 XML 映射文件),将映射信息(写在Annotation中)与实体类集中在一起 ...

  7. C#获取枚举的描述

    public enum StatusEnum { /// <summary> /// 运行中 /// </summary> [Description("运行中&quo ...

  8. ES6学习之let声明变量的学习

    1.let和var类似, (1)let与var不同的点:let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域),在全局var声明的变量属于wind ...

  9. 不用外部插件启用u盘ntfs写功能

    mac下启用NTFS u盘读写功能. 不用要任何外部插件,其实mac本来就支持,只是因为专利原因隐藏了而已. macbook:~ uwe$ sudo umount /Volumes/UNTITLED ...

  10. FasterRunner在Centos7.6服务器部署

    前言: 测试工作,就是要保障软件产品质量,如何保障软件产品质量,是一个博大精深的问题.功能测试,性能测试,接口测试,安全测试等.而在现实的项目过程中,软件版本的快速迭代,给测试的时间会越来越少.特别是 ...