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节点上。
- 建立远程连接:使用SSH(比如Xshell、Putty等)工具,通过IP地址连接服务器后台,默认用户名root,默认port是22,密码为安装操作系统时设置的密码。
- 创建更新包目录:在/root目录下创建目录
mkdir -p ~/Upgradepackage/
- 上传Proton依赖包和ECeph依赖包:使用TFTP工具将预先下载到本地的依赖包上传到
~/Upgradepackage/
注:x86平台请上传x86的依赖包,ARM平台请上传ARM的依赖包。
第二步 安装依赖包
注意:仅以X86平台举例
进入Upgradepackage目录下解压依赖:
cd ~/Upgradepackage && tar zxf proton-*.tar.gz && tar zxf eceph-*.tar.gz
单节点安装依赖命令:
./install_deps.sh --with-eceph true
多节点安装依赖命令:
cd proton-packages && ./install_deps.sh --hosts {node1},{node2},{node3} --with-eceph-remote {node1},{node2},{node3}
参数说明:
- --hosts {node1},{node2},{node3} 参数为集群所有节点列表
- --with-eceph-remote {node1},{node2},{node3} 参数为安装ECeph的节点列表
- --with-eceph true 参数为执行节点是否需要安装ECeph依赖(值为true时即安装ECeph依赖,默认为false不安装)
- 用户名默认为root,端口默认为22
安装成功如图所示:
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/*
若上述命令没有返回,则无需关注。如果存在如上图的返回,则需要手动在集群所有的节点上删除这三个文件,执行命令:
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
执行命令,进行配置更新:
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}'
第二步 主集群上,设置主集群。
/opt/minotaur/tools/rgw_multisite_manager -f change_nosync_to_master --url http://<eceph-config-manager>:14322 --endpoints https://<当前集群内部VIP>:10002
若没有内部VIP,使用某个主机的内部IP即可。
第三步 重启主集群所有节点的radosgw服务
systemctl restart ceph-radosgw@radosgw.
hostname
3.2 创建从对象存储集群
第一步 目的集群,获取eceph-config-manager的容器IP。
kubectl get pods -o wide | grep proton-eceph-config-manager | awk '{print $6}'
第二步 创建从对象存储
/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
参数说明:
- 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管理界面可以看到主从集群对象数及容量情况。如果两者一致或者相近,可以用如下步骤确认是否同步完成。
第一步 查看同步状态
- 获取当前集群上eceph-config-manager的容器IP
kubectl get pods -o wide | grep proton-eceph-config-manager | awk '{print $6}'
- 获取当前集群同步状态信息
/opt/minotaur/tools/rgw_multisite_manager -f get_sync_info --url http://<eceph-config-manager>:14322
第二步 获取bucket同步状态信息
/opt/minotaur/tools/rgw_multisite_manager -f get_bucket_sync_info --url http://<eceph-config-manager>:14322
同步状态显示is caught up with source,则可认为同步完成。
第三步 对比数据状态
- 获取从集群的proton-eceph-node-agent pod名称
kubectl get pods -o wide | grep proton-eceph-node-agent | awk '{print $1}'
- 进入proton-eceph-node-agent pod
kubectl exec -it <proton-eceph-node-agent pod> bash
- 获取主从集群所有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、bucket内的对象数以及数据量,当主从集群bucket内的对象数和容量完全相等时,表示主从集群数据完全一致。若当前处于数据完全同步成功状态,但是主从集群内的bucket数据量不一致时,可以进一步使用下文的步骤4)定位主从集群间的差异对象。
- 对比主从集群某个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
该命令会分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
切换后,原来的主会自动降级为从,读写默认为读写,需要改为只读的话,需手动执行如下命令:
/opt/minotaur/tools/rgw_multisite_manager -f update_readonly --url http://<eceph-config-manager>:14322 --read_only
第二步 AnyShare存储地址更改
进入AnyShare部署控制台,在【环境与资源】-【对象存储】界面找到对应原存储信息,修改为新存储的IP,如有设置服务器内部IP,同时更新内部IP。