Linux自动化运维之SaltStack实践

         1.1、环境

linux-node1(master服务端) 192.168.0.15
linux-node2(minion客户端) 192.168.0.16

1.2、SaltStack三种运行模式介绍

Local 本地
Master/Minion 传统运行方式(server端跟agent端)
Salt SSH SSH

1.3、SaltStack三大功能

  • 远程执行
  • 配置管理
  • 云管理

1.4、SaltStack安装基础环境准备

[root@linux-node1 ~]# cat /etc/redhat-release  ##查看系统版本

CentOS release 6.7 (Final)

[root@linux-node1 ~]# uname -r ##查看系统内核版本

2.6.32-573.el6.x86_64

[root@linux-node1 ~]# getenforce ##查看selinux的状态

Enforcing

[root@linux-node1 ~]# setenforce 0 ##关闭selinux

[root@linux-node1 ~]# getenforce

Permissive

[root@linux-node1 ~]# /etc/init.d/iptables stop

[root@linux-node1 ~]# /etc/init.d/iptables stop

[root@linux-node1 ~]# ifconfig eth0|awk -F ‘[: ]+’ ‘NR==2{print $4}’ ##过滤Ip地址

192.168.0.15

[root@linux-node1 ~]# hostname ##查看主机名

linux-node1.zhurui.com

[root@linux-node1 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo  ##安装salt必须使用到epel源

1.4、安装Salt

服务端:

[root@linux-node1 yum.repos.d]# yum install -y salt-master salt-minion ##salt-master包跟salt-minion包

[root@linux-node1 yum.repos.d]# chkconfig salt-master on  ##加入到开机自动启动

[root@linux-node1 yum.repos.d]# chkconfig salt-minion on  ##加入到开机自动启动

[root@linux-node1 yum.repos.d]# /etc/init.d/salt-master start   ##启动salt-master

Starting salt-master daemon:                                   [  OK  ]

启动到这里需要修改minion配置文件,才能启动salt-minion服务

[root@linux-node1 yum.repos.d]# grep ‘^[a-z]’ /etc/salt/minion

master: 192.168.0.15  ##指定master主机

[root@linux-node1 yum.repos.d]# cat /etc/hosts

192.168.0.15 linux-node1.zhurui.com linux-node1  ##确认主机名是否解析

192.168.0.16 linux-node2.zhurui.com linux-node2

解析结果:

  1. [root@linux-node1 yum.repos.d]# ping linux-node1.zhurui.com
  2. PING linux-node1.zhurui.com (192.168.0.15)56(84) bytes of data.
  3. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=1 ttl=64 time=0.087 ms
  4. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=2 ttl=64 time=0.060 ms
  5. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=3 ttl=64 time=0.053 ms
  6. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=4 ttl=64 time=0.060 ms
  7. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=5 ttl=64 time=0.053 ms
  8. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=6 ttl=64 time=0.052 ms
  9. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=7 ttl=64 time=0.214 ms
  10. 64 bytes from linux-node1.zhurui.com (192.168.0.15): icmp_seq=8 ttl=64 time=0.061 ms

[root@linux-node1 yum.repos.d]# /etc/init.d/salt-minion start  ##启动minion客户端

Starting salt-minion daemon:                               [  OK  ]

[root@linux-node1 yum.repos.d]#

客户端:

[root@linux-node2 ~]# yum install -y salt-minion  ##安装salt-minion包,相当于客户端包

[root@linux-node2 ~]# chkconfig salt-minion on  ##加入开机自启动

[root@linux-node2 ~]# grep ‘^[a-z]’ /etc/salt/minion   ##客户端指定master主机

master: 192.168.0.15

[root@linux-node2 ~]# /etc/init.d/salt-minion start  ##接着启动minion

Starting salt-minion daemon:                               [  OK  ]

阅读更多

rsync+inotify实时同步环境部署记录

 

 

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足。
首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。
其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。

基于以上两种情况,可以使用rsync+inotify的组合来解决,可以实现数据的实时同步。

inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。
在使用rsync首次全量同步后,结合inotify对源目录进行实时监控,只有有文件变动或新文件产生,就会立刻同步到目标目录下,非常高效使用!

———————————————————————————————————–
下面分享下我在实际工作中的一个rsync+inotify案例(其实是个网站图片备份方案):

需求说明:
分别将
192.168.1.106的/Data/fangfull_upload和/Data/erp_upload
192.168.1.57的/Data/xqsj_upload/和/Data/fanghu_upload_src
192.168.1.139的/Data/Static_img/webroot/ssapp-prod和/usr/local/nginx/html/ssapp.prod
实时同步到
192.168.1.5的/home/backup/image-back目录下对应的fangfull_upload、erp_upload、xqsj_upload、fanghu_upload_src、ssapp-prod和ssapp.prod目录。

这样的话:
(1)192.168.1.106、192.168.1.57、192.168.1.139这三台服务器是源服务器,作为rsync的客户端,部署rsync+inotify。
(2)192.168.1.5是目标服务器,作为rsync的服务端。只需要安装配置rsync即可,不需要安装inotify。

—————————————————————
详细部署过程,记录如下:

第一部分:在目标服务器192.168.1.5上部署rsync服务端。

1)关闭selinux
[root@bastion-IDC ~]# vim /etc/selinux/config
SELINUX=disabled
[root@bastion-IDC ~]# setenforce 0

2)防火墙上允许以上三台源服务器访问它的22端口和873端口
[root@bastion-IDC ~]# vim /etc/sysconfig/iptables
…….
…….
-A INPUT -s 192.168.1.106 -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -s 192.168.1.57 -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -s 192.168.1.139 -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -s 192.168.1.106 -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT
-A INPUT -s 192.168.1.57 -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT
-A INPUT -s 192.168.1.139 -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT

[root@bastion-IDC ~]# /etc/init.d/iptables restart

如若hosts.allow里面做了限制,同样也要开放以上三台源服务器的权限
[root@bastion-IDC ~]# vim /etc/hosts.allow
#
# hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See ‘man 5 hosts_options’ and ‘man 5 hosts_access’
# for information on rule syntax.
# See ‘man tcpd’ for information on tcp_wrappers
#
sshd:192.168.1.106,192.168.1.57,192.168.1.139:allow
sshd:all:deny
[root@bastion-IDC ~]# cat /etc/hosts.deny
#
# hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# The rules in this file can also be set up in
# /etc/hosts.allow with a ‘deny’ option instead.
#
# See ‘man 5 hosts_options’ and ‘man 5 hosts_access’
# for information on rule syntax.
# See ‘man tcpd’ for information on tcp_wrappers
#

阅读更多