06 saltstack生產實例-需求

https://github.com/unixhot/saltbook-codephp

1.Cobbler
1.15 統一網卡名

2.Zabbix

    系統已經安裝好了!
base

           1.手動實現  2.須要使用salt的什麼狀態模塊   3.編寫sls

1.系統初始化
    1.1 關閉SELinux  - file.managed   -  /etc/selinux/config
    1.2 關閉默認iptables - service.disabled  firewalld
    1.3 時間同步(配置ntp)  -   pkg.installed  cron
    1.4 文件描述符(必備 /etc/security/limits.conf) file.managed
    1.5 內核優化(必備 tcp  內存)    sysctl
    1.6 SSH服務優化(關閉DNS解析,修改端口)  file.managed  service
    1.7 精簡開機系統服務(只開啓SSHD服務)   service.disabled  
    1.8 DNS解析(必備)  file.managed  /etc/resolv.conf
    1.9 歷史記錄優化histroy(記錄時間,用戶)file.managed  /etc/profile
    1.10 設置終端超時時間(安全考慮)  file.managed  /etc/profile
    1.11 配置yum源(必備)  file.managed 
    1.12 安裝各類agent(必備)   pkg  file  service  jinja模板
    1.13 基礎用戶(應用用戶 user group),用戶登陸提醒,sudo權限設置(必備)
    1.14 經常使用基礎命令,命令別名(必備 screen lrzsz  tree openssl telnet iftop iotop sysstat wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed   pkgs
    1.15 用戶登陸提示、PS1的修改    file.managed   file.append

2.服務部署

    抽象:功能模塊
    redis  安裝、配置、啓動
    mysql  安裝、配置(my.cnf能夠統一  目錄默認配置能夠統一)
            master: server_id 1111
            slave:  server_id 2222
    
  
    1.redis 主從  (已經實現)
    2.mysql 主從  
        2.1 mysql-install.sls 安裝  配置  初始化    
        2.2 my.cnf配置不一樣-server id
        2.3 建立主從同步用戶
        2.4 master上獲取binlog 和 pos值
        2.5 slave上,change master  && start slave
        2.6 檢查主從狀態
        
        GRANT replication slave on 

        
    3.apache+php
    4.haproxy+keepalived

    

3.監控


4.業務


5.其它

 

 

 

1.系統初始化

1.需求梳理

1.Cobbler
1.15 統一網卡名

2.Zabbix

系統已經安裝好了!

base步驟
1.手動實現 2.須要使用salt的什麼狀態模塊 3.編寫sls

2.salt模塊識別

系統初始化 

    1.1 關閉SELinux  - file.managed   -  /etc/selinux/config
    1.2 關閉默認iptables - service.disabled  firewalld
    1.3 時間同步(配置ntp)  -   pkg.installed  cron
    1.4 文件描述符(必備 /etc/security/limits.conf) file.managed
    1.5 內核優化(必備 tcp  內存)    sysctl
    1.6 SSH服務優化(關閉DNS解析,修改端口)  file.managed  service
    1.7 精簡開機系統服務(只開啓SSHD服務)   service.disabled  
    1.8 DNS解析(必備)  file.managed  /etc/resolv.conf
    1.9 歷史記錄優化histroy(記錄時間,用戶)file.managed  /etc/profile
    1.10 設置終端超時時間(安全考慮)  file.managed  /etc/profile
    1.11 配置yum源(必備)  file.managed 
    1.12 安裝各類agent(必備)   pkg  file  service  jinja模板
    1.13 基礎用戶(應用用戶 user group),用戶登陸提醒,sudo權限設置(必備)
    1.14 經常使用基礎命令,命令別名(必備 screen lrzsz  tree openssl telnet iftop iotop sysstat
 wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed   pkgs
    1.15 用戶登陸提示、PS1的修改    file.managed   file.append

(1)本身用的話

暫停的
1.6 SSH服務優化(關閉DNS解析,修改端口)  file.managed  service
1.10 設置終端超時時間(安全考慮)  file.managed  /etc/profile

(2)克隆鏡像問題,ip

    # 修改網卡配置,去掉UUID MAC等(克隆機器問題)
    [root@linux-node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
    刪除或註釋HWADDR和UUID兩行內容,修改IP
    
    解決CentOS克隆虛擬機沒法上網問題(UUID、MAC、IP)https://blog.csdn.net/qq_35428201/article/details/81435679

固定ip  

不能改成bootproto=static ,不然上不了外網html

 

[root@linux-node1 /etc/rc.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.194.131

刪除多餘的ip前端

ifconfig del dev ens33 192.168.194.137

 

 

重啓networknode

[root@linux-node1 ~]# systemctl restart network

 

 

 

(3)對每一個機器,修改hostname

顯示hostnamemysql

臨時
# 重啓xshell生效
[root@localhost ~]# hostname linux-node1.example.com
[root@localhost ~]# hostname linux-node2.example.com

永久
# 重啓系統生效
[root@linux-node1 ~]# vim /etc/hostname 
linux-node1.example.com

實質:網絡上的hostnamelinux

[root@localhost ~]# cat /etc/sysconfig/network  
# Created by anaconda
NETWORKING=yes
HOSTNAME=linux-node1.example.com
[root@linux-node1 ~]# systemctl restart network

/etc/hosts ios

此文件是在網絡上使用的,用於解析計算機名稱和IP地址的映射關係git

[root@linux-node1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.194.131 linux-node1.example.com linux-node1
192.168.194.132 linux-node2.example.com linux-node2

 

結論:github

參考blog:https://blog.csdn.net/qq_22310551/article/details/84966044web

hostname是Linux系統下的一個內核參數,它保存在/proc/sys/kernel/hostname下,可是它的值是Linux啓動時從rc.sysinit讀取的。

 

 在此時進行快照,克隆

 

3.實現

0. 目錄結構

[root@linux-node1 /srv/salt/base]# tree
.
├── init
│?? ├── dns.sls
│?? ├── files
│?? │?? ├── epel-7.repo
│?? │?? ├── limits.conf
│?? │?? ├── resolv.conf
│?? │?? ├── selinux-config
│?? │?? └── sshd_config
│?? ├── firewall.sls
│?? ├── history.sls
│?? ├── init-all.sls
│?? ├── limit.sls
│?? ├── ntp-client.sls
│?? ├── pkg-base.sls
│?? ├── selinux.sls
│?? ├── ssh.sls
│?? ├── sysctl.sls
│?? ├── thin.sls
│?? ├── tty-style.sls
│?? ├── tty-timeout.sls
│?? ├── user-redhat.sls
│?? └── yum-repo.sls
├── top.sls

1.1 關閉SELinux - file.managed - /etc/selinux/config

[root@linux-node1 /srv/salt/base/init]# vim selinux.sls 
close_selinux:
  file.managed:
    - name: /etc/selinux/config
    - source: salt://init/files/selinux-config
    - user: root
    - group: root
    - mode: 0644
  cmd.run:
    - name: setenforce 0 || echo ok
[root@linux-node1 /srv/salt/base/init]# cp /etc/selinux/config files/selinux-config 
[root@linux-node1 /srv/salt/base/init]# vim files/selinux-config

1.2 關閉默認iptables - service.disabled firewalld

[root@linux-node1 /srv/salt/base/init]# vim firewall.sls
firewalld-stop:
  service.dead:
    - name: firewalld.service
    - enable: False

1.3 時間同步(配置ntp) - pkg.installed cron

https://docs.saltstack.com/en/latest/ref/states/all/index.html#all-salt-states

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cron.html#module-salt.states.cron

[root@linux-node1 /srv/salt/base/init]# cat ntp-client.sls 
install-ntpdate:
  pkg.installed:
    - name: ntpdate

cron-ntpdate:
  cron.present:
    - name: ntpdate cn.pool.ntp.org
    - user: root
    - minute: '*/5'

linux命令

https://www.cnblogs.com/zhi-leaf/p/6281549.html

[root@localhost /etc/yum.repos.d]# yum install ntpdate
[root@localhost /etc/yum.repos.d]# date Thu Aug 8 23:01:17 EDT 2019 [root@localhost /etc/yum.repos.d]# vim /etc/crontab */5 * * * * ntpdate cn.pool.ntp.org 分時日月周 [root@localhost /etc/yum.repos.d]# date Fri Aug 9 02:50:05 EDT 2019

 

1.4 文件描述符(必備 /etc/security/limits.conf) file.managed

[root@linux-node1 /srv/salt/base/init]# cat limit.sls 
limits-config:
  file.managed:
    - name: /etc/security/limits.conf
    - source: salt://init/files/limits.conf
    - user: root
    - group: root
    - mode: 644

 

[root@linux-node1 /srv/salt/base/init]# cp /etc/security/limits.conf files/limits.conf 
[root@linux-node1 /srv/salt/base/init]# 

 

1.5 內核優化(必備 tcp 內存) sysctl

[root@linux-node1 /srv/salt/base/init]# cat sysctl.sls 
net.ipv4.tcp_fin_timeout:
  sysctl.present:
    - value: 2

net.ipv4.tcp_tw_reuse:   
  sysctl.present:
    - value: 1

net.ipv4.tcp_tw_recycle:
  sysctl.present:
    - value: 1

net.ipv4.tcp_syncookies:
  sysctl.present:
    - value: 1

net.ipv4.tcp_keepalive_time:
  sysctl.present:
    - value: 600

net.ipv4.ip_local_port_range:
  sysctl.present:
    - value: 4000 65000

net.ipv4.tcp_max_syn_backlog:
  sysctl.present:
    - value: 16384

net.ipv4.tcp_max_tw_buckets:
  sysctl.present:
    - value: 36000

net.ipv4.route.gc_timeout:
  sysctl.present:
    - value: 100

net.ipv4.tcp_syn_retries:
  sysctl.present:
    - value: 1

net.ipv4.tcp_synack_retries:
  sysctl.present:
    - value: 1

net.core.somaxconn:
  sysctl.present:
    - value: 16384

net.core.netdev_max_backlog:
  sysctl.present:
    - value: 16384

net.ipv4.tcp_max_orphans:
  sysctl.present:
    - value: 16384

fs.file-max:
  sysctl.present:
    - value: 2000000

net.ipv4.ip_forward:
  sysctl.present:
    - value: 1

參數說明

/proc/sys/net/ipv4/tcp_fin_timeout

         對於本端斷開的socket鏈接,TCP保持在FIN-WAIT-2狀態的時間(秒)。對方可能會斷開鏈接或一直不結束鏈接或不可預料的進程死亡。

/proc/sys/net/ipv4/tcp_tw_reuse

       表示是否容許將處於TIME-WAIT狀態的socket(TIME-WAIT的端口)用於新的TCP鏈接 

/proc/sys/net/ipv4/tcp_tw_recycle

       可以更快地回收TIME-WAIT套接字。



/proc/sys/net/ipv4/tcp_syncookies

表示是否打開TCP同步標籤(syncookie),內核必須打開了CONFIG_SYN_COOKIES項進行編譯,同步標籤能夠防止一個套接字在有過多試圖鏈接到達時引發過載

/proc/sys/net/ipv4/tcp_keepalive_time

TCP發送keepalive探測消息的間隔時間(秒),用於確認TCP鏈接是否有效。

/proc/sys/net/ipv4/ip_local_port_range

表示TCP/UDP協議容許使用的本地端口號

/proc/sys/net/ipv4/tcp_max_syn_backlog

對於還未得到對方確認的鏈接請求,可保存在隊列中的最大數目。若是服務器常常出現過載,能夠嘗試增長這個數字。

/proc/sys/net/ipv4/tcp_max_tw_buckets     
該參數設置系統的TIME_WAIT的數量,若是超過默認值則會被當即清除。

/proc/sys/net/ipv4/tcp_syn_retries    對應net.ipv4.tcp_syn_retries
控制內核向某個輸入的SYN/ACK段從新發送相應的次數,低值能夠更好的檢測到遠程主機的鏈接失敗。



net.ipv4.tcp_synack_retries = 2
跟參數net.ipv4.tcp_syn_retries同樣,只是這個內核參數是控制迴應SYN失敗的重試次數,默認值也是5,和上面同樣修改成2



/proc/sys/net/core/somaxconn

定義了系統中每個端口最大的監聽隊列的長度,這是個全局的參數。



/proc/sys/net/core/netdev_max_backlog    
該參數定義了當接口收到包的速率大於內核處理包的速率時,設備的輸入隊列中的最大報文數。


/proc/sys/net/ipv4/ip_forward
接口間轉發報文



net.ipv4.route.gc_timeout = 100
路由緩存刷新頻率, 當一個路由失敗後多長時間跳到另外一個默認是300

net.ipv4.tcp_max_orphans
缺省值是8192
系統所能處理不屬於任何進程的TCP sockets最大數量(主動關閉端發送了FIN後轉到FIN_WAIT_1,這時TCP鏈接就不屬於某個進程了)。假如超過這個數量,那麼不屬於任何進程的鏈接會被當即reset,並同時顯示警告信息。之因此要設定這個限制,純粹爲了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人爲的下降這個限制(這個值Redhat AS版本中設置爲32768,可是不少防火牆修改的時候,建議該值修改成2000)


fs.file-max = 6553600
設置系統全部進程一共能夠打開多少個文件句柄,這是一個系統級的設置,管控的是全部進程總共能夠同時打開多少文件句柄,若是多個進程打開了較多文件就會致使文件句柄不足,所以設置較大值,不過要注意程序打開的文件越多,就佔用更多的內存,所以要根據業務和服務器配置起來設置
View Code

linux命令

[root@localhost ~]# sysctl -a |grep ipv4..tcp_tw

[root@localhost /etc/yum.repos.d]# cat /proc/sys/net/ipv4/tcp_tw_recycle 0 [root@localhost ~]# sysctl -w net.ipv4.tcp_tw_reuse=1
[root@localhost ~]# vim /etc/sysctl.conf 
net.core.rmem_default = 256960  
net.core.rmem_max = 513920  
net.core.wmem_default = 256960  
net.core.wmem_max = 513920  
net.core.netdev_max_backlog = 2000  
net.core.somaxconn = 2048  
net.core.optmem_max = 81920  
net.ipv4.tcp_mem = 131072  262144  524288  
net.ipv4.tcp_rmem = 8760  256960  4088000  
net.ipv4.tcp_wmem = 8760  256960  4088000  
net.ipv4.tcp_keepalive_time = 1800  
net.ipv4.tcp_keepalive_intvl = 30  
net.ipv4.tcp_keepalive_probes = 3  
net.ipv4.tcp_sack = 1  
net.ipv4.tcp_fack = 1  
net.ipv4.tcp_timestamps = 1  
net.ipv4.tcp_window_scaling = 1  
net.ipv4.tcp_syncookies = 1  
net.ipv4.tcp_tw_reuse = 1  
net.ipv4.tcp_tw_recycle = 1  
net.ipv4.tcp_fin_timeout = 30  
net.ipv4.ip_local_port_range = 1024  65000  
net.ipv4.tcp_max_syn_backlog = 2048 
# 當即生效
[root@localhost ~]# /sbin/sysctl -p

參考

https://segmentfault.com/a/1190000019864583

https://blog.csdn.net/jinguangliu/article/details/88256051

https://cloud.tencent.com/developer/article/1173786

https://blog.csdn.net/weixin_34392906/article/details/86021056

https://www.cnblogs.com/OnlyXP/archive/2007/09/29/911269.html

 

1.6 SSH服務優化(關閉DNS解析,修改端口) file.managed service

[root@linux-node1 /srv/salt/base/init]# cat ssh.sls 
sshd-config:
  file.managed:
    - name: /etc/ssh/sshd_config
    - source: salt://init/files/sshd_config
    - user: root
    - group: root
    - mode: 600
  service.running:
    - name: sshd
    - enable: True
    - reload: True
    - watch:
      - file: sshd-config
[root@linux-node1 /srv/salt/base/init]# cp /etc/ssh/sshd_config files/sshd_config 
[root@linux-node1 /srv/salt/base/init]# vim files/sshd_config 

 

1.7 精簡開機系統服務(只開啓SSHD服務) service.disabled

只是舉個例子

[root@linux-node1 /srv/salt/base/init]# cat thin.sls
postfix:
  service.dead:
    - enable: False

必須開的幾個任務

    crond: 計劃任務

    network:網絡服務,控制啓用網卡

    rsyslog/syslog:操做系統日誌服務

    ssh: ssh遠程服務

    systat: 服務器性能監控工具

[root@localhost ~]# systemctl list-unit-files |grep enabled

參考博客

https://blog.51cto.com/9625010/2385687?source=dra

https://blog.51cto.com/cubix/1925264

https://blog.csdn.net/seven_begain/article/details/71213697

https://blog.csdn.net/codetz/article/details/52275721


1.8 DNS解析(必備) file.managed /etc/resolv.conf

[root@linux-node1 /srv/salt/base/init]# cat dns.sls
/etc/resolv.conf:
  file.managed:
    - source: salt://init/files/resolv.conf
    - user: root
    - group: root
    - mode: 644
[root@linux-node1 /srv/salt/base/init]# cp /etc/resolv.conf files/resolv.conf 
[root@linux-node1 /srv/salt/base/init]# vim files/resolv.conf 


1.9 歷史記錄優化histroy(記錄時間,用戶)file.managed /etc/profile

[root@linux-node1 /srv/salt/base/init]# cat history.sls 
history-init:
  file.append:
    - name: /etc/profile
    - text:
      - export HISTTIMEFORMAT="%F %T `whoami` "

 

1.10 設置終端超時時間(安全考慮) file.managed /etc/profile

[root@linux-node1 /srv/salt/base/init]# cat tty-timeout.sls
tty-timeout:
  file.append:
    - name: /etc/profile
    - text:
      - export TMOUT=30000000

 

1.11 配置yum源(必備) file.managed

[root@linux-node1 /srv/salt/base/init]# cat yum-repo.sls 
/etc/yum.repos.d/epel-7.repo:
  file.managed:
    - source: salt://init/files/epel-7.repo
    - user: root
    - group: root
    - mode: 644
[root@linux-node1 /srv/salt/base/init]# cp /etc/yum.repos.d/epel-7.repo files/epel-7.repo 

什麼是EPEL?

EPEL的全稱叫 Extra Packages for Enterprise Linux 。
EPEL是由 Fedora 社區打造,爲 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟件包的項目。
裝上了 EPEL以後,就至關於添加了一個第三方源

https://www.cnblogs.com/gaoyuechen/p/7683471.html

https://www.cnblogs.com/fps2tao/p/7580188.html

 

安裝repo (SaltStack repository and key)

方法1:

[root@localhost ~]# yum install https://repo.saltstack.com/py3/redhat/salt-ppy3-repo-latest.el7.noarch.rpm

方法2:aliyun鏡像  https://mirrors.aliyun.com

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/repo/epel-7.repo

更新

[root@localhost ~]# yum clean expire-cache

 

1.12 安裝各類agent(必備) pkg file service jinja模板  zabbix

 zabbix 待定


1.13 基礎用戶(應用用戶 user group),用戶登陸提醒,sudo權限設置(必備)

[root@linux-node1 /srv/salt/base/init]# cat user-redhat.sls 
redhat-user-group:
  group.present:
    - name: redhat
    - gid: 1000

  user.present:
    - name: redhat
    - fullname: redhat
    - shell: /sbin/bash
    - uid: 1000
    - gid: 1000

linux命令

[root@localhost ~]# id redhat
[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# usermod -h
[root@localhost ~]# groupmod -h

/bin: 是系統的一些指令.
/sbin: 通常是指超級用戶指令.
/usr/bin: 是你在後期安裝的一些軟件的運行腳本.

 

1.14 經常使用基礎命令,命令別名(必備 screen lrzsz tree openssl telnet iftop iotop sysstat wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed pkgs

[root@linux-node1 /srv/salt/base/init]# cat pkg-base.sls 
include:
  - init.yum-repo

base-install:
  pkg.installed:
    - pkgs:
      - screen
      - lrzsz
      - tree
      - openssl
      - telnet
      - iftop
      - iotop
      - sysstat
      - wget
      - dos2unix
      - lsof
      - net-tools
      - mtr
      - unzip
      - zip
      - vim-enhanced
      - bind-utils
    - require:
      - file: /etc/yum.repos.d/epel-7.repo
yum install screen lrzsz tree openssl telnet iftop iotop sysstat wget dos2unix lsof net-tools mtr unzip zip bind-utils vim-enhanced -y

說明

vim-enhanced 
unzip
zip 
wget 
tree
telnet # 登陸遠程主機
iotop # io利用率
screen # 命令行終端切換的自由軟件
openssl # 安全套接字層密碼庫
mtr # 網絡診斷工具。它結合了 traceroute 和 ping 這兩個命令的功能
bind-utils # bind是linux系統下的一個DNS服務程序.bind-utils
net-tools # network的命令
lsof # 用於查看你進程開打的文件
dos2unix # DOS格式的文本文件轉換成UNIX格式的
iftop # 查看網絡流量信息的軟件
lrzsz # Linux服務器和window互傳文件
sysstat # sysstat提供了Linux性能監控的工具集,包括sar、sadf、mpstat、iostat、pidstat
https://blog.51cto.com/fangwei009/2088551
iostat - 提供CPU統計,存儲I/O統計(磁盤設備,分區及網絡文件系統)
mpstat - 提供單個或組合CPU相關統計
pidstat - 提供Linux進程級別統計:I/O、CPU、內存等
sar - 收集、報告、保存系統活動信息:CPU、內存、磁盤、中斷、網絡接口、TTY、內核表等
sadc - 系統活動數據收集器,做爲sar後端使用
sa1 - 收集系統活動平常數據,並二進制格式存儲,它做爲sadc的工具的前端,能夠經過cron來調用
sa2 - 生成系統每日活動報告,一樣可做爲sadc的工具的前端,能夠經過cron來調用
sadf - 能夠以CSV、XML格式等顯示sar收集的性能數據,這樣很是方便的將系統數據導入到數據庫中,或導入到Excel中來生成圖表
nfsiostat-sysstat: 提供NFS I/O統計
cifsiostat: 提供CIFS統計
View Code

 

1.15 用戶登陸提示、PS1的修改 file.managed file.append

[root@linux-node1 /srv/salt/base/init]# vim /etc/bashrc

 

[root@linux-node1 /srv/salt/base/init]# cat tty-style.sls 
/etc/bashrc:
  file.append:
    - text:
      - export PS1="[\u@\h \w]\\$ "

4.執行

test  一個個執行

[root@linux-node1 /srv/salt/base/init]# salt 'linux-node1*' state.sls init.dns

 top 執行

[root@linux-node1 /srv/salt/base/init]# cat init-all.sls 
include:
  - init.dns
  - init.yum-repo
  - init.firewall
  - init.history
  - init.limit
  - init.ntp-client
  - init.pkg-base
  - init.selinux
  - init.ssh
  - init.sysctl
  - init.thin
  - init.tty-timeout
  - init.tty-style
  - init.user-redhat
[root@linux-node1 /srv/salt/base]# ls
init  top.sls  web
[root@linux-node1 /srv/salt/base]# cat top.sls 
base:
  '*':
    - init.init-all
[root@linux-node1 /srv/salt/base]# salt '*' state.highstate
相關文章
相關標籤/搜索