分享一个用fabric远程扩容datanode的另一种方式,主要体现在利用Put方法能够远程上传文件到目标机器并且可以指定目标机密码,不需要先前拷贝好秘钥:代码如下idc_server_init_datanode.py
脚本运行方式:
fab -f idc_server_init_datanode.py do_work:datanode_ip=192.168.110.4,hostname=hd1 -p password
from fabric.api import run, local, env, roles,put
import os
import sys
import getopt
env.user=”root”
salt_master_hostname = “gdataidcmonitor”
salt_master_ip = “192.210.3.241”
install_package_hostname = “gdataidcmonitor”
install_package_ip = “192.210.3.241”
def master():
print “+++ idc server init start +++”
put(‘/data/file_dispatch*’,’/root/’,use_sudo=True)
def datanode(local_ip, hostname):
print “start modify dns info”
run(‘echo #DNS for GCS START > /etc/resolv.conf’)
run(‘echo nameserver 192.242.1.212 >> /etc/resolv.conf’)
run(‘echo nameserver 192.107.24.201 >> /etc/resolv.conf’)
run(‘echo options timeout:1 >> /etc/resolv.conf’)
run(‘echo #DNS for GCS END >> /etc/resolv.conf’)
print "modify /etc/sysconfig/network file..."
run('echo NETWORKING = yes > /etc/sysconfig/network')
run('echo HOSTNAME = %s >> /etc/sysconfig/network' % hostname)
print "modify /etc/hostname file..."
run("echo %s > /etc/hostname"%hostname)
print "modify /etc/hosts file..."
run('echo 127.0.0.1 localhost > /etc/hosts')
run('echo 192.240.99.238 tlinux-mirrorlist.tencent-cloud.com tlinux-mirror.tencent-cloud.com >> /etc/hosts')
run('echo 192.168.134.78 tlinux-mirrorlist.tencent-cloud.com tlinux-mirror.tencent-cloud.com >> /etc/hosts')
run('echo 192.12.216.232 tlinux-mirrorlist.tencent-cloud.com tlinux-mirror.tencent-cloud.com >> /etc/hosts')
run('echo 192.236.51.188 gdataidchadoop1 >> /etc/hosts')
run('echo 192.236.48.217 gdataidchadoop2 >> /etc/hosts')
run('echo 192.205.191.241 gdataidczookeeper1 >> /etc/hosts')
run('echo 192.205.191.242 gdataidczookeeper2 >> /etc/hosts')
run('echo 192.205.191.243 gdataidczookeeper3 >> /etc/hosts')
run('echo %s %s >> /etc/hosts'%(salt_master_ip,salt_master_hostname))
run('echo %s %s >> /etc/hosts'%(install_package_ip,install_package_hostname))
run('echo %s %s >> /etc/hosts'%(local_ip,hostname))
print "modify hostname..."
run('hostname %s'%hostname)
print "rm /data dir"
run('rm -rf /data ')
print "make data ln to data1"
run('mkdir -p /data1/data')
run('ln -s /data1/data /data')
print "add gdata user"
run('useradd -d /data/gdata -g users -m gdata')
run('echo "Gdata#2015" | passwd --stdin gdata ')
run('mkdir /data/gdata/.ssh')
run('/bin/cp -f /root/file_dispatch/gdata/sshkey/authorized_keys /data/gdata/.ssh/')
run('chown -R gdata:users /data/gdata/.ssh')
run('cp /root/file_dispatch/gdata/yum/RPM-GPG-KEY-EPEL-6 /etc/pki/rpm-gpg/')
run('cp /root/file_dispatch/gdata/yum/epel.repo /etc/yum.repos.d/')
print "start yum install deps"
run('yum install -y nagios-plugins nagios-plugins-nrpe nrpe nagios-plugins-all ganglia-gmond lrzsz salt-minion')
print "start install software"
print "start gmond"
run('mv /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.bak')
run('cp /root/file_dispatch/gdata/ganglia/gmond.conf /etc/ganglia/gmond.conf')
run('sed -i "s/HOSTNAME/${hostname}/g" /etc/ganglia/gmond.conf')
run('service gmond start')
run('chkconfig gmond on')
print "start salt client"
run("sed -i 's/#master: salt/master: gdataidcmonitor/g' /etc/salt/minion")
run('service salt-minion start')
run('chkconfig salt-minion on')
print "start install java"
run('tar zxvf /root/file_dispatch/install_packages/jdk-8u131-linux-x64.tar.gz -C /usr/local/')
run('echo export JAVA_HOME=/usr/local/jdk1.8.0_60>>/etc/profile')
run('echo export JAVA_BIN=/usr/local/jdk1.8.0_60/bin>>/etc/profile')
run('echo export JRE_HOME=/usr/local/jdk1.8.0_60/jre>>/etc/profile')
run('echo export CLASSPATH=.:/usr/local/jdk1.8.0_60/jre/lib/rt.jar:/usr/local/jdk1.8.0_60/lib/dt.jar:/usr/local/jdk1.8.0_60/lib/tools.jar>>/etc/profile')
run('echo export PATH=$PATH:/usr/local/jdk1.8.0_60/bin>>/etc/profile')
print "start copy nagios cfg"
run('cp /root/file_dispatch/gdata/nagios/plugins/* /usr/lib64/nagios/plugins/')
run('chmod +x /usr/lib64/nagios/plugins/*')
run('cp /root/file_dispatch/gdata/nagios/cfg/nrpe.cfg /etc/nagios/')
run('/usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d|su - gdata')
print "start install hadoop"
run('tar zxvf /root/file_dispatch/install_packages/hadoop-2.7.1.tar.gz -C /data/gdata/')
run('cp /root/file_dispatch/gdata/hadoop/etc/hadoop/* /data/gdata/hadoop-2.7.1/etc/hadoop/')
run('mkdir -p /data/gdata/hadoop-2.7.1/hdfs/data')
run('mkdir -p /data/gdata/hadoop-2.7.1/hdfs/name')
run('mkdir -p /data/gdata/hadoop-2.7.1/pids')
run('chown gdata:users -R /data/gdata/hadoop-2.7.1')
run('ln -s /data/gdata/hadoop-2.7.1 /usr/local/hadoop')
run('echo export HADOOP_HOME=/usr/local/hadoop >> /etc/profile')
run('echo export HADOOP_MAPRED_HOME=/usr/local/hadoop >> /etc/profile')
run('echo export HADOOP_COMMON_HOME=/usr/local/hadoop >> /etc/profile')
run('echo export HADOOP_HDFS_HOME=/usr/local/hadoop >> /etc/profile')
run('echo export YARN_HOME=/usr/local/hadoop >> /etc/profile')
run('echo export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop >> /etc/profile')
run('echo export YARN_CONF_DIR=/usr/local/hadoop/etc/hadoop >> /etc/profile')
run('echo export HADOOP_USER_CLASSPATH_FIRST=true >> /etc/profile')
run('echo export HIVE_HOME=/usr/local/hive >> /etc/profile')
run('echo export ANT_LIB=/usr/share/java/ant >> /etc/profile')
run('echo export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hive/bin >> /etc/profile')
print "modify sshd config"
run("sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config")
run("sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config")
run("service sshd restart")
print "init finish..."
def do_work(datanode_ip,hostname):
master()
datanode(datanode_ip, hostname)