-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontroller-mem.old.sh
executable file
·130 lines (92 loc) · 4.06 KB
/
controller-mem.old.sh
1
2
3
4
5
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
CHANGED=0
MAX_INSTANCES_NUM=17
LOG="controller.log"
MIN_INSTANCES_NUM=1
EUCA="200.129.20.202"
NGINX="200.129.20.210"
EXEC="ssh root@$EUCA"
echo -e "\n#####################################################" >> $LOG
INSTANCES_LIST=`$EXEC euca-describe-instances --filter image-id=emi-43033F07 --filter instance-state-name=running | grep INSTANCE| awk {'print $2'}`
INSTANCES_NUM=`$EXEC euca-describe-instances --filter image-id=emi-43033F07 --filter instance-state-name=running | grep INSTANCE| awk {'print $2'} | wc -l`
memInfo(){
TOTAL_MEM=`zabbix_get -s $1 -k vm.memory.size[total]`
TOTAL_MEM=`expr $TOTAL_MEM / 1024 / 1024`
# echo "Total memory: $TOTAL_MEM MB" | tee -a $LOG
BUFFERS_MEM=`zabbix_get -s $1 -k vm.memory.size[buffers]`
BUFFERS_MEM=`expr $BUFFERS_MEM / 1024 / 1024`
# echo "Used memory in buffers: $BUFFERS_MEM MB" | tee -a $LOG
CACHED_MEM=`zabbix_get -s $1 -k vm.memory.size[cached]`
CACHED_MEM=`expr $CACHED_MEM / 1024 / 1024`
# echo "Used memory in cache: $CACHED_MEM MB" | tee -a $LOG
USED_MEM=`zabbix_get -s $1 -k vm.memory.size[used]`
USED_MEM=`expr $USED_MEM / 1024 / 1024`
# echo "Used memory (+buffers +cache): $USED_MEM MB" | tee -a $LOG
USED_BC_MEM=`expr $USED_MEM - $BUFFERS_MEM - $CACHED_MEM`
echo -n "Used memory (-buffers -cache): $USED_BC_MEM MB" | tee -a $LOG
# echo | tee -a $LOG
PERC_MEM=`expr \( $USED_MEM \* 100 \) / $TOTAL_MEM`
# echo -n "Used memory in (+buffers +cache) %: $PERC_MEM" | tee -a $LOG
echo | tee -a $LOG
PERC_BC_MEM=`expr \( $USED_BC_MEM \* 100 \) / $TOTAL_MEM`
echo -n "Used memory in (-buffers -cache) %: $PERC_BC_MEM" | tee -a $LOG
echo | tee -a $LOG
TOTAL_LOAD_MEM=$(echo "scale = 2; $TOTAL_LOAD_MEM + $PERC_BC_MEM" | bc)
}
nginxReconfig(){
INSTANCES_LIST=`$EXEC euca-describe-instances --filter image-id=emi-43033F07 --filter instance-state-name=running | grep INSTANCE| awk {'print $2'}`
EXEC_NGINX="ssh root@$NGINX"
FILE="/etc/nginx/conf.d/upstream.conf"
for INSTANCE in $INSTANCES_LIST; do
IP_LIST="$IP_LIST `$EXEC euca-describe-instances $INSTANCE | grep INSTANCE| awk {'print $4'}`"
done
$EXEC_NGINX "echo \"upstream bench {\" > $FILE"
for IP in $IP_LIST; do
$EXEC_NGINX "echo -e \" \\t server $IP:80 max_fails=3 fail_timeout=30s; \" >> $FILE "
done
$EXEC_NGINX "echo \"}\" >> $FILE"
$EXEC_NGINX "service nginx reload"
echo "Reconfiguring Nginx..." >> $LOG
}
echo -e "Instances list:\n$INSTANCES_LIST" | tee -a $LOG
echo "Number of instances: $INSTANCES_NUM" | tee -a $LOG
TOTAL_LOAD=0
TOTAL_LOAD_MEM=0
for INSTANCE in $INSTANCES_LIST; do
IP=`$EXEC euca-describe-instances $INSTANCE | grep INSTANCE| awk {'print $4'}`
CPU_LOAD=`printf "%0.2f\n" \`zabbix_get -s $IP -k system.cpu.util[,,avg1]\``
TOTAL_LOAD=$(echo "scale = 2; $TOTAL_LOAD + $CPU_LOAD" | bc)
echo "IP: $IP CPU LOAD: $CPU_LOAD" | tee -a $LOG
memInfo $IP
echo "Number os running proccess apache2: `zabbix_get -s $IP -k proc.num[apache2]`"
echo | tee -a $LOG
done
LOAD_MEM_AVERAGE=$(echo "scale = 2; $TOTAL_LOAD_MEM / $INSTANCES_NUM" | bc)
LOAD_AVERAGE=$(echo "scale = 2; $TOTAL_LOAD / $INSTANCES_NUM" | bc)
#echo "Total load: $TOTAL_LOAD" | tee -a $LOG
echo "Load average: $LOAD_AVERAGE" | tee -a $LOG
echo "Memory load average: $LOAD_MEM_AVERAGE" | tee -a $LOG
if (( $(bc <<< "$LOAD_MEM_AVERAGE > 60") == 1 )); then
if [ $INSTANCES_NUM -lt $MAX_INSTANCES_NUM ]; then
CHANGED=1
echo "Starting a new instance at `date` ..." | tee -a $LOG
$EXEC "source /root/credentials/demo/eucarc && euca-run-instances emi-43033F07 -k admin -t m1.small"
echo "Waiting 60s..." | tee -a $LOG
sleep 60
nginxReconfig
else
echo "Error: Maximum instances number reached." | tee -a $LOG
fi
elif (( $(bc <<< "$LOAD_MEM_AVERAGE < 40") == 1 )); then
if [ $INSTANCES_NUM -gt $MIN_INSTANCES_NUM ]; then
CHANGED=1
echo "Removing a instance at `date` ..." | tee -a $LOG
INSTANCE=`echo $INSTANCES_LIST | awk {'print $1'}`
$EXEC "source /root/credentials/demo/eucarc && euca-terminate-instances $INSTANCE"
echo "Waiting 30s..." | tee -a $LOG
sleep 30
nginxReconfig
else
echo "Error: Minumum instances number reached." | tee -a $LOG
fi
fi