CentOS6.5部署SaltStack

目 錄
什麼是saltstack?
Saltstack是一個服務器基礎架構集中化管理平臺,具備配置管理、遠程執行、監控等功能,一般可以理解成簡化版的基於puppet和加強版的func。SaltStack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、pyjinja2、python-msgpack和PyYAML等)構建。
  
Saltstack具有以下特點:

  • 部署簡單、方便
  • 支持大部分UNIX/Linux及Windows環境
  • 主從集中化管理
  • 配置簡單、功能強大、擴展性強
  • 主控端(Master)和被控制端(minion)基於證書認證,安全可靠
  • 支持API及自定義模塊,可通過Python輕鬆擴展

參考文檔:
項目地址: https://github.com/saltstack/salt
官網地址: http://www.saltstack.com
官方文檔: http://docs.saltstack.com OR http://docs.saltstack.cn
開發語言: Python
運行模式: C/S

一、環境介紹

HostName IP Service
Master 192.168.179.100 salt-master
Minion 192.168.179.101 salt-minion


基本術語

說明
maste 控制中心,salt命令運行和資源狀態管理端
minion 需要管理的客戶端機器,會主動連接master端,並從master端得到資源狀態信息,同步資源管理信息
states 配置管理的指令集
grains minion端的靜態變量
pillar minion端的動態變量
highstate 給minion永久添加狀態,從sls配置文件讀取
salt schedule 自動保持客戶端配置


二、安裝前準備(所有機器都需要執行)


2.1 添加Host

        # echo -e "192.168.179.100 master\n192.168.179.101 minion-1" >> /etc/hosts


2.2 關閉防火牆

         # service iptables stop
         # chkconfig iptables off


2.3 關閉Selinux

        #  sed -i 's/SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
        #  setenforce 0


2.4 安裝SaltStack的yum源

         #  yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el6.noarch.rpm
         #  yum clean expire-cache


三、安裝SaltStack


Master安裝


3.1 設置hostname

        #  sed -i 's/HOSTNAME=.*$/HOSTNAME=master/g' /etc/sysconfig/network


3.2 安裝Salt-master

        # yum -y install salt-master


3.3 配置salt-master

         # cp /etc/salt/master /etc/salt/master-example
         # sed -i 's/#interface/interface/g' /etc/salt/master
         # egrep -v "^#|^$" /etc/salt/master


3.4 配置安全認證

查看當前

        #  salt-key -L
        Accepted Keys:
        Denied Keys:
        Unaccepted Keys:
        Rejected Keys:


接收所有key

        #  salt-key -A


3.5 啓動salt-master

         #  service salt-master start
         # chkconfig salt-master on

查看是否啓動成功

         # cat /var/run/salt-master.pid


Minion安裝


3.6 設置hostname

        # sed -i 's/HOSTNAME=.*$/HOSTNAME=minion-1/g' /etc/sysconfig/network


3.7 安裝Salt-minion

        # yum -y install salt-minion


3.8 配置Salt-minion

         # cp /etc/salt/minion /etc/salt/minion-example
         # sed -i 's/#master: salt/master: master/g' /etc/salt/minion


3.9 啓動Salt-minion

         # service salt-minion start
         # chkconfig salt-minion on


四、測試


在master機器上執行

測試ping

    # salt '*' test.ping
    minion-1:
    True


測試運行一個df -h

    #  salt '*' cmd.run 'df -h'
    minion-1:
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vg_centos6-lv_root
                           18G  1.7G   15G  11% /
    tmpfs                 490M   12K  490M   1% /dev/shm
    /dev/sda1             477M   63M  389M  14% /boot


五、自動腳本,可以參考下:

    # cat /export/zlyang/autoSaltStackInstall.sh

    #!/bin/bash
################################################
#                                              #
#        author: Zlyang by 2019-08-28          #
#   description: Auto Install SaltStack        #
#                                              #
################################################
INSTALL_TIME=`date +%F\ %T`
CURRENTDIR=`pwd`;
LOGFILE="${CURRENTDIR}/salt_install.log";
ISCLOSEFIREWALLFIREWALL="yes";
ISCLOSESELINUX="yes";
ready(){
    printf "" > ${LOGFILE}
    printf "安裝日期:${INSTALL_TIME}\n" >> ${LOGFILE}
    printf "\n"
    printf "\033[31m 請手動配置Host項,手動添加所有節點的主機名與IP對應,格式如下:\033[0m \n"
    printf "\033[31m %-12s %-10s \033[0m \n" 192.168.1.1 master     
    printf "\033[31m *\n *\n \033[0m"
    printf "\n"
    printf "開始準備工作: \n" |tee -a ${LOGFILE}
    stop_iptables;
    close_selinux;
    printf "\n開始安裝SaltStack Repo源:\n" |tee -a ${LOGFILE}
    install_salt_repo;
    printf "\n開始安裝SaltStack:\n"|tee -a ${LOGFILE}
    install_salt;
}
stop_iptables(){
    printf "\033[31m \n(建議關閉防火牆,以免在安裝時遇到不必要的麻煩!如果不關閉請手動開放\033[31m 4505 \033[0m和\033[31m 4506 \033[0m端口)\n \033[0m"
    printf "請選擇是否關閉防火牆:\n"
    read -p "[yes/no] :" ISCLOSEFIREWALL
    case "${ISCLOSEFIREWALL}" in
        Y|y|yes|YES)
            /etc/init.d/iptables stop 2>&1 >>/dev/null
            if [[ $? == 0 ]];then
                printf "\t防火牆停止......[\033[32m 成功 \033[0m ]\n"|tee -a ${LOGFILE}
            fi
        ;;
        n|N|no|NO)
            printf "\033[31m \t您未關閉防火牆,請手動開放 4505 和 4506 端口\033[0m\n"|tee -a ${LOGFILE}
            exit 1
        ;;
        *)
            printf "\033[31m \t您未關閉防火牆,請手動開放 4505 和 4506 端口\033[0m\n"|tee -a ${LOGFILE}
            exit 1
        ;;
    esac
}

