SequoiaDB版本在线升级介绍说明
1.前言
在SequoiaDB数据库发展过程中,基本保持每半年对外发行一个正式的Release版本。并且每个新发布的Release版本相对老版本而言,性能方面都有很大的提高,并且数据库也会在新版本中加入很多新的功能,希望能够提高数据库开发的易用性。
在SequoiaDB发展过程中,越来越多的开发者了解到它,并且对它发生兴趣。现在已经有越来越多的用户在学习、研究SequoiaDB,并且也有越来越多的企业用户在对SequoiaDB经过充分测试后,决定将SequoiaDB部署在企业的生产环境中,利用SequoiaDB分布式存储的优势,对外提供高并发、低延时的数据操作服务。
在很多SequoiaDB的企业客户中,使用SequoiaDB数据库的生产系统都是企业内部比较重要的系统,必须支持24*7对外提供服务,所以即使在对数据库实施版本升级的同时,也必须要满足数据库服务不停机的技术要求。
本文通过SequoiaDB在线升级原理介绍与详细升级步骤说明,向广大SequoiaDB用户提供一个可操作的数据库在线升级方案文档,希望能够对即将给SequoiaDB做版本升级的用户提供帮助。
2.背景介绍
2.1 服务器资源介绍

2.2 操作系统及数据库软件版本

2.3 数据集群部署部署架构

3.版本升级兼容性说明

4.SequoiaDB支持在线升级原理说明
在Sequoiadb集群中,如果部署的环境为所有节点组都是3份数据冗余,那样用户就可以逐一对每台服务器上的数据库版本进行升级。
在线升级的方法如图示:

用户首先选择一台服务器,将其所有的Sequoiadb 进程停止,停止当前机器所有的数据库服务可以参考 sdbstop 命令的使用方式,然后直接使用新版本的数据库安装包覆盖安装老的版本。新版数据库安装完毕后,它会自动将本台机器的所有Sequoiadb 相关进程启动。一旦升级的数据库服务成功启动后,则代表此服务器完成了数据库版本升级。
用户可以通过相同的方式对其余几台服务器进行相同的操作,直至所有服务器都完成了版本升级,并且所有的数据库服务都已经成功启动。
5 SequoiaDB版本在线升级步骤
5.1 升级前环境信息收集
用户在开始SequoiaDB集群版本升级之前,应该先对SequoiaDB集群的基本情况有一个大概的了解,并且将数据库的信息收集起来。
检查SequoiaDB数据库的安装路径已经操作系统分配给数据库的系统用户,此步骤建议用户在所有部署了SequoiaDB服务的机器上执行
切换到root权限
su - root
查看SequoiaDB数据库的安装路径与操作系统分配的用户
cat /etc/default/sequoiadb
以作者的环境举例,打印的内容如下:
NAME=sdbcm SDBADMIN_USER=sdbadmin INSTALL_DIR=/opt/sequoiadb MD5=d60fdabd78e05f0ad482b938f1df1d72
通过/etc/default/sequoiadb文件,用户可以快速了解到SequoiaDB的基本情况
用户再通过sdb shell控制台,了解SequoiaDB数据库集群的部署情况
切换到sdbadmin用户
su - sdbadmin
进入sdb shell控制台
/opt/sequoiadb/bin/sdb
连接数据库Coord节点
> db = new Sdb("localhost", 11810)
查看SequoiaDB集群部署情况
> db.list(7)
以作者环境为例,打印内容为(由于篇幅太长,文档里做了省略):
{
"Group": [
{
"dbpath": "/opt/sequoiadb/database/catalog/11800",
"HostName": "sdb1",
"Service": [
{
"Type": 0,
"Name": "11800"
},
{
"Type": 1,
"Name": "11801"
},
{
"Type": 2,
"Name": "11802"
},
{
"Type": 3,
"Name": "11803"
}
],
"NodeID": 1
},
……
……
……
{
"HostName": "sdb3",
"dbpath": "/opt/sequoiadb/database/data/11930",
"Service": [
{
"Type": 0,
"Name": "11930"
},
{
"Type": 1,
"Name": "11931"
},
{
"Type": 2,
"Name": "11932"
}
],
"NodeID": 1008
}
],
"GroupID": 1002,
"GroupName": "group3",
"PrimaryNode": 1008,
"Role": 0,
"Status": 1,
"Version": 4,
"_id": {
"$oid": "580c1fc9a378cafcebe4e956"
}
}
用户从打印的信息中,基本可以了解到SequoiaDB共使用了多少台服务器,建立了多少个数据组,每个数据组又包含多少个节点,节点的数据存储路径和端口号分别是什么,用户都可以从db.list(7)命令中获取。
作者根据演示环境,整理信息如下:

5.2 数据库版本升级
升级步骤必须逐台服务器执行,不能够同时在所有服务器上执行升级数据库版本步骤。
作者以升级01服务器为例,详细记录一台服务器上升级SequoiaDB版本的步骤。
切换sdbadmin用户
su - sdbadmin
停止当前服务器的sdbcm服务
/opt/sequoiadb/bin/sdbcmtop
停止当前服务器所有的SequoiaDB服务
/opt/sequoiadb/bin/sdbstop /opt/sequoiadb/bin/sdbstop -p 11780
检查当前服务器是否所有SequoiaDB服务器停止
/opt/sequoiadb/bin/sdblist -t all -m run
如果还有SequoiaDB服务在运行,执行sdblist命令会在屏幕上打印SequoiaDB正在运行的服务信息,例如
sdbom(11780) (31966) Total: 1
确认所有的SequoiaDB均停止后,开始对当前服务器升级SequoiaDB版本
切换root权限
su - root
为SequoiaDB执行软件赋予可执行权限
chmod a+x /opt/sequoiadb-2.6-linux_x86_64-enterprise-installer.run
执行SequoiaDB新版本安装命令
/opt/sequoiadb-2.6-linux_x86_64-enterprise-installer.run
让用户选择安装时的语言,这里选择1,英文
Please select the installation language [1] English - English [2] Simplified Chinese - 简体中文 Please choose an option [1] : 1
然后出来一堆license的内容,让用户选择直接忽略选择1,如果希望了解详情选择2查看
License Agreement for Evaluation of Programs [1] Agree The License: For More License's Detail, Please Check The License File After Installation [2] Read The License Please choose an option [1] : 1
让用户选择是否同意本license,这里选择y(YES)
Do you accept this license? [y/n]: y
软件检测到本机器已经安装了SequoiaDB,让用户选择是否升级版本,这里选择Y(YES)
An existing installation has been detected in /opt/sequoiadb. Change to upgrade mode? [Y/n]: y
安装软件已经准备就绪了,是否继续安装,这里选择Y(YES)
Setup is now ready to begin installing SequoiaDB Server on your computer. Do you want to continue? [Y/n]: Y
然后软件就开始正式安装,会出现以下的内容
Please wait while Setup installs SequoiaDB Server on your computer. Installing 0% ______________ 50% ______________ 100% Begin to upgrade package ...... ************************** check list ************************************* Check: configure file /etc/default/sequoiadb is exists ...... ok Check: get install directory and user in /etc/default/sequoiadb ...... ok Check: install dir /opt/sequoiadb is not empty ...... ok Check: compatibility between version 1.12.5 Enterprise and 2.6 Enterprise ...... ok Check: disk space is enough ...... ok Check: user sdbadmin is exist, and get group ...... ok Check: relevant processes are stoped ...... ok #########################################
只要屏幕上出现以下信息,则证明SequoiaDB软件版本升级已经成功了
Setup has finished installing SequoiaDB Server on your computer.
5.3 SequoiaDB版本升级后检查
在SequoiaDB版本升级后,sdbcm会自动将当前机器的所有SequoiaDB服务启动,用户可以通过sdblist命令查看确认。用户在执行命令前,作者建议用户还是首先切换系统用户
su - sdbadmin
查看SequoiaDB数据库服务启动情况。
/opt/sequoiadb/bin/sdblist -t all -m local
例如作者的环境,打印的内容为:
sequoiadb(11920) (12808) D sequoiadb(11930) (12811) D sdbom(11780) (12792) sequoiadb(11910) (12812) D sequoiadb(11810) (12805) S sequoiadb(11800) (12780) C sdbcm(11790) (12770) sdbcmd (12768) Total: 8
如果有存在一些节点没有正常启动,会打印如下信息
sequoiadb(11920) (12808) D sequoiadb(11930) (12811) D sdbom(11780) (12792) sequoiadb(11910) (12812) D sequoiadb(11810) (-) S sequoiadb(11800) (12780) C sdbcm(11790) (12770) sdbcmd (12768) Total: 8
显示sequoiadb(11810) (-) S 则说明这个节点是存在于本服务器的,但是该节点并没有启动。
SequoiaDB版本升级后,虽然所有的进程都已经启动,但是用户还需要确认启动的节点已经恢复正常,并且能够正常提供服务。
用户在检查节点是否恢复正常时,只要检查编目节点和数据节点的状态,也就是
sequoiadb(11920) (12808) D sequoiadb(11930) (12811) D sequoiadb(11910) (12812) D sequoiadb(11800) (12780) C
用户进入SequoiaDB Shell
/opt/sequoiadb/bin/sdb
挑选其中一个节点,进行连接检查
> var db = new Sdb("localhost", 11910);
> db.snapshot(6, {}, {"ServiceStatus":null});
> db.close();
只要snapshot(6)打印的内容{"ServiceStatus": true} 等于true,则代表此节点服务已经恢复正常,处于正常运行状态,如果为false,则代表此节点状态还没有恢复,通常情况下,ServiceStatus=false,为节点处于全量同步状态。
重复此动作,检查其余的localhost:11920、localhost:11930、localhost:11800节点状态是否正常。如果有节点状态不正常,就需要耐心等待节点完成数据检查或者数据同步,直至节点状态恢复正常,当前服务器的SequoiaDB版本升级才算结束。
> var db = new Sdb("localhost", 11920);
> db.snapshot(6, {}, {"ServiceStatus":null});
> db.close();
> var db = new Sdb("localhost", 11920);
> db.snapshot(6, {}, {"ServiceStatus":null});
> db.close();
> var db = new Sdb("localhost", 11800);
> db.snapshot(6, {}, {"ServiceStatus":null});
> db.close();
当用户完成当前服务器的SequoiaDB版本升级,则可以在两外一台服务器上执行相同命令,开始SequoiaDB版本升级,直至数据库集群所有的服务器数据库版本升级完毕。
6 总结
由于SequoiaDB集群部署时,是通过3台服务器互相做数据冗余,从而保证整个数据库集群的数据安全性,并且每台服务器的数据库进程都相互独立,中间没有任何的数据依赖。用户在对数据库版本进行升级时,可以利用这数据冗余3份的特点,通过对整个数据库集群做滚动升级的方式,逐一对各台服务器上的SequoiaDB数据库版本做升级操作,从而完成所有服务器的数据库版本升级。
SequoiaDB版本在线升级介绍说明的更多相关文章
- H5+ 重写在线升级版本比较代码
重写h5+在线升级版本比较代码 hello h5+版本在线升级提供了如下的版本比较方法,逻辑比较繁琐,相关判断多余,非常不宜读. 先判断新旧版本有无, 接着分割为数组比较数组项大小,而且还只取了前四项 ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- 【Remoting】.Net remoting方法实现简单的在线升级(上篇:更新文件)
一.前言: 最近做一个简单的在线升级Demo,使用了微软较早的.Net Remoting技术来练手. 简单的思路就是在服务器配置一个Remoting对象,然后在客户端来执行Remoting ...
- 利用mtd工具实现嵌入式设备在线升级
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 主要思路是:通过web post方式将升级文件交给CGI程序处理,然后通过mtd工具实现设备在线升级. 1.页面部分 & ...
- 自学Linux Shell9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级
点击返回 自学Linux命令行与Shell脚本之路 9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级 本节主要介绍基于Red Had的系统(测试系统centos) yum ...
- C#做的在线升级小程序
转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...
- Encrypted bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Android apk在线升级
APK 在线升级 APK 在线升级几乎是所有程序必备的功能. 在线升级功能能解决已有的问题并提供更丰富的新功能. 基本的流程是: 检测到新版本信息 弹出升级提示窗口 点击 No 不进行升级,完毕! 点 ...
随机推荐
- Python—课时ONE
说实话第一次接触Python还是在我刚上班的时候,听说很多人这个开发语言很吊,应用的领域很多.but这些东西还不能够吸引我,真正的原因是因为这个开发语言很是简单,比较适合我这种2B学的.但是越往后越觉 ...
- 响应式web-媒体查询
响应式web-媒体查询 媒体查询是一个将很多响应式概念和工具连接在一起的粘合剂.这些查询语句都是简单但是功能很强大的,它们允许我们检测设备属性,定义规则,并根据规则等的不同加载不同的 CSS 属性.例 ...
- 使用faker 生成中文测试数据
https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/zh_CN/Address.php 常用的类型都在里面. 下面是一 ...
- HTTP权威指南-HTTP概述
1.web服务器(HTTP服务器)使用的是HTTP协议,存储了因特网中的数据,当客户端发出请求时,服务器提供相应的数据.HTTP客户端和HTTP服务器共同构成了万维网的基本组件. 2.资源:Web服务 ...
- Lesser known purrr tricks
purrr is package that extends R's functional programming capabilities. It brings a lot of new stuff ...
- javascript基础-事件1
原理 事件分两种.第一种浏览器事件,由浏览器抛出事件,它是人机交互的基础:第二种自定义事件,由程序员抛出事件,它是模拟事件流程.两者都是为了完成数据的传递. 浏览器事件 机制 冒泡和捕获两种机制.因I ...
- unittest模块的常用方法:
unittest模块的常用方法: assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool ...
- HTML输入框只能输入数字或数字字母组合
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...
- JavaSE教程-04Java中循环语句for,while,do···while-练习2
1.编写一个剪子石头布对战小程序 该法是穷举法:将所有情况列出来 import java.util.*; public class Game{ public static void main(Stri ...
- cef3和duilib简单仿有道词典学习
由于最近换工作的原因,也没啥事,就简单学习了一下cef3和duilib,楼主之前是做MFC框架下的windows开发的,对界面库和新的客户端开发模式也有所了解,现在的大部分客户端都是基本的客户端框架下 ...