更新时间:2025-01-26 10:10:03

1 ECeph更新说明

ECeph对象存储基于开源Ceph版本研发,ECeph 7.0.0-ECeph 7.1x.0版本基于Ceph L版本,后端存储使用filestore,ECeph 7.31.0版本开始基于Ceph P版本,后端存储使用bluestore。Ceph大版本之间不能直接升级, ECeph 7.0.0-ECeph 7.1x.0可以直接更新,升级到ECeph 7.31.0版本,需要采用异机(集群同步)升级方式。

ECeph版本 Ceph版本 后端存储类型 更新说明
ECeph 7.0.0 – Eceph 7.1x.0 L版本(12.2.12) Filestore L版本小版本间可以直接更新
L版本升级到P版本,采用集群同步的方式升级。
ECeph 7.31.0 - P版本(16.2.15) Bluestore P版本小版本间可以直接更新

2 相同Ceph版本的ECeph版本更新

2.1 安装依赖

第一步 上传依赖包

本次安装所涉及的更新包只需要上传到任一master节点上。

  1. 建立远程连接:使用SSH(比如Xshell、Putty等)工具,通过IP地址连接服务器后台,默认用户名root,默认port是22,密码为安装操作系统时设置的密码。
  2. 创建更新包目录:在/root目录下创建目录 mkdir -p ~/Upgradepackage/
  3. 上传Proton依赖包和ECeph依赖包:使用TFTP工具将预先下载到本地的依赖包上传到 ~/Upgradepackage/

注:x86平台请上传x86的依赖包,ARM平台请上传ARM的依赖包。

第二步 安装依赖包

注意:仅以X86平台举例

进入Upgradepackage目录下解压依赖:

cd ~/Upgradepackage && tar zxf proton-*.tar.gz && tar zxf eceph-*.tar.gz

解压依赖包示例.png

单节点安装依赖命令:

./install_deps.sh --with-eceph true

多节点安装依赖命令:

cd proton-packages && ./install_deps.sh --hosts {node1},{node2},{node3} --with-eceph-remote {node1},{node2},{node3}

参数说明:

  1. --hosts {node1},{node2},{node3} 参数为集群所有节点列表
  2. --with-eceph-remote {node1},{node2},{node3} 参数为安装ECeph的节点列表
  3. --with-eceph true 参数为执行节点是否需要安装ECeph依赖(值为true时即安装ECeph依赖,默认为false不安装)
  4. 用户名默认为root,端口默认为22

执行安装依赖示例.png

安装成功如图所示:

安装eceph依赖成功示例.png

2.2 7.13.0及之前版本更新到7.16.1版本

说明:仅独立部署ECeph时操作,和AnyShare融合部署时,参考AnyShare更新手册操作

第一步 导出数据库数据

说明:仅使用自配置的rds数据库时,需要执行。若为非自部署的数据库(如与AS融合部署时的Mariadb或者第三方的TiDB/达梦数据库),不需要执行。

kubectl exec rds-proton-rds-mariadb-0 -c mariadb -- mysqldump -uroot -pxxxx minotaur > minotaur.sql

第二步 重置集群
执行命令:

kubesuite reset ip1 ip2 ip3 (ip1 ip2 ip3为eceph集群所有的节点IP)

第三步 nginx配置删除
执行命令:

