白屏: 集群、Zone、Observer 常用运维操作
常用运维操作
运维场景 | 步骤 |
时钟同步 | OceanBase从Partition的多个副本中选出主对外提供服务。为避免Paxos的活锁问题,OceanBase 采用一种基于时钟的选举算法选主 检查 NTP 状态:运行 ntpstat 检查 NTP 服务器状态。如果结果为 synchronised to NTP server,则可以认定 NTP 的配置处于同步状态 检查 NTP 的偏移量:多次执行 ntpq -p|grep -E “\*|\=|remote“ 命令,确保可以看到稳定的 offset。若 offset 值小于 50ms 则为时钟同步正常 |
内存不足 | OB是准内存数据库,任何写操作都需要消耗内存资源,只有合并和转储操作能够释放内存资源,所以当合并和转储速度长时间低于内存消耗速度时,内存最终将被耗尽,服务能力跌零调大租户内存 转储 / 合并 |
外存(磁盘)不足 | 运行日志盘满:可清空较老的日志clog盘满:查询表__all_virtual_server_clog_stat,清除较老的日志,再合并数据文件满:扩容,或将较老的数据迁移到历史库,再合并 |
黑屏:集群运维管理
在集群中启动或停止Zone的操作通常用于允许或禁止Zone内的所有物理服务器对外提供服务的需求场景
启动或停止Zone:
alter system start zone zone1;
alter system stop zone zone1;
修改Zone信息
ALTER SYSTEM {ALTER|CHANGE|MODIFY} ZONE [Zone_Name] SET [Zone_Option_List];
Zone_option_list : region, IDC, Zone_type (READONLY, READWRITE)
查看Zone的状态
Select * from __all_zone;
黑屏:Observer运维管理
查看OBServer的信息:
select * from __all_server;
select * from __all_server_event_history;
管理OBServer状态: 进程启动后,对OBServer的管理类似对Zone的管理
Start Server操作:
ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'…] [ZONE='zone'];
示例:alter system start server '192.168.100.1:2882';
Start Server操作:
ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'…] [ZONE='zone'];
示例:alter system start server '192.168.100.1:2882';
Stop Server操作:
ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'…] [ZONE='zone'];
示例:alter system stop server '192.168.100.1:2882' zone='z1';
黑屏:Observer服务管理(进程)
查看OBServer进程:登录OceanBase Server所在的宿主机
ps -ef |grep observer
启动OBServer进程:登录 OceanBase Server主机
cd /home/admin/oceanbase/
./bin/observer [启动参数]
./bin/observer --help 查看 OBServer 启动参数的详细信息
停止 OBServer 进程:
kill -15 `pgrep observer`
kill -9 `pgrep observer`
黑屏:Observer服务启动恢复
由于增删改数据在内存中,进程启动后:
需要与其他副本同步,将clog或者ssd基线数据进行同步(补齐)
需要将上一次合并之后的内存数据恢复出来(clog回放),才能提供服务
注意事项:
停机时间短(分钟或者小时级别),一般只追齐clog
停机时间长(天级别),clog落后太多,会直接追齐ssd基线数据,然后补齐合并版本后的clog
这一过程结束后,该OBServer才能对外提供服务,可以查询__all_server 表的start service time字段来判断OBServer是否对外提供服务
可以在停止OBServer服务前执行转储(alter system minor freeze;),以加快 OBServer 服务恢复过程
黑屏:服务停止(停机运维)
机器需要运维操作时,需要停止OceanBase服务进程:
1. 系统租户登陆,确定运维时长,如果大于1小时但小于1天,为了避免服务恢复后的补副本操作,需要设置永久下线时间 (alter system set server_permanent_offline_time = '86400s’;)
2. 将服务从当前 OBServer 切走,保证停服务的时候,对于业务没有影响(alter system stop server'ip地址:2882';)内含切主动作
3.检查主副本都切走(select count(*) from __all_virtual_table t, __all_virtual_meta_table m where t.table_id=m.table_id and role=1 and m.svr_ip='ip地址' ; ),返回值应为0
4. 停止进程 kill -15 <observer pid>
黑屏:服务恢复(停机运维结束)
机器需要运维操作结束后,需要恢复OceanBase服务进程:
- 机器上电
- 检查该机器ntp同步状态和服务运行情况
- admin用户启动OBServer进程
- 系统租户登陆,启动server(alter system start server ‘ip地址:2882’;)
- 检查__all_server表,查看status为‘active’且‘start_service_time’的值>0,则表示OBServer正常启动并开始提供服务
- 将永久下线时间改回默认值3600s( alter system set server_permanent_offline_time = '3600s’;)
黑屏:故障节点替换
首先要确保集群中有足够的冗余资源(OBServer),可以代替故障节点进行工作:
1.系统租户登陆,stop server,确保主副本都切走
2. 为目标zone添加新的server(alter system add server 'ip地址:2882' ZONE 'zone1'; )
3. 将故障server下线(alter system delete server 'ip地址:2882' ZONE 'zone1'; ),OB 会自动将被下线OBServer的 Unit 迁移至新添加的 OBServer 上
4. 检查__all_server表检查server状态,旧 OBServer 的信息已经消失