def run(self, master=None, encrypt=None, **kwargs): """ """ if not master: print "Hey, a master is required for slave." sys.exit(1) master_ip = master.split('@')[-1] db_version = self._get_master_db_version(master=master) data_dir = self._get_data_dir(db_version) config_dir = self._get_config_dir(db_version) psql_bin = os.path.join('/usr/lib/postgresql', '%s' %db_version, 'bin') slave = env.host_string slave_ip = slave.split('@')[1] sudo("apt-get -y install postgresql") sudo("apt-get -y install postgresql-contrib") sudo('service postgresql stop') self._setup_ssh_key() self._ssh_key_exchange(master, slave) with settings(host_string=master): master_internal_ip = run(utils.get_ip_command('eth0')) run('echo "select pg_start_backup(\'backup\', true)" | sudo su postgres -c \'psql\'') run('sudo su postgres -c "rsync -av --exclude postmaster.pid ' '--exclude server.crt --exclude server.key ' '--exclude pg_xlog %s/ postgres@%s:%s/"' % (data_dir, slave_ip, data_dir)) run('echo "select pg_stop_backup()" | sudo su postgres -c \'psql\'') self._setup_postgres_config(config_dir=config_dir, config=self.postgres_config) self._setup_archive_dir(data_dir) replicator_pass = self._get_replicator_pass() self._setup_recovery_conf(master_ip=master_internal_ip, password=replicator_pass, data_dir=data_dir, psql_bin_path=psql_bin_path) if not encrypt: encrypt = self.encrypt self._setup_hba_config(config_dir, encrypt) sudo('service postgresql start') print('password for replicator on master node is %s' % replicator_pass) log_dir = '/var/log/postgresql/postgresql-%s-main.log' %db_version log = run('tail -5 %s' %log_dir) if ('streaming replication successfully connected' in log and 'database system is ready to accept read only connections' in log): print "streaming replication set up is successful" else: print ("something unexpected occured. streaming replication is not" " successful. please check all configuration and fix it.")
def _update_config(self, config_section): added = False cons = env.config_object.get_list(config_section, env.config_object.CONNECTIONS) if not env.host_string in cons: added = True cons.append(env.host_string) env.config_object.set_list(config_section, env.config_object.CONNECTIONS, cons) ips = env.config_object.get_list(config_section, env.config_object.INTERNAL_IPS) internal_ip = run(utils.get_ip_command(None)) ips.append(internal_ip) env.config_object.set_list(config_section, env.config_object.INTERNAL_IPS, ips) return added
def run(self, master=None, encrypt=None, section=None, **kwargs): """ """ if not master: print "Hey, a master is required for slave." sys.exit(1) replicator_pass = self._get_replicator_pass() db_version = self._get_master_db_version(master=master) slave = env.host_string slave_ip = slave.split('@')[1] self._install_package(db_version=db_version) data_dir = self._get_data_dir(db_version) sudo('svcadm disable postgresql') self._setup_ssh_key() self._ssh_key_exchange(master, slave) with settings(host_string=master): master_ip = run(utils.get_ip_command(None)) # internal ip run('echo "select pg_start_backup(\'backup\', true)" | sudo su postgres -c \'psql\'') run('sudo su postgres -c "rsync -av --exclude postmaster.pid ' '--exclude pg_xlog %s/ postgres@%s:%s/"'%(data_dir, slave_ip, data_dir)) run('echo "select pg_stop_backup()" | sudo su postgres -c \'psql\'') self._setup_postgres_config(data_dir=data_dir, config=self.postgres_config) self._setup_archive_dir(data_dir) self._setup_recovery_conf(master_ip=master_ip, password=replicator_pass, data_dir=data_dir) if not encrypt: encrypt = self.encrypt self._setup_hba_config(data_dir, encrypt) sudo('svcadm enable postgresql') print('password for replicator on master node is %s' %replicator_pass)
def _update_config(self, config_section): if not env.host_string: print "env.host_string is None, please specify a host by -H " sys.exit(1) added = False cons = env.config_object.get_list(config_section, env.config_object.CONNECTIONS) if not env.host_string in cons: added = True cons.append(env.host_string) env.config_object.set_list(config_section, env.config_object.CONNECTIONS, cons) ips = env.config_object.get_list(config_section, env.config_object.INTERNAL_IPS) internal_ip = run(utils.get_ip_command('eth0')) ips.append(internal_ip) env.config_object.set_list(config_section, env.config_object.INTERNAL_IPS, ips) return added