grep listen /usr/local/slb-nginx/conf.d/stream/*

nginx配置查看.png

若上述命令没有返回,则无需关注。如果存在如上图的返回,则需要手动在集群所有的节点上删除这三个文件,执行命令:

rm -rf /usr/local/slb-nginx/conf.d/stream/apiserver.conf /usr/local/slb-nginx/conf.d/stream/chart.conf /usr/local/slb-nginx/conf.d/stream/registry.conf

删除完成之后,需要在集群所有的节点上执行命令重新slb-nginx服务:

systemctl restart slb-nginx

第四步 keepalived配置删除

在含有/etc/keepalived/keepalived.conf文件的节点上,执行命令备份文件(更新操作完成之后,可删除备份文件):

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

然后执行命令把keepalived.conf文件清空:

echo -n > /etc/keepalived/keepalived.conf

执行命令重启:

systemctl restart keepalived

第五步 执行K8S集群部署
参考 安装操作-私有云场景-对象存储服务ECeph安装指导 的第3章节进行K8S集群初始化。注意,不要操作第4章节中的ECeph集群初始化。

第六步 导入数据库数据
将之前备份的mysql导入新安装的数据库。

说明:仅使用自配置的rds数据库时,需要执行。若为非自部署的数据库(如与AS融合部署时的Mariadb或者第三方的TiDB/达梦数据库),不需要执行。

将备份的sql文件拷贝到mariadb容器中。

kubectl cp minotaur.sql mariadb-mariadb-0:/ -c mariadb -n resource

导入数据:

kubectl exec -it mariadb-mariadb-0 bash -n resource

mysql -uroot -pxxxx minotaur < minotaur.sql

重启proton-eceph-config-manager服务:

kubectl get pod |grep proton-eceph-config-manager|awk '{print $1}'| xargs kubectl delete pod

2.3 7.14.0及之后版本更新到7.16.1版本

注意:需要在新版本依赖包的解压目录下执行更新配置操作,以下操作均在解压后的依赖包路径下执行

在任意一master节点上,执行命令,获取配置文件(自定义命名空间默认为anyshare):

proton-cli get conf -n 自定义命名空间 > upgrade_conf.yaml

默认命名空间获取配置文件 示例.png

自定义命名空间获取配置文件 示例.png

执行命令,进行配置更新:

proton-cli apply -f upgrade_conf.yaml

2.4 7.31.0版本更新到7.32.0版本

操作步骤同2.3章节

3 Proton-ECeph 7.1x版本升级到Proton-ECeph 7.30.0

Ceph跨版本升级(L -> P),使用集群同步的方式升级。以下示例中的升级环境信息:

项目 源集群 目的集群
节点IP 192.168.224.37 192.168.224.38
内部IP 192.168.231.25 192.168.231.26

3.1 安装7.30.0版本集群

第一步 按照已有的Proton-ECeph 7.1x版本集群配置,准备目的集群环境。

  • 源集群和目的集群要保证一样的节点数。
  • 源集群和目的集群的内部IP能通。使用内部IP进行数据同步,可以避免同步带来的流量压力影响到业务性能。

第二步 按照 安装操作-私有云场景-对象存储服务ECeph安装指导 部署7.32.0版本ECeph集群即可。注意,操作到添加保护域即可,不要设置对象存储。

3.2 将源ECeph集群设置为主集群

第一步 主集群上,获取eceph-config-manager的容器IP。

kubectl get pods -o wide | grep proton-eceph-config-manager | awk '{print $6}'

获取容器IP.png

第二步 主集群上,设置主集群。

/opt/minotaur/tools/rgw_multisite_manager -f change_nosync_to_master --url http://<eceph-config-manager>:14322 --endpoints https://<当前集群内部VIP>:10002

若没有内部VIP,使用某个主机的内部IP即可。

设置主集群.png

第三步 重启主集群所有节点的radosgw服务

systemctl restart ceph-radosgw@radosgw.hostname

重启rgw服务.png

3.2 创建从对象存储集群

第一步 目的集群,获取eceph-config-manager的容器IP。

kubectl get pods -o wide | grep proton-eceph-config-manager | awk '{print $6}'

获取容器IP-2.png

第二步 创建从对象存储

/opt/minotaur/tools/rgw_multisite_manager -f create_object_storage --url http://<eceph-config-manager>:14322 --zone_name <从对象存储集群站点名> --storagegroup_name <从对象存储集群保护域名> --endpoints https://<从对象存储内部集群VIP>:10002 --zonegroup_name <主对象存储集群站点名> --master_url https://<主对象存储集群内部VIP>:10002 --read_only

创建从集群.png

参数说明:

  • eceph-config-manager为第1步获取的容器IP。
  • zone_name为自取的对象存储集群名字,只能包含字母、数字、下划线,长度1-32位。
  • endpoints可以使用http://<集群内部VIP>:10001,也可以使用https://<集群内部VIP>:10002,该端口用于主从集群通信,与master_url联合使用。基于安全考虑,建议采用https端口。没有内部VIP地址的话,可以使用节点内部IP。
  • 保护域名可以在Web界面上查看:【系统管理】-【保护域】。
  • 设置从对象存储集群为只读模式需加--read_only参数,不加则为读写模式。

3.4 等待数据同步完成

从8003管理界面可以看到主从集群对象数及容量情况。如果两者一致或者相近,可以用如下步骤确认是否同步完成。

第一步 查看同步状态

  1. 获取当前集群上eceph-config-manager的容器IP

kubectl get pods -o wide | grep proton-eceph-config-manager | awk '{print $6}'

  1. 获取当前集群同步状态信息

/opt/minotaur/tools/rgw_multisite_manager -f get_sync_info --url http://<eceph-config-manager>:14322

集群同步信息查看.png

第二步 获取bucket同步状态信息

/opt/minotaur/tools/rgw_multisite_manager -f get_bucket_sync_info --url http://<eceph-config-manager>:14322

bucket同步信息查看.png

同步状态显示is caught up with source,则可认为同步完成。

第三步 对比数据状态

  1. 获取从集群的proton-eceph-node-agent pod名称

kubectl get pods -o wide | grep proton-eceph-node-agent | awk '{print $1}'

  1. 进入proton-eceph-node-agent pod

kubectl exec -it <proton-eceph-node-agent pod> bash

  1. 获取主从集群所有bucket的对象数及数据量

python3 /opt/minotaur/ECephNodeAgent/tools/rgw_multisite_sync_tool.py -f compare_bucket_stats --url http://<主对象存储集群VIP >:10001 --remote-url http://<从对象存储集群VIP>:10001

说明:如果该脚本不存在,可联系爱数技术支持获取。

返回如下:

bucket信息对比.png

该命令会分别输出主从集群的bucket、bucket内的对象数以及数据量,当主从集群bucket内的对象数和容量完全相等时,表示主从集群数据完全一致。若当前处于数据完全同步成功状态,但是主从集群内的bucket数据量不一致时,可以进一步使用下文的步骤4)定位主从集群间的差异对象。

  1. 对比主从集群某个bucket内的对象信息

python3 /opt/minotaur/ECephNodeAgent/tools/rgw_multisite_sync_tool.py -f compare_bucket_objects --url http://<主对象存储集群VIP >:10001 --remote-url http://<从对象存储集群VIP>:10001 --bucket_name bucket_37

bucket信息详细对比.png

该命令会分shard列举bucket内的对象,对比主从集群各shard的objects,并输出只在主站点或者只在从集群的对象名。在同步进行的过程中,不建议使用该命令进行主从集群bucket内的对象对比,此时去对比也没有意义。只有当主从集群同步状态查询结果包含data is caught up with source,数据目前是同步成功状态,且主从集群该bucket内数据不一致时才建议使用该功能。

注意:若单个bucket内对象过多,该命令耗时会比较久。

3.5 存储切换

第一步 存储主从切换

在从对象存储集群上执行切换命令

/opt/minotaur/tools/rgw_multisite_manager -f change_slave_zone_to_master --url http://<eceph-config-manager>:14322

存储主从切换.png

切换后,原来的主会自动降级为从,读写默认为读写,需要改为只读的话,需手动执行如下命令:

/opt/minotaur/tools/rgw_multisite_manager -f update_readonly --url http://<eceph-config-manager>:14322 --read_only

设置只读.png

第二步 AnyShare存储地址更改

进入AnyShare部署控制台,在【环境与资源】-【对象存储】界面找到对应原存储信息,修改为新存储的IP,如有设置服务器内部IP,同时更新内部IP。

AnyShare存储地址修改.png