资源配置
操作系统 | 配置 | 主机名/IP |
---|---|---|
CentOS7.9 | 2C2G | master.saltstack.com/172.16.10.10 |
CentOS7.9 | 2C2G | web01saltstack.com/172.16.10.11 |
CentOS7.9 | 2C2G | web02.saltstack.com/172.16.10.2 |
1.1 基础环境
1.1.1 关闭防火墙
systemctl stop firewalld systemctl disable firewalld
1.1.2 关闭selinux
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config reboot
1.1.3 修改主机名
hostnamectl set-hostname master.saltstack.com hostnamectl set-hostname web01.saltstack.com hostnamectl set-hostname web02.saltstack.com
1.1.4 配置hosts 映射
cat >> /etc/hosts << EOF 172.16.10.10 master.saltstack.com 172.16.10.11 web01.saltstack.com 172.16.10.12 web02.saltstack.com EOF
1.1.5 时间同步
yum -y install chrony systemctl start chronyd chronyc sources -v
1.1.6 配置下载saltstack 的yum 源
sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
1.2 安装salt-master并配置
-
在master节点执行
# salt-master节点安装 yum -y install salt-master # 修改master节点配置文件 vim /etc/salt/master interface: 172.16.10.10 auto_accept: True file_roots: base: - /srv/salt/ pillar_roots: base: - /srv/pillar pillar_opts: True nodegroups: web01group: 'web01.saltstack.com' web02group: 'web02.saltstack.com' ================配置项详细含义如下================ #默认的master文件全部是注释的。首先需要修改主控端配置文件中的监听地址。需要注意的是为了安全,监听的地址一定要写私网地址 interface: 172.16.10.10 #设置允许被控端自动认证,只要被控端设置完主控端的IP地址后启动服务,主控端就会允许被控端自动认证,以避免以后每次运行salt-key来确认证书信任 auto_accept: True #修改saltstack文件根目录位置 file_roots: base: - /srv/salt/ #设置分组 nodegroups: web01group: 'web01.saltstack.com' web02group: 'web02.saltstack.com' #开启pillar功能 pillar_opts: True #设置pillar的主目录,去掉注释 pillar_roots: base: - /srv/pillar ================================================== # 创建目录pillar 和 saltstack文件目录 mkdir /srv/pillar mkdir /srv/salt # 启动salt-master systemctl start salt-master systemctl enable salt-master
1.3 安装配置salt-minion
# minion节点都要执行安装 yum -y install salt-minion # 修改minion 配置文件 ## web01节点 vim /etc/salt/minion master: 172.16.10.10 id: web01.saltstack.com ## web02节点 vim /etc/salt/minion master: 172.16.10.10 id: web02.saltstack.com ========================================================= # 启动salt-minion systemctl start salt-minion systemctl enable salt-minion
-
测试 Minion 是否连接正常,master节点执行
salt '*' test.ping
1.4 将目录下的定制文件同步到被控机上运行
创建 grains 目录,需要将目录下的定制文件同步到被控机上运行;然后才能正常获取被控机打开文件句柄数
mkdir -p /srv/salt/_grains vim /srv/salt/_grains/nginx_config.py #!/usr/bin/python # 这个适用于python3版本 import os,sys,subprocess def NginxGrains(): ''' return Nginx config grains value ''' grains = {} max_open_file=65535 try: getulimit = subprocess.getstatusoutput('source /etc/profile;ulimit -n') except: pass if getulimit[0]==0: max_open_file = int(getulimit[1]) grains['max_open_file'] = max_open_file return grains ============================================================ # 查看grains最大文件数 salt '*' grains.item max_open_file # 同步 grains 模块 salt '*' saltutil.sync_all
1.5 配置 pilllar文件和state文件
# 在主控端上创建入口文件 top.sls,入口文件的作用是定义 pillar 的数据覆 盖被控主机的有效域范围 vim /srv/pillar/top.sls base: web01group: ##组名 - match: nodegroup - web01server ##设置包括 web01server.sls web02group: ##组名 - match: nodegroup - web02server ##设置包括 web02server.sls ========================================================== # “web01group”和”web02group”是/etc/salt/master 中定义的不同的组,对每一个组编写 一个对应的文件指定配置,这里使用的是“web01server”和”web02server”,再分别定义不同 组主机的 Nginx 的根目录 vim /srv/pillar/web01server.sls nginx: root: /data =========================================================== vim /srv/pillar/web02server.sls nginx: root: /www =========================================================== # 使用以下命令查看 pillar 配置的情况 salt '*' pillar.items ========================================================== # 定义 state 的入口 top.sls 文件,注意和 pillar 的入口文件名字一样 vim /srv/salt/top.sls base: '*': - nginx ========================================================= # 定义被控机执行的状态,安装 Nginx 软件、配置、启动 vim /srv/salt/nginx.sls nginx: pkg: - installed file.managed: - source: salt://nginx/nginx.conf - name: /etc/nginx/nginx.conf - user: root - group: root - mode: 644 - template: jinja service.running: - enable: True - reload: True - watch: - file: /etc/nginx/nginx.conf - pkg: nginx ====================================================
1.6 创建nginx配置文件模板
-
使用 jinja 模板定义 Nginx 配置文件 nginx.conf,首先创建一个 nginx 目录,因为上面定义了 Nginx 配置文件的源路径
mkdir /srv/salt/nginx vim /srv/salt/nginx/nginx.conf user nginx; worker_processes {{grains['num_cpus']}}; {% if grains['num_cpus'] ==1 %} worker_cpu_affinity 10; {% elif grains['num_cpus'] ==2 %} worker_cpu_affinity 01 10; {% elif grains['num_cpus'] == 4 %} worker_cpu_affinity 0001 0010 0100 1000; {% elif grains['num_cpus'] == 8 %} worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; {% else %} worker_cpu_affinity 0001 0010 0100 1000; {% endif %} worker_rlimit_nofile {{ grains['max_open_file'] }}; error_log /var/log/nginx_error.log; pid /var/run/nginx.pid; events { worker_connections {{ grains['max_open_file'] }}; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 60; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' ; server{ listen 80 default_server; server_name _; location / { root {{ pillar['nginx']['root'] }}; index index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
1.7 同步刷新 state 配置,创建Nginx服务
# minion 节点都要安装安装 epel源 yum -y install epel-release # minion同步,刷新 state 配置 salt '*' state.highstate # 验证 ##在minion节点查看nginx服务状态 systemctl status nginx