Shared data based xCAT MN HA mini design - xcat2/xcat-core GitHub Wiki
Use xcatha-setup
and xcatha-failover
to automate most functions in user case.
xcatha-setup: We have xcat-automation using ansible to install xCAT now. In setup and configure HA mn part, add xcatha-setup script to fill in the gaps, the xcatha-setup can run standalone, and xcat-automation can integrate it easily. In the future, we can use xcat-automation to setup and configure HA MN nodes.
xcatha-failover: realize activate|deactivate HA MN.
-
xcatha-setup -p <shared-data directory path> -i <nic> -v <virtual ip> [-m <netmask>] [-n <hostname>] [-t <database type>]
-
activate MN:
xcatha-failover -a|--activate -p <shared-data directory path> -i <nic> -v <virtual ip> [-m <netmask>] [-t <database type>]
-
deactivate MN:
xcatha-failover -d|--deactivate -i <nic> -v <virtual ip>
-
xcatha-setup
setup and configure HA mn work flow:- check virtual ip, make sure virtual ip is not used (ping), or else, exit with error message
- check if there is xcat data in shared data directories, and check if DB type in shared data directory is different from target type from input , if they are different, exit and print error
- add virtual ip into its nic
- set hostname for virtual ip
- check xCAT installed or not:
- if xcat is not installed, install xCAT;
- if xcat is installed, skip this step
- if current xcat DB type (lsxcatd -d) is different from target type, switch DB to target type
- check if the site table master and nameservers and network tftpserver attribute are the Virtual ip, if not, correct them -----This is another story refer to doc Changing the hostname/IP address
- check if there is xcat data in shared data directories:
- if no xcat data in shared data, and shared data directory permission is proper, create xcat data structure under shared data directory, copy xcat data into shared data directories, take
/install
directory as an example:mkdir /HA-data/install cp -r /install /HA-data/install
- create symbolic link to share data directories
- if no xcat data in shared data, and shared data directory permission is proper, create xcat data structure under shared data directory, copy xcat data into shared data directories, take
- check xcat service work well, if not, exit and print error
- add the MN including VIP hostname and local IP hostname into policy table
- xcatha-failover deactivate this MN node
-
xcatha-failover -a|--activate
- check virtual ip, make sure virtual ip is not used (ping), or else, exit
- add virtual ip into its nic
- set hostname to virtual ip
- check if current DB type is matched, if not, exit and clean up env
- make symbolic link to share data directories, for example:
/install -> /HA-data/install /etc/xcat ->/HA-data/etc/xcat /root/.xcat -> /HA-data/root/.xcat /var/lib/pgsql -> /HA-data/var/lib/pgsql /tftpboot -> /HA-data/tftpboot
- start/re-configure all related services as followings, make sure all related services are configured stop from starting on reboot :
- database (mysql/postgresql/sqlite type)
- xcatd
- named service (makedns -n)
- DHCP service (makedhcp -n, makedhcp -a)
- Console Server
- ... ...
-
xcatha-failover -d|--deactivate
- make sure all related services as followings are down, make sure all related services are configured stop from starting on reboot
- console service
- DHCP service
- named service
- xcatd
- database (mysql/postgresql/sqlite type)
- umount/un-link shared data directories on host1
- change hostname if needed
- remove virtual IP
- make sure all related services as followings are down, make sure all related services are configured stop from starting on reboot
vip_check:
- check if vip is used or not, (can use ping), if it is used, print error and exit 1.
configure_vip:
- configure virtual ip as non-persistent alias IP address, it is no need to write ifcfg_* files.
- add the alias ip address into the /etc/resolv.conf as the nameserver
change_hostname:
- change the hostname resolution order to be using /etc/hosts before using name server
- add the specific ip address and its hostname into /etc/hosts
- change hostname to the hostname that resolves to the specific ip address
unconfigure_vip: remove virtual ip, call change_hostname to original hostname
check_xcat_attribute: check attribute value is the virtual ip (master and nameservers in site table, tftpserver in networks table)
execute_command: start|stop service, if success, return [Passed], or else , retry, after retry 3 times and get failed , return [Failed]
configure_shared_data:
- check if xcat data is in shared data directory or not,
if not:
- check shared data directory permission
- create xcat data structure in shared data directory
- copy xcat data into shared data directories
- create symbolic link to share data directories
unconfigure_shared_data: unlink shared data directories
clean_up_env: if some service is failed, call unconfig_vip, call change_hostname, to restore original hostname
log_info(self, message)
runcmd(self, cmd)
configure_xcat_attribute(self, host, ip)
current_database_type(self, path)
get_physical_ip(self, nic)
check_database_type(self, dbtype, vip, nic)
check_xcat_exist_in_shared_data(self, path)
check_shared_data_db_type(self, tdbtype, path)
switch_database(self, dbtype, vip, physical_ip)
install_db_package(self, dbtype)
install_xcat(self, url)
find_line(self, filename, keyword)
change_hostname(self, host, ip)
unconfigure_vip(self, vip, nic)
check_service_status(self, service_name)
finditem(self, n, server)
change_xcat_policy_attribute(self, nic, vip)
copy_files(self, sourceDir, targetDir)
configure_shared_data(self, path, sharedfs)
clean_env(self, vip, nic, host)
deactivate_management_node(self, nic, vip, dbtype)
xcatha_setup_mn(self, args)
parser_arguments()