先解释下题目吧,什么是"SaltStack的非标准安装"。
简单先介绍下环境,笔者所运维的环境基本上以CentOS为主,有少部分Ubuntu。CentOS系统的版本也从5.4到6.4都有包括,进尔导致salt所依赖的python语言环境的版本也从2.4.3到2.6.6都有。因为是线上的系统,系统版本的升级或者python版本的升级,都有可能带来一定的风险性。所以从本意上来说,这次做的salt安装,最好不要对线上环境有任何的影响。(做过运维的都知道,最好不要对稳定的环境做任何的变化。)
好了,基本的思路定了,再看下新版salt的安装需求:
-
Python 2.6 >= 2.6 <3.0
-
ZeroMQ >= 2.1.9
-
pyzmq >= 2.1.9
-
PyCrypto
-
msgpack-python
-
YAML
-
Jinja2
这个列表,给了我们提供了一个好消息,一个坏消息。
先说坏消息:因为我们的python版本不统一,有部分系统的python版本不在支持的范围内;如果强行安装,可能会导致稳定性的问题。
再说好消息:既然有了安装需求,我们可以自定义安装,这样可以做到完全不影响系统环境。
既然已经决定了我们要走"自定义安装"的道路,那么我们就"兵马未行,粮草先动"。(本文就当个教程写了,之前的探索过程就不写了)
-
准备所需要的程序包。
Jinja2-2.7.1.tar.gz
M2Crypto-0.21.1.tar.gz
MarkupSafe-0.18.tar.gz
PyYAML-3.10.tar.gz
Python-2.7.5.tgz
msgpack-python-0.1.12.tar.gz
pycrypto-2.6.1.tar.gz
pyzmq-13.1.0.zip
salt-0.17.1.tar.gz
setuptools-1.1.6.tar.gz
yaml-0.1.4.tar.gz
zeromq-4.0.1.tar.gz
-
安装前的准备。
安装目录:/usr/local/SaltStack (我们的目标很明确)
-
开始安装,下面是我写的一个很简单的脚本。
master和minion的安装部署是一样的,区别只是使用的配置文件不同。
M2Crypto的安装,请根据系统的具体环境参考安装说明
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
|
#!/bin/bash
#
# Author : john.lee.cn.do@gmail.com
# Date : 2013.10.25
# Desc : Install Salt
# Usage : bash install.sh
#
export
LANG=C
_IP=`
ifconfig
|
grep
'inet addr'
|
grep
-
v
'127.0.0.1'
|
sed
's/[ ]*/ /'
|
awk
'{print $2}'
|
awk
-F:
'{print $NF}'
|
head
-n 1`
_MASTER=172.17.37.207
_PATH=
/usr/local/src/SaltStack
# Install Python
cd
$_PATH
tar
zxvf Python-2.7.5.tgz
cd
Python-2.7.5
.
/configure
--prefix=
/usr/local/SaltStack/python-2
.7.5
make
&&
make
install
export
_PYTHON=
/usr/local/SaltStack/python-2
.7.5
/bin/python
# Install setuptools
cd
$_PATH
tar
zxvf setuptools-1.1.6.
tar
.gz
cd
setuptools-1.1.6
$_PYTHON setup.py
install
# Install MarkupSafe
cd
$_PATH
tar
zxvf MarkupSafe-0.18.
tar
.gz
cd
MarkupSafe-0.18
$_PYTHON setup.py
install
# Install jinja2
cd
$_PATH
tar
zxvf Jinja2-2.7.1.
tar
.gz
cd
Jinja2-2.7.1
$_PYTHON setup.py
install
# Install msgpack-python
cd
$_PATH
tar
zxvf msgpack-python-0.1.12.
tar
.gz
cd
msgpack-python-0.1.12
$_PYTHON setup.py
install
# Install pycrypto
cd
$_PATH
tar
zxvf pycrypto-2.6.1.
tar
.gz
cd
pycrypto-2.6.1
$_PYTHON setup.py
install
# Install PyYAML
cd
$_PATH
tar
zxvf PyYAML-3.10.
tar
.gz
cd
PyYAML-3.10
$_PYTHON setup.py
install
# Install zeromq
cd
$_PATH
tar
zxvf zeromq-4.0.1.
tar
.gz
cd
zeromq-4.0.1
.
/configure
--prefix=
/usr/local/SaltStack/zeromq-4
.0.1
make
&&
make
install
# Install pyzmq
cd
$_PATH
unzip pyzmq-13.1.0.zip
cd
pyzmq-13.1.0
$_PYTHON setup.py
install
--zmq=
/usr/local/SaltStack/zeromq-4
.0.1
# Install M2Crypto
# Need yum install swig
cd
$_PATH
tar
zxvf M2Crypto-0.21.1.
tar
.gz
cd
M2Crypto-0.21.1
# Modify python path in fedora_setup.sh
bash
fedora_setup.sh
install
# Install Salt
cd
$_PATH
tar
zxvf salt-0.17.1.
tar
.gz
cd
salt-0.17.1
$_PYTHON setup.py
install
|
4. 因为master和minion的区别,只是配置文件的不同,在请参考官方文档(salt的配置文件模板在salt-0.17.1/conf)
5. 启动脚本。
既然我们把路径都已经修改了,那么我们的启动脚本也要修改一下了。
salt-minion(此例中,将配置文件也放在了/etc/salt中,如果进行了修改,可以修改脚本即可。)
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
|
#!/bin/sh
#
# Salt minion
###################################
# LSB header
### BEGIN INIT INFO
# Provides: salt-minion
# Required-Start: $local_fs $remote_fs $network $named $time
# Should-Start: $time ypbind smtp
# Required-Stop: $local_fs $remote_fs $network $named $time
# Should-Stop: ypbind smtp
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Salt minion daemon
# Description: This is the Salt minion daemon that can be controlled by the Salt master.
### END INIT INFO
# chkconfig header
# chkconfig: 345 97 04
# description: This is the Salt minion daemon that can be controlled by the Salt master.
#
# processname: /usr/bin/salt-minion
SALTMINION=
/usr/local/SaltStack/python-2
.7.5
/bin/salt-minion
PYTHON=
/usr/local/SaltStack/python-2
.7.5
/bin
# Sanity checks.
[ -x $SALTMINION ] ||
exit
0
# Source function library.
.
/etc/rc
.d
/init
.d
/functions
SERVICE=salt-minion
PROCESS=salt-minion
CONFIG_ARGS=
" -c /etc/salt"
RETVAL=0
start() {
if
[ $(pidofproc $PROCESS) ];
then
RETVAL=$?
echo
-n
"already running"
else
echo
-n $
"Starting salt-minion daemon: "
daemon --check $SERVICE $SALTMINION -d $CONFIG_ARGS
RETVAL=$?
fi
echo
return
$RETVAL
}
stop() {
echo
-n $
"Stopping salt-minion daemon: "
killproc $PROCESS
RETVAL=$?
echo
}
restart() {
stop
start
}
# See how we were called.
case
"$1"
in
start|stop|restart)
$1
;;
status)
if
[ -f $SUSE_RELEASE ];
then
echo
-n
"Checking for service salt-minion "
checkproc $SALTMINION
rc_status -
v
elif
[ -f $DEBIAN_VERSION ];
then
if
[ -f $LOCKFILE ];
then
RETVAL=0
echo
"salt-minion is running."
else
RETVAL=1
echo
"salt-minion is stopped."
fi
else
status $PROCESS
RETVAL=$?
fi
;;
condrestart)
[ -f $LOCKFILE ] && restart || :
;;
reload)
echo
"can't reload configuration, you have to restart it"
if
[ -f $SUSE_RELEASE ];
then
rc_status -
v
else
RETVAL=$?
fi
;;
*)
echo
$
"Usage: $0 {start|stop|status|restart|condrestart|reload}"
exit
1
;;
esac
exit
$RETVAL
|
因为master就只有一台机器,所以就没有写脚本,手工操作也没太多的工作量,而且会更加的灵活。
其它说明:
-
我们是把python环境单独安装在了/usr/local/SaltStack/python-2.7.5中,所以每次手工执行命令时,需要使用绝对路径。
-
目前上前做的环境中,只有一台master机器,存在单点危险,而且没有做负载均衡。目前还没有想到很好的解决方案。
欢迎大家一起讨论。