install.sh 13.3 KB
Newer Older
D
dailidong 已提交
1
#!/bin/sh
2

D
dailidong 已提交
3 4
workDir=`dirname $0`
workDir=`cd ${workDir};pwd`
D
dailidong 已提交
5

D
dailidong 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#To be compatible with MacOS and Linux
txt=""
if [[ "$OSTYPE" == "darwin"* ]]; then
    # Mac OSX
    txt="''"
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
    # linux
    txt=""
elif [[ "$OSTYPE" == "cygwin" ]]; then
    # POSIX compatibility layer and Linux environment emulation for Windows
    echo "Easy Scheduler not support Windows operating system"
    exit 1
elif [[ "$OSTYPE" == "msys" ]]; then
    # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
    echo "Easy Scheduler not support Windows operating system"
    exit 1
elif [[ "$OSTYPE" == "win32" ]]; then
    echo "Easy Scheduler not support Windows operating system"
    exit 1
elif [[ "$OSTYPE" == "freebsd"* ]]; then
    # ...
    txt=""
else
    # Unknown.
    echo "Operating system unknown, please tell us(submit issue) for better service"
    exit 1
fi

D
dailidong 已提交
34 35
source ${workDir}/conf/config/run_config.conf
source ${workDir}/conf/config/install_config.conf
36 37 38 39 40 41

# mysql配置
# mysql 地址,端口
mysqlHost="192.168.xx.xx:3306"

# mysql 数据库名称
D
dailidong 已提交
42
mysqlDb="escheduler"
43 44

# mysql 用户名
D
dailidong 已提交
45
mysqlUserName="xx"
46 47

# mysql 密码
D
dailidong 已提交
48
mysqlPassword="xx"
49

B
baoliang 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
# conf/config/install_config.conf配置
# 安装路径,不要当前路径(pwd)一样
installPath="/data1_1T/escheduler"

# 部署用户
deployUser="escheduler"

# zk集群
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"

# 安装hosts
ips="ark0,ark1,ark2,ark3,ark4"

# conf/config/run_config.conf配置
# 运行Master的机器
masters="ark0,ark1"

# 运行Worker的机器
workers="ark2,ark3,ark4"

# 运行Alert的机器
alertServer="ark3"

# 运行Api的机器
apiServers="ark1"

# alert配置
# 邮件协议
mailProtocol="SMTP"

# 邮件服务host
mailServerHost="smtp.exmail.qq.com"

# 邮件服务端口
mailServerPort="25"

# 发送人
mailSender="xxxxxxxxxx"

# 发送人密码
mailPassword="xxxxxxxxxx"

# 下载Excel路径
xlsFilePath="/tmp/xls"

95 96

# hadoop 配置
B
baoliang 已提交
97 98 99 100
# 是否启动hdfs,如果启动则为true,需要配置以下hadoop相关参数;
# 不启动设置为false,如果为false,以下配置不需要修改
hdfsStartupSate="false"

D
dailidong 已提交
101 102
# namenode地址,支持HA,需要将core-site.xml和hdfs-site.xml放到conf目录下
namenodeFs="hdfs://mycluster:8020"
103

D
dailidong 已提交
104 105
# resourcemanager HA配置,如果是单resourcemanager,这里为空即可
yarnHaIps="192.168.xx.xx,192.168.xx.xx"
106

D
dailidong 已提交
107 108
# 如果是单 resourcemanager,只需要配置一个主机名称,如果是resourcemanager HA,则默认配置就好
singleYarnIp="ark1"
109

B
baoliang 已提交
110 111
# hdfs根路径,根路径的owner必须是部署用户
hdfsPath="/escheduler"
112 113 114

# common 配置
# 程序路径
D
dailidong 已提交
115
programPath="/tmp/escheduler"
116 117

#下载路径
D
dailidong 已提交
118
downloadPath="/tmp/escheduler/download"
119 120

# 任务执行路径
D
dailidong 已提交
121
execPath="/tmp/escheduler/exec"
122 123

# SHELL环境变量路径
B
baoliang 已提交
124
shellEnvPath="$installPath/conf/env/.escheduler_env.sh"
125 126

# Python换将变量路径
B
baoliang 已提交
127
pythonEnvPath="$installPath/conf/env/escheduler_env.py"
128 129

# 资源文件的后缀
D
dailidong 已提交
130
resSuffixs="txt,log,sh,conf,cfg,py,java,sql,hql,xml"
131

D
dailidong 已提交
132 133
# 开发状态,如果是true,对于SHELL脚本可以在execPath目录下查看封装后的SHELL脚本,如果是false则执行完成直接删除
devState="true"
134 135 136

# zk 配置
# zk根目录
D
dailidong 已提交
137
zkRoot="/escheduler"
138 139

# 用来记录挂掉机器的zk目录
D
dailidong 已提交
140
zkDeadServers="/escheduler/dead-servers"
141

D
dailidong 已提交
142 143
# masters目录
zkMasters="/escheduler/masters"
144

D
dailidong 已提交
145 146
# workers目录
zkWorkers="/escheduler/workers"
147

D
dailidong 已提交
148 149
# zk master分布式锁
mastersLock="/escheduler/lock/masters"
150

D
dailidong 已提交
151 152
# zk worker分布式锁
workersLock="/escheduler/lock/workers"
153

D
dailidong 已提交
154 155
# zk master容错分布式锁
mastersFailover="/escheduler/lock/failover/masters"
156

D
dailidong 已提交
157 158
# zk worker容错分布式锁
workersFailover="/escheduler/lock/failover/masters"
159 160 161 162 163 164 165 166

# zk session 超时
zkSessionTimeout="300"

# zk 连接超时
zkConnectionTimeout="300"

# zk 重试间隔
D
dailidong 已提交
167
zkRetrySleep="100"
168 169

# zk重试最大次数
D
dailidong 已提交
170
zkRetryMaxtime="5"
171 172


D
dailidong 已提交
173 174 175
# master 配置
# master执行线程最大数,流程实例的最大并行度
masterExecThreads="100"
176

D
dailidong 已提交
177 178
# master任务执行线程最大数,每一个流程实例的最大并行度
masterExecTaskNum="20"
179

D
dailidong 已提交
180 181
# master心跳间隔
masterHeartbeatInterval="10"
182

D
dailidong 已提交
183 184
# master任务提交重试次数
masterTaskCommitRetryTimes="5"
185

D
dailidong 已提交
186 187
# master任务提交重试时间间隔
masterTaskCommitInterval="100"
188

D
dailidong 已提交
189 190
# master最大cpu平均负载,用来判断master是否还有执行能力
masterMaxCupLoadAvg="10"
191

D
dailidong 已提交
192 193
# master预留内存,用来判断master是否还有执行能力
masterReservedMemory="1"
194 195


D
dailidong 已提交
196 197 198
# worker 配置
# worker执行线程
workerExecThreads="100"
199

D
dailidong 已提交
200 201
# worker心跳间隔
workerHeartbeatInterval="10"
202

D
dailidong 已提交
203 204
# worker一次抓取任务数
workerFetchTaskNum="10"
205

D
dailidong 已提交
206 207
# worker最大cpu平均负载,用来判断master是否还有执行能力
workerMaxCupLoadAvg="10"
208

D
dailidong 已提交
209 210
# worker预留内存,用来判断master是否还有执行能力
workerReservedMemory="1"
211 212 213

# api 配置
# api 服务端口
D
dailidong 已提交
214
apiServerPort="12345"
215 216

# api session 超时
D
dailidong 已提交
217
apiServerSessionTimeout="7200"
218 219

# api 上下文路径
D
dailidong 已提交
220
apiServerContextPath="/escheduler/"
221

D
dailidong 已提交
222 223
# spring 最大文件大小
springMaxFileSize="1024MB"
224

D
dailidong 已提交
225 226
# spring 最大请求文件大小
springMaxRequestSize="1024MB"
227 228 229 230 231 232

# api 最大post请求大小
apiMaxHttpPostSize="5000000"

# 1,替换文件
echo "1,替换文件"
D
dailidong 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
sed -i ${txt} "s#spring.datasource.url.*#spring.datasource.url=jdbc:mysql://${mysqlHost}/${mysqlDb}?characterEncoding=UTF-8#g" conf/dao/data_source.properties
sed -i ${txt} "s#spring.datasource.username.*#spring.datasource.username=${mysqlUserName}#g" conf/dao/data_source.properties
sed -i ${txt} "s#spring.datasource.password.*#spring.datasource.password=${mysqlPassword}#g" conf/dao/data_source.properties

sed -i ${txt} "s#org.quartz.dataSource.myDs.URL.*#org.quartz.dataSource.myDs.URL=jdbc:mysql://${mysqlHost}/${mysqlDb}?characterEncoding=UTF-8#g" conf/quartz.properties
sed -i ${txt} "s#org.quartz.dataSource.myDs.user.*#org.quartz.dataSource.myDs.user=${mysqlUserName}#g" conf/quartz.properties
sed -i ${txt} "s#org.quartz.dataSource.myDs.password.*#org.quartz.dataSource.myDs.password=${mysqlPassword}#g" conf/quartz.properties


sed -i ${txt} "s#fs.defaultFS.*#fs.defaultFS=${namenodeFs}#g" conf/common/hadoop/hadoop.properties
sed -i ${txt} "s#yarn.resourcemanager.ha.rm.ids.*#yarn.resourcemanager.ha.rm.ids=${yarnHaIps}#g" conf/common/hadoop/hadoop.properties
sed -i ${txt} "s#yarn.application.status.address.*#yarn.application.status.address=http://${singleYarnIp}:8088/ws/v1/cluster/apps/%s#g" conf/common/hadoop/hadoop.properties

sed -i ${txt} "s#data.basedir.path.*#data.basedir.path=${programPath}#g" conf/common/common.properties
sed -i ${txt} "s#data.download.basedir.path.*#data.download.basedir.path=${downloadPath}#g" conf/common/common.properties
sed -i ${txt} "s#process.exec.basepath.*#process.exec.basepath=${execPath}#g" conf/common/common.properties
sed -i ${txt} "s#data.store2hdfs.basepath.*#data.store2hdfs.basepath=${hdfsPath}#g" conf/common/common.properties
sed -i ${txt} "s#hdfs.startup.state.*#hdfs.startup.state=${hdfsStartupSate}#g" conf/common/common.properties
sed -i ${txt} "s#escheduler.env.path.*#escheduler.env.path=${shellEnvPath}#g" conf/common/common.properties
sed -i ${txt} "s#escheduler.env.py.*#escheduler.env.py=${pythonEnvPath}#g" conf/common/common.properties
sed -i ${txt} "s#resource.view.suffixs.*#resource.view.suffixs=${resSuffixs}#g" conf/common/common.properties
sed -i ${txt} "s#development.state.*#development.state=${devState}#g" conf/common/common.properties

sed -i ${txt} "s#zookeeper.quorum.*#zookeeper.quorum=${zkQuorum}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.root.*#zookeeper.escheduler.root=${zkRoot}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.dead.servers.*#zookeeper.escheduler.dead.servers=${zkDeadServers}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.masters.*#zookeeper.escheduler.masters=${zkMasters}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.workers.*#zookeeper.escheduler.workers=${zkWorkers}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.lock.masters.*#zookeeper.escheduler.lock.masters=${mastersLock}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.lock.workers.*#zookeeper.escheduler.lock.workers=${workersLock}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.lock.failover.masters.*#zookeeper.escheduler.lock.failover.masters=${mastersFailover}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.escheduler.lock.failover.workers.*#zookeeper.escheduler.lock.failover.workers=${workersFailover}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.session.timeout.*#zookeeper.session.timeout=${zkSessionTimeout}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.connection.timeout.*#zookeeper.connection.timeout=${zkConnectionTimeout}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.retry.sleep.*#zookeeper.retry.sleep=${zkRetrySleep}#g" conf/zookeeper.properties
sed -i ${txt} "s#zookeeper.retry.maxtime.*#zookeeper.retry.maxtime=${zkRetryMaxtime}#g" conf/zookeeper.properties

sed -i ${txt} "s#master.exec.threads.*#master.exec.threads=${masterExecThreads}#g" conf/master.properties
sed -i ${txt} "s#master.exec.task.number.*#master.exec.task.number=${masterExecTaskNum}#g" conf/master.properties
sed -i ${txt} "s#master.heartbeat.interval.*#master.heartbeat.interval=${masterHeartbeatInterval}#g" conf/master.properties
sed -i ${txt} "s#master.task.commit.retryTimes.*#master.task.commit.retryTimes=${masterTaskCommitRetryTimes}#g" conf/master.properties
sed -i ${txt} "s#master.task.commit.interval.*#master.task.commit.interval=${masterTaskCommitInterval}#g" conf/master.properties
sed -i ${txt} "s#master.max.cpuload.avg.*#master.max.cpuload.avg=${masterMaxCupLoadAvg}#g" conf/master.properties
sed -i ${txt} "s#master.reserved.memory.*#master.reserved.memory=${masterReservedMemory}#g" conf/master.properties


sed -i ${txt} "s#worker.exec.threads.*#worker.exec.threads=${workerExecThreads}#g" conf/worker.properties
sed -i ${txt} "s#worker.heartbeat.interval.*#worker.heartbeat.interval=${workerHeartbeatInterval}#g" conf/worker.properties
sed -i ${txt} "s#worker.fetch.task.num.*#worker.fetch.task.num=${workerFetchTaskNum}#g" conf/worker.properties
sed -i ${txt} "s#worker.max.cpuload.avg.*#worker.max.cpuload.avg=${workerMaxCupLoadAvg}#g" conf/worker.properties
sed -i ${txt} "s#worker.reserved.memory.*#worker.reserved.memory=${workerReservedMemory}#g" conf/worker.properties


sed -i ${txt} "s#server.port.*#server.port=${apiServerPort}#g" conf/application.properties
sed -i ${txt} "s#server.session.timeout.*#server.session.timeout=${apiServerSessionTimeout}#g" conf/application.properties
sed -i ${txt} "s#server.context-path.*#server.context-path=${apiServerContextPath}#g" conf/application.properties
sed -i ${txt} "s#spring.http.multipart.max-file-size.*#spring.http.multipart.max-file-size=${springMaxFileSize}#g" conf/application.properties
sed -i ${txt} "s#spring.http.multipart.max-request-size.*#spring.http.multipart.max-request-size=${springMaxRequestSize}#g" conf/application.properties
sed -i ${txt} "s#server.max-http-post-size.*#server.max-http-post-size=${apiMaxHttpPostSize}#g" conf/application.properties


sed -i ${txt} "s#mail.protocol.*#mail.protocol=${mailProtocol}#g" conf/alert.properties
sed -i ${txt} "s#mail.server.host.*#mail.server.host=${mailServerHost}#g" conf/alert.properties
sed -i ${txt} "s#mail.server.port.*#mail.server.port=${mailServerPort}#g" conf/alert.properties
sed -i ${txt} "s#mail.sender.*#mail.sender=${mailSender}#g" conf/alert.properties
sed -i ${txt} "s#mail.passwd.*#mail.passwd=${mailPassword}#g" conf/alert.properties
sed -i ${txt} "s#xls.file.path.*#xls.file.path=${xlsFilePath}#g" conf/alert.properties


sed -i ${txt} "s#installPath.*#installPath=${installPath}#g" conf/config/install_config.conf
sed -i ${txt} "s#deployUser.*#deployUser=${deployUser}#g" conf/config/install_config.conf
sed -i ${txt} "s#ips.*#ips=${ips}#g" conf/config/install_config.conf


sed -i ${txt} "s#masters.*#masters=${masters}#g" conf/config/run_config.conf
sed -i ${txt} "s#workers.*#workers=${workers}#g" conf/config/run_config.conf
sed -i ${txt} "s#alertServer.*#alertServer=${alertServer}#g" conf/config/run_config.conf
sed -i ${txt} "s#apiServers.*#apiServers=${apiServers}#g" conf/config/run_config.conf
311 312 313 314 315 316


# 2,创建目录
echo "2,创建目录"

if [ ! -d $installPath ];then
D
dailidong 已提交
317 318
  sudo mkdir -p $installPath
  sudo chown -R $deployUser:$deployUser $installPath
319 320
fi

D
dailidong 已提交
321 322
hostsArr=(${ips//,/ })
for host in ${hostsArr[@]}
323 324
do

D
dailidong 已提交
325 326 327
# 如果programPath不存在,则创建
if ! ssh $host test -e $programPath; then
  ssh $host "sudo mkdir -p $programPath;sudo chown -R $deployUser:$deployUser $programPath"
328 329 330 331
fi

# 如果downloadPath不存在,则创建
if ! ssh $host test -e $downloadPath; then
D
dailidong 已提交
332
  ssh $host "sudo mkdir -p $downloadPath;sudo chown -R $deployUser:$deployUser $downloadPath"
333 334 335 336
fi

# 如果$execPath不存在,则创建
if ! ssh $host test -e $execPath; then
D
dailidong 已提交
337
  ssh $host "sudo mkdir -p $execPath; sudo chown -R $deployUser:$deployUser $execPath"
338 339 340 341
fi

# 如果$xlsFilePath不存在,则创建
if ! ssh $host test -e $xlsFilePath; then
D
dailidong 已提交
342
  ssh $host "sudo mkdir -p $xlsFilePath; sudo chown -R $deployUser:$deployUser $xlsFilePath"
343 344 345 346 347 348 349
fi

done


# 3,停止服务
echo "3,停止服务"
D
dailidong 已提交
350
sh ${workDir}/script/stop_all.sh
351 352 353 354

# 4,删除zk节点
echo "4,删除zk节点"
sleep 1
D
dailidong 已提交
355
python ${workDir}/script/del_zk_node.py $zkQuorum $zkRoot
356 357 358

# 5,scp资源
echo "5,scp资源"
D
dailidong 已提交
359
sh ${workDir}/script/scp_hosts.sh
360 361 362 363 364 365 366 367 368 369
if [ $? -eq 0 ]
then
	echo 'scp拷贝完成'
else
	echo 'sc 拷贝失败退出'
	exit -1
fi

# 6,启动
echo "6,启动"
journey2018's avatar
journey2018 已提交
370
sh ${workDir}/script/start_all.sh