def check_ha_controller(self, timeout=30): ha = action.HALinstorController() node_list = [node['hostname'] for node in self.conn.cluster['node']] t_beginning = time.time() while True: if ha.check_linstor_controller(node_list): break seconds_passed = time.time() - t_beginning if timeout and seconds_passed > timeout: print("Linstor controller status error") return False time.sleep(1) for ssh in self.conn.list_ssh: ha = action.HALinstorController(ssh) service = action.ServiceSet(ssh) if service.check_linstor_satellite() != 'enable': print('LINSTOR Satellite Service is not "enable".') return False if not ha.check_satellite_settings(): print("File linstor-satellite.service modification failed") return False return True
def build_ha_controller(self, sp): backup_path = self.conn.cluster['backup_path'] ha = action.HALinstorController() if not ha.linstor_is_conn(): print('LINSTOR connection refused') sys.exit() node_list = [node['hostname'] for node in self.conn.cluster['node']] if not ha.pool_is_exist(node_list, sp): print(f'storage-pool:{sp} does not exist') sys.exit() ha.create_rd('linstordb') ha.create_vd('linstordb', '250M') for node in self.conn.cluster['node']: ha.create_res('linstordb', node['hostname'], sp) for ssh in self.conn.list_ssh: ha = action.HALinstorController(ssh) if ha.is_active_controller(): ha.stop_controller() ha.backup_linstor(backup_path) # 要放置备份文件的路径(文件夹) ha.move_database(backup_path) ha.add_linstordb_to_pacemaker(len(self.conn.cluster['node'])) ha.modify_satellite_service() # linstor satellite systemd 配置
def destroy_linstordb(self): ha = action.HALinstorController() if not ha.linstor_is_conn(): print('LINSTOR connection refused') sys.exit() for ssh in self.conn.list_ssh: ha = action.HALinstorController(ssh) list_lv = ha.get_linstordb_lv() ha.umount_lv(list_lv) ha.secondary_drbd('linstordb') ha.delete_rd('linstordb') # 一般只需在一个节点上执行一次 ha.remove_lv(list_lv)
def backup_linstordb(self, timeout=30): linstordb_path = 'ls -l /var/lib/linstor' if self.conn.cluster['backup_path'].endswith('/'): backup_path = f"{self.conn.cluster['backup_path']}backup_{time.strftime('%Y%m%d%H%M')}" else: backup_path = f"{self.conn.cluster['backup_path']}/backup_{time.strftime('%Y%m%d%H%M')}" t_beginning = time.time() while True: for ssh in self.conn.list_ssh: ha = action.HALinstorController(ssh) if ha.is_active_controller(): if ha.check_linstor_file(linstordb_path): ha.backup_linstor(backup_path) if ha.check_linstor_file(f'{backup_path}/linstor'): return True seconds_passed = time.time() - t_beginning if timeout and seconds_passed > timeout: return False time.sleep(1)