06 saltstack生产实例-需求

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

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

重新生成网卡

https://blog.csdn.net/weixin_42291597/article/details/83690681

固定ip  

不能改为bootproto=static ,否则上不了外网

 

[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

 

 

重启network

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

 

 

 

(3)对每个机器,修改hostname

显示hostname

临时
# 重启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

实质:网络上的hostname

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

/etc/hosts 

此文件是在网络上使用的,用于解析计算机名称和IP地址的映射关系

[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

 

结论:

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

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

 

posted @ 2019-08-08 21:35  venicid  阅读(321)  评论(0编辑  收藏  举报