关闭

SaltStack的非标准安装

标签: saltstack 编译安装
1096人阅读 评论(0) 收藏 举报
分类:

SaltStack的非标准安装

先解释下题目吧,什么是"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版本不在支持的范围内;如果强行安装,可能会导致稳定性的问题。

再说好消息:既然有了安装需求,我们可以自定义安装,这样可以做到完全不影响系统环境。


既然已经决定了我们要走"自定义安装"的道路,那么我们就"兵马未行,粮草先动"。(本文就当个教程写了,之前的探索过程就不写了)

  1. 准备所需要的程序包。

    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

  2. 安装前的准备。

    安装目录:/usr/local/SaltStack (我们的目标很明确)

  3. 开始安装,下面是我写的一个很简单的脚本。

    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就只有一台机器,所以就没有写脚本,手工操作也没太多的工作量,而且会更加的灵活。

其它说明:

  1. 我们是把python环境单独安装在了/usr/local/SaltStack/python-2.7.5中,所以每次手工执行命令时,需要使用绝对路径。

  2. 目前上前做的环境中,只有一台master机器,存在单点危险,而且没有做负载均衡。目前还没有想到很好的解决方案。



欢迎大家一起讨论。





   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2533次
    • 积分:53
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档