Exemplo n.º 1
0
    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.")
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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