close_selinux(){
    printf "\033[31m \n(建議關閉SELinux,如果不關閉請手動開放SaltStack所需要的權限)\n \033[0m"
    printf "請選擇是否關閉SELinux:\n"
    read -p "[yes/no] :" ISCLOSESELINUX
    case "${ISCLOSESELINUX}" in
        Y|y|yes|YES)
            sed -i 's/SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
            ISDISABLED=`getenforce`;
            case "${ISDISABLED}" in
                Disabled)
                    printf "\tSELinux 已經停止\n"|tee -a ${LOGFILE}
                ;;
                Enforcing)
                    setenforce 0
                    if [[ $? == 0 ]];then
                        printf "\tSELinux 停止......[\033[32m 成功 \033[0m ]\n"|tee -a ${LOGFILE}
                    fi
                ;;
                *)
                    printf "\t\033[31m 您沒有停止SELinux,請手動停止並重啓機器:\"setenforce 0 && reboot \"\n"|tee -a ${LOGFILE}
                    printf "\t\033[31m 或\n"|tee -a ${LOGFILE}
                    printf "\033[31m \t您未關閉SELinux,請手動開放SaltStack所需要的權限!\033[0m\n"|tee -a ${LOGFILE}
                ;;
            esac
        ;;
        n|N|no|NO)
            printf "\t\033[31m 您沒有停止SELinux,請手動停止並重啓機器:\"setenforce 0 && reboot \"\n"|tee -a ${LOGFILE}
            printf "\t\033[31m 或\n"|tee -a ${LOGFILE}
            printf "\033[31m \t您未關閉SELinux,請手動開放SaltStack所需要的權限!\033[0m\n"|tee -a ${LOGFILE}
        ;;
        *)
            printf "\t\033[31m 您沒有停止SELinux,請手動停止並重啓機器:\"setenforce 0 && reboot \"\n"|tee -a ${LOGFILE}
            printf "\t\033[31m 或\n"|tee -a ${LOGFILE}
            printf "\033[31m \t您未關閉SELinux,請手動開放SaltStack所需要的權限!\033[0m\n"|tee -a ${LOGFILE}
        ;;
    esac
}

install_salt_repo(){
    ISINSTALL=`rpm -qa|grep salt-repo-latest-2.el6.noarch`;
    if [[ -z ${ISINSTALL} ]];then
        yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el6.noarch.rpm 2>&1 >> ${LOGFILE}
        if [[ $? == 0 ]];then
            printf "\tsalt-repo安裝......[\033[32m 成功 \033[0m ]\n"|tee -a ${LOGFILE}
        else
            printf "\tsalt-repo安裝......[\033[31m 失敗 \033[0m ]\n"|tee -a ${LOGFILE}
            exit 1
        fi
    else
        printf "\t您已經安裝salt-repo,無需重新安裝!\n"|tee -a ${LOGFILE}
    fi
}
install_salt(){
    printf "\n請選擇需要安裝的系統:\n\t1:Salt-Master(Server端) \n\t2:Salt-Minion(Client端) \n\n\tq:退出\n 請選擇:"
    read CHOICE_SYSTEM
    case ${CHOICE_SYSTEM} in
        1)
            printf "\t開始安裝 Salt-Master:\n" |tee -a ${LOGFILE}
            yum -y install salt-master |tee -a ${LOGFILE}
            if [ $? == "0" ]; then
                 LOCAL_IP=`ifconfig|grep broadcast|awk '{print $2}'`;
                 CONFIG_FILE="/etc/salt/master";
                 if [ -f ${CONFIG_FILE} ]; then
                     printf "\t 服務端:Salt-Master安裝......[\033[32m 成功 \-33[0m ]\n" |tee -a ${LOGFILE}
                     printf "\t \n開始配置:\n" |tee -a ${LOGFILE}
                     cp /etc/salt/master /etc/salt/master-example
                     sed -i 's/#interface/interface/g' ${CONFIG_FILE}
                     printf "#################################\n" |tee -a ${LOGFILE}
                     egrep -v "^#|^$" /etc/salt/master |tee -a ${LOGFILE}
                     printf "#################################\n" |tee -a ${LOGFILE}
                     printf "\n 配置安全認證:\n" |tee -a ${LOGFILE}
                     printf "\n \033[31m (默認允許所有Pending的公鑰;)\033[0m\n" |tee -a ${LOGFILE}
                     salt-key -A && salt-key -L
                     printf "\n 安全認證配置.......[ \033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                     printf "\n 開始啓動 Salt-Master\n" |tee -a ${LOGFILE}
                     service salt-master start
                     PID=`cat /var/run/salt-master.pid`
                     if [ ! -z ${PID} ]; then
                          printf "\n \t Salt-Master啓動.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                          printf "\t是否設置開機啓動:\n"
                          printf "\t(默認設置:Yes)\n"
                          read -t 5 -p "[yes/no]:" DEFAULT_START
                          case "${DEFAULT_START}" in
                              y|Y|YES|yes)
                                  chkconfig salt-master on
                                  printf "\n \t Salt-Master開機默認啓動設置.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                              ;;
                              n|N|no|NO)
                                  printf "\t您未設置服務開機默認啓動,請手動設置:\"chkconfig salt-master on\" \n"
                              ;;
                              *)
                                  chkconfig salt-master on
                                  printf "\n \t Salt-Master開機默認啓動設置.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                              ;;
                          esac
                          for((i=0;i<6;i++)); do
                               printf "* \n"
                               sleep 0.8
                          done
                          printf "\n \033[32m 恭喜您!SaltStack 服務器端已經安裝成功!\033[0m \n"
                          exit 0
                     else
                          printf "\n \t Salt-Master啓動.......[\033[31m 失敗 \033[0m ]\n" |tee -a ${LOGFILE}
                     fi
                 else              
                     printf "\t \033[31m 服務端未正確安裝,請重新安裝!\033[0m \n"
                     exit 1
                 fi

            else
                 printf "\t 服務端:salt-master安裝......[\033[31m 失敗 \-33[0m ]\n" |tee -a ${LOGFILE}
                 exit 1
            fi
        ;;

        2)
            printf "\t開始安裝 Salt-Minion:\n" |tee -a ${LOGFILE}
            yum -y install salt-minion
            if [ $? == "0" ]; then
                 CONFIG_FILE="/etc/salt/minion";
                 if [ -f ${CONFIG_FILE} ]; then
                     printf "\t 客戶端:Salt-Minion安裝......[\033[32m 成功 \-33[0m ]\n" |tee -a ${LOGFILE}
                     printf "\t \n開始配置:\n" |tee -a ${LOGFILE}
                     cp /etc/salt/minion /etc/salt/minion-example
                     read -p "請輸入Salt-Master服務器IP地址:" SERVER_IP
                     sed -i "s/#master: salt/master: ${SERVER_IP}/g" ${CONFIG_FILE}
                     printf "#################################\n" |tee -a ${LOGFILE}
                     egrep -v "^#|^$" /etc/salt/minion |tee -a ${LOGFILE}
                     printf "#################################\n" |tee -a ${LOGFILE}
                     service salt-minion start
                     PID=`cat /var/run/salt-minion.pid`
                     if [ ! -z ${PID} ]; then
                          printf "\n \t Salt-Minion啓動.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                          printf "\t是否設置開機啓動:\n"
                          printf "\t(默認設置:Yes)\n"
                          read -t 5 -p "[yes/no]:" DEFAULT_START
                          case "${DEFAULT_START}" in
                              y|Y|YES|yes)
                                  chkconfig salt-minion on
                                  printf "\n \t Salt-Minion啓動.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                              ;;
                              n|N|no|NO)
                                  printf "\t您未設置服務開機默認啓動,請手動設置:\"chkconfig salt-minion on\" \n"
                              ;;
                              *)
                                  chkconfig salt-minion on
                                  printf "\n \t Salt-Minion啓動.......[\033[32m 成功 \033[0m ]\n" |tee -a ${LOGFILE}
                              ;;
                          esac
                          for((i=0;i<6;i++)); do
                               printf "* \n"
                               sleep 0.8
                          done
                          printf "\n \033[32m 恭喜您!SaltStack 客戶端已經安裝成功!\033[0m \n"
                          exit 0
                     else
                          printf "\n \t Salt-Minion啓動.......[\033[31m 失敗 \033[0m ]\n" |tee -a ${LOGFILE}
                          exit 1
                     fi
                 else
                      printf "\t 客戶端:Salt-Minion安裝......[\033[31m 失敗 \033[0m ]\n" |tee -a ${LOGFILE}
                      exit 1
                 fi
            else
                 printf "\t 客戶端:Salt-Minion安裝......[\033[31m 失敗 \033[0m ]\n" |tee -a ${LOGFILE}
                 exit 1
            fi
        ;;

        q|Q|quit|exit)
            exit 0
        ;;
        *)
            install_salt;
        ;;
    esac
}

ready;

注: 到此所有的部署均已經完成,在此搭建過程中遇到任何問題可以發送郵件至:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章