install.sh 13.2 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 50 51


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

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

D
dailidong 已提交
58 59
# 如果是单 resourcemanager,只需要配置一个主机名称,如果是resourcemanager HA,则默认配置就好
singleYarnIp="ark1"
60 61 62 63


# common 配置
# 程序路径
D
dailidong 已提交
64
programPath="/tmp/escheduler"
65 66

#下载路径
D
dailidong 已提交
67
downloadPath="/tmp/escheduler/download"
68 69

# 任务执行路径
D
dailidong 已提交
70
execPath="/tmp/escheduler/exec"
71 72

# hdfs根路径
D
dailidong 已提交
73
hdfsPath="/escheduler"
74

D
dailidong 已提交
75 76
# 是否启动hdfs,如果启动则为true,不启动设置为false
hdfsStartupSate="true"
77 78

# SHELL环境变量路径
D
dailidong 已提交
79
shellEnvPath="/opt/.escheduler_env.sh"
80 81

# Python换将变量路径
D
dailidong 已提交
82
pythonEnvPath="/opt/escheduler_env.py"
83 84

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

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


# zk 配置
# zk集群
D
dailidong 已提交
93
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"
94 95

# zk根目录
D
dailidong 已提交
96
zkRoot="/escheduler"
97 98

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

D
dailidong 已提交
101 102
# masters目录
zkMasters="/escheduler/masters"
103

D
dailidong 已提交
104 105
# workers目录
zkWorkers="/escheduler/workers"
106

D
dailidong 已提交
107 108
# zk master分布式锁
mastersLock="/escheduler/lock/masters"
109

D
dailidong 已提交
110 111
# zk worker分布式锁
workersLock="/escheduler/lock/workers"
112

D
dailidong 已提交
113 114
# zk master容错分布式锁
mastersFailover="/escheduler/lock/failover/masters"
115

D
dailidong 已提交
116 117
# zk worker容错分布式锁
workersFailover="/escheduler/lock/failover/masters"
118 119 120 121 122 123 124 125

# zk session 超时
zkSessionTimeout="300"

# zk 连接超时
zkConnectionTimeout="300"

# zk 重试间隔
D
dailidong 已提交
126
zkRetrySleep="100"
127 128

# zk重试最大次数
D
dailidong 已提交
129
zkRetryMaxtime="5"
130 131


D
dailidong 已提交
132 133 134
# master 配置
# master执行线程最大数,流程实例的最大并行度
masterExecThreads="100"
135

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

D
dailidong 已提交
139 140
# master心跳间隔
masterHeartbeatInterval="10"
141

D
dailidong 已提交
142 143
# master任务提交重试次数
masterTaskCommitRetryTimes="5"
144

D
dailidong 已提交
145 146
# master任务提交重试时间间隔
masterTaskCommitInterval="100"
147

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

D
dailidong 已提交
151 152
# master预留内存,用来判断master是否还有执行能力
masterReservedMemory="1"
153 154


D
dailidong 已提交
155 156 157
# worker 配置
# worker执行线程
workerExecThreads="100"
158

D
dailidong 已提交
159 160
# worker心跳间隔
workerHeartbeatInterval="10"
161

D
dailidong 已提交
162 163
# worker一次抓取任务数
workerFetchTaskNum="10"
164

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

D
dailidong 已提交
168 169
# worker预留内存,用来判断master是否还有执行能力
workerReservedMemory="1"
170 171 172 173


# api 配置
# api 服务端口
D
dailidong 已提交
174
apiServerPort="12345"
175 176

# api session 超时
D
dailidong 已提交
177
apiServerSessionTimeout="7200"
178 179

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

D
dailidong 已提交
182 183
# spring 最大文件大小
springMaxFileSize="1024MB"
184

D
dailidong 已提交
185 186
# spring 最大请求文件大小
springMaxRequestSize="1024MB"
187 188 189 190 191 192

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



D
dailidong 已提交
193
# alert配置
194 195

# 邮件协议
D
dailidong 已提交
196
mailProtocol="SMTP"
197 198

# 邮件服务host
D
dailidong 已提交
199
mailServerHost="smtp.exmail.qq.com"
200 201

# 邮件服务端口
D
dailidong 已提交
202
mailServerPort="25"
203 204

# 发送人
D
dailidong 已提交
205
mailSender="xxxxxxxxxx"
206 207

# 发送人密码
D
dailidong 已提交
208
mailPassword="xxxxxxxxxx"
209 210 211 212 213 214

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

# conf/config/install_config.conf配置
# 安装路径
D
dailidong 已提交
215
installPath="/data1_1T/escheduler"
216 217

# 部署用户
D
dailidong 已提交
218
deployUser="escheduler"
219 220

# 安装hosts
D
dailidong 已提交
221
ips="ark0,ark1,ark2,ark3,ark4"
222 223


D
dailidong 已提交
224 225 226
# conf/config/run_config.conf配置
# 运行Master的机器
masters="ark0,ark1"
227

D
dailidong 已提交
228 229
# 运行Worker的机器
workers="ark2,ark3,ark4"
230

D
dailidong 已提交
231 232
# 运行Alert的机器
alertServer="ark3"
233 234

# 运行Api的机器
D
dailidong 已提交
235
apiServers="ark1"
236 237 238 239


# 1,替换文件
echo "1,替换文件"
D
dailidong 已提交
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 311 312 313 314 315 316 317
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
318 319 320 321 322 323 324 325




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

if [ ! -d $installPath ];then
D
dailidong 已提交
326 327
  sudo mkdir -p $installPath
  sudo chown -R $deployUser:$deployUser $installPath
328 329
fi

D
dailidong 已提交
330 331
hostsArr=(${ips//,/ })
for host in ${hostsArr[@]}
332 333
do

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

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

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

# 如果$xlsFilePath不存在,则创建
if ! ssh $host test -e $xlsFilePath; then
D
dailidong 已提交
351
  ssh $host "sudo mkdir -p $xlsFilePath; sudo chown -R $deployUser:$deployUser $xlsFilePath"
352 353 354 355 356 357 358
fi

done


# 3,停止服务
echo "3,停止服务"
D
dailidong 已提交
359
sh ${workDir}/script/stop_all.sh
360 361 362 363

# 4,删除zk节点
echo "4,删除zk节点"
sleep 1
D
dailidong 已提交
364
python ${workDir}/script/del_zk_node.py $zkQuorum $zkRoot
365 366 367

# 5,scp资源
echo "5,scp资源"
D
dailidong 已提交
368
sh ${workDir}/script/scp_hosts.sh
369 370 371 372 373 374 375 376 377 378
if [ $? -eq 0 ]
then
	echo 'scp拷贝完成'
else
	echo 'sc 拷贝失败退出'
	exit -1
fi

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