saltstack搭建集群详解1

使用saltstack完成这个架构图:

配置思路

(1).系统初始化

Base环境下存放所有系统都要执行的状态,调整内核参数,dns,装zabbix-agent等

(2).功能模块(如:上面的haproxy)

如上面的haproxy nginx php memcached等服务,每一个服务都建一个目录,把每一个服务要执行的状态都放在这个目录下.

(3).业务模块

以业务为单位,一个业务里可能包含haproxy,nginx,php等,业务需要什么服务就把功能模块里对应的服务include

1.编辑配置文件修改file_roots,并且建立对应目录

[[email protected] ~]# vim /etc/salt/master

file_roots:

base:

- /srv/salt/base

test:

- /srv/salt/test

prod:

- /srv/salt/prod

[[email protected] ~]# /etc/init.d/salt-master restart

注:top.sls必须放在base环境下

[[email protected] ~]# mkdir /srv/salt/test    测试环境目录

[[email protected] ~]# mkdir /srv/salt/base    基础环境目录

[[email protected] ~]# mkdir /srv/salt/prod    生产环境目录

2.系统初始化模块

[[email protected] ~]# mkdir /srv/salt/base/init/        创建一个系统初始化的目录

[[email protected] ~]# mkdir /srv/salt/base/init/files/     创建一个文件目录,存放一些初始化需要的文件

[[email protected] ~]# cd /srv/salt/base/

[[email protected] base]# tree

├── init

│   ├── files

└── top.sls

[[email protected] base]# cd init/

(1).配置dns

[[email protected] init]# cat dns.sls

/etc/resolv.conf:                   #这里是指定name,这里没有指定ID

file.managed:                   #文件管理方法

- source: salt://init/files/resolv.conf    #这个路径式相当与配置文件中/srv/salt/base/

- user: root

- group: root

- mode : 644

[[email protected] init]# cat files/resolv.conf

nameserver 192.168.10.1

(2)历史命令显示时间

[[email protected] init]# cat history.sls

/etc/profile:

file.append:                      #文件追加的方法

- text:

- export HISTTIMEFORMAT="%F %T `whoami`"    #执行之后该语句会被追加到/etc/profile

(3).log日志记录谁在什么时间使用了什么命令

[[email protected] init]# cat audit.sls

/etc/bashrc:

file.append:

- text:

- export PROMPT_COMMAND=‘{ msg=$(history 1|{ read x y;echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg";}‘

(4)内核调优

[[email protected] init]# cat sysctl.sls

vm.swappiness:

sysctl.present:

- value: 0

net.ipv4.ip_local_port_range:

sysctl.present:

- value: 10000 65000

fs.file-max:

sysctl.present:

- value: 100000

注:上面的路径

/proc/sys/net/ipv4/ip_local_port_range     #监听端口

/proc/sys/fs/file-max              #打开最大文件数

/proc/sys/vm/swappiness             #交换分区

(5)将上面的状态include到 env_init.sls

[[email protected] init]# cat env_init.sls

include:

- init.dns

- init.history

- init.audit

- init.sysctl

(6).编写top.sls执行以上状态

[[email protected] init]# vim /srv/salt/base/top.sls

[[email protected] init]# cat /srv/salt/base/top.sls

base:

‘*‘:

- init.env_init    #这里只需要执行init目录下的env_init.sls即可,

(7)注:以上环境中用到的一些命令

export HISTTIMEFORMAT="%F %T `whoami`"    #该命令是将%F %T `whoami`命令执行的结果赋给变量HISTTIMEFORMAT,用export将其变成环境变量

export PROMPT_COMMAND=‘{ msg=$(history 1|{ read x y;echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg";}‘

执行该命令之后会在log日志里记录用户使用命令的情况,如:

[[email protected] base]# uptime

05:17:38 up  4:08,  4 users,  load average: 0.00, 0.00, 0.00

[[email protected] base]# tail -1 /var/log/messages

Aug 11 05:17:38 node1 root: [euid=root]:root pts/3 2017-08-11 04:07 (192.168.10.1):[/srv/salt/base]uptime

[[email protected] init]# salt "*" state.highstate test=True    #这里可以测试一下前面所配置的是否成功

3.功能模块-------基础包模块

[[email protected] ~]# mkdir /srv/salt/prod/pkg     #基础包目录

[[email protected] ~]# cd /srv/salt/prod/pkg/

[[email protected] pkg]# vim pkg-init.sls        #安装一些基础的包

[[email protected] pkg]# cat pkg-init.sls

pkg-init:                     #这里就是ID号,唯一性

pkg.installed:                #安装包的模块.方法

- names:                 #安装包的名字

- gcc

- gcc-c++

- glibc

- make

- autoconf

- openssl

- openssl-devel

4.功能模块--------haproxy模块

#安装haproxy说明:该模块采用编译安装,用模块安装之前先用一台主机测试一下

#cd /usr/local/src/

#tar xf haproxy-1.6.2.tar.gz

#cd haproxy-1.6.2

#make TARGET=linux26 PREFIX=/usr/local/haproxy &&make install PREFIX=/usr/local/haproxy

#vim haproxy.init 启动脚步路径修改

#BIN=/usr/local/haproxy/sbin/$BASENAME

#修改之后

#cp haproxy.init /srv/salt/prod/haproxy/files/

[[email protected] ~]# mkdir /srv/salt/prod/haproxy                    #haprox模块目录

[[email protected] ~]# mkdir /srv/salt/prod/haproxy/files                 #存放haprox的一些文件

[[email protected] ~]# ll /srv/salt/prod/haproxy/files/

-rw-r--r--. 1 root root 1538976 Aug 11  2017 haproxy-1.6.2.tar.gzhaproxy    #源码包

-rw-r--r--. 1 root root    2395 Aug 11 08:31 haproxy.inithaproxy         #启动脚本

[[email protected] ~]# cd /srv/salt/prod/haproxy/

[[email protected] haproxy]# vim install.sls

include:

- pkg.pkg-init                        #这是个相对目录,相对于配置文件中的/srv/salt/prod/,意思是调用/srv/salt/prod/目录下的pkg目录下的pkg-init.sls

haproxy-install:                         #ID

file.managed:

- name: /usr/local/src/haproxy-1.6.2.tar.gz        #name 声明,没有ID可以把name声明放在ID位置

- source: salt://haproxy/files/haproxy-1.6.2.tar.gz    #这里也是相对路径/srv/salt/prod/,源码包所在

- user: root

- group: root

- mode: 755

cmd.run:                 #将要执行的命令放在这个模块下

- name: cd /usr/local/src/ && tar xf haproxy-1.6.2.tar.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy &&make install PREFIX=/usr/local/haproxy

- unless: test -d /usr/local/haproxy    #/usr/local/haproxy 目录不存在才执行cmd命令

- require:                #指定依赖

- pkg: pkg-init              #依赖pkg-init这个ID的pkg模块,这个模块必须执行成功才执行本模块cmd.run

- file: haproxy-install        #依赖haproxy-install这个ID的file模块

haproxy-init:

file.managed:

- name: /etc/init.d/haproxy

- source: salt://haproxy/files/haproxy.init

- user: root

- group: root

- mode: 755

- require:

- cmd: haproxy-install

cmd.run:

- name: chkconfig --add haproxy

- unless: chkconfig --list|grep haproxy

- require:

- file: haproxy-init

net.ipv4.ip_nonlocal_bind:            #/proc/sys/net/ipv4/ip_nonlocal_bind,这里只需要写相对路径

sysctl.present:#sysctl           #模块,管理内核模块

- value: 1              #默认不让监听非本地ip,改为1后可以监听

haproxy-config-dir:              #ID

file.directory:

- name: /etc/haproxy          #创建配置文件目录

- user: root

- group: root

- mode: 755

[[email protected] haproxy]# salt ‘node1‘ state.sls haproxy.install env=prod     #手动测试一下

5.业务模块-------haproxy模块

[[email protected] ~]# mkdir /srv/salt/prod/cluster

[[email protected] ~]# mkdir /srv/salt/prod/cluster/files

[[email protected] ~]# cd /srv/salt/prod/cluster/files

[[email protected] files]# vim haproxy-outside.cfg        #负载均衡文件

global

maxconn 100000

chroot /usr/local/haproxy

uid 99

gid 99

daemon

nbproc 1

pidfile /usr/local/haproxy/logs/haproxy.pid

log 127.0.0.1 local3 info

defaults

option http-keep-alive

maxconn 100000

mode http

timeout connect 5000ms

timeout client 5000ms

timeout server 5000ms

listen stats

mode http

bind 0.0.0.0:8888

stats enable

stats uri /haproxy-status

stats auth haproxy:saltstack

frontend frontend_www_example_com

bind 192.168.10.150:80

mode http

option httplog

log global

default_backend backend_www_example_com

backend backend_www_example_com

option forwardfor header X-REAL-IP

option httpchk HEAD / HTTP/1.0

balance roundrobin

server web-node1  192.168.10.129:8080 check inter 2000 rise 30 fall 15

server web-node2  192.168.10.128:8080 check inter 2000 rise 30 fall 15

[[email protected] cluster]# cd /srv/salt/prod/cluster/

[[email protected] cluster]# vim haproxy-outside.sls

[[email protected] cluster]# cat haproxy-outside.sls

include:

- haproxy.install                      #执行haproxy目录下的install.sls

haproxy-service:#ID

file.managed:

- name: /etc/haproxy/haproxy.cfg             #安装之后配置文件的名字

- source: salt://cluster/files/haproxy-outside.cfg    #源配置文件,前面已经写好

- user: root

- group: root

- mode: 644

service.running:            #service模块下的running方法,作用:启动服务

- name: haproxy           #服务名字

- enable: True             #是否开机启动

- reload: True           #是否reload,如果不加,配置文件变了会restart

- require:

- cmd: haproxy-init      #依赖haproxy-init下的cmd,意思是启动脚本那步必须执行成功

- watch:              #关注某个文件状态

- file: haproxy-service    #关注haproxy-service ID下的file模块里的文件,文件改变会reload

 

6.编辑top.sls

[[email protected] base]# cd /srv/salt/base/

[[email protected] base]# vim top.sls

base:

‘*‘:

- init.env_init                   #所有主机都执行init目录下的env_init.sls

prod:

‘node1‘:

- cluster.haproxy-outside              #node1执行cluster目录下的haproxy-outside.sls

‘node2‘:

- cluster.haproxy-outside

[[email protected] base]# salt ‘*‘ state.highstate test=True    #测试执行一下

[[email protected] prod]# salt ‘*‘ state.highstate

使用httpd测试一下

[[email protected] prod]# vim /etc/httpd/conf/httpd.conf

Listen 8080

[[email protected] prod]# cat /var/www/html/index.html

node1

[[email protected] prod]# /etc/init.d/httpd restart

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf

[[email protected] prod]# cat /var/www/html/index.html

Node2

Listen 8080

[[email protected] ~]# /etc/init.d/httpd restart

在网页输入下面的地址登录:

192.168.10.129:8888/haproxy-status

192.168.10.128:8888/haproxy-status

用户haproxy密码saltstack

时间: 2024-10-12 10:26:49

saltstack搭建集群详解1的相关文章

Centos7安装mariadb galera cluster数据库集群 & 详解

#Galera集群特点 集群之间无延时,同步复制.而master-slave主从异步复制,存在延迟. active-active多主,集群内部服务器都是同时写,必须等所有集群内所有数据库都完成数据写入,才会反馈完成,所以不存在数据丢失的情况. 集群节点自动故障转移,如果集群中单个节点故障,失效节点会自动被清除. 扩展方便,只要将新的节点添加到集群,新节点自动复制数据. #Galera集群原理     #主要通过galera插件保证数据的一致性,该数据复制的过程是可认证的复制,原理如下: #解析

Linux集群详解

Linux集群详解 集群或者说是群集:其目的是为了实现将多台计算机组合以来完成特定的任务,比如天气预报,大型网络游戏,这些都需要很大的运算量,单台计算机实现成本太高,而且不显示.那么就需要通过集群的方式,将废弃的或者正在使用的计算机联合起来,结合整体的力量来解决这些问题 集群类型: 1.  负载均衡集群 load blancing ,简称LB 2.  高可用性集群 high availibility,简称 HA 3.  高性能集群 high performance,简称 HP 作用: 1.  负

Openfire Hazelcast集群详解

Openfire Hazelcast集群详解 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs 一.概述 Openfire Hazelcast插件提供了在一个集群上运行多个冗余Openfire服务器的支持.通过把Openfire运行为一个集群,可以把终端的连接分配到多台Openfire服务器上,同时还提供了服务器的故障转移.Hazelcast个插件是Openfire原集群插件的替代,它使用了开源的Hazelcast数据分布框架来代替昂

LVS集群详解

一.什么是集群 LVS(Linux Virtual Server)Linux虚拟服务器,将多台虚拟主机组织起来满足同一个需求.由国人章文嵩开发,通过LVS提供的负载均衡可实现一个高性能.高可用的服务器群集,从而以低成本实现最优的服务性能. 二.集群类型   LB:Load balancing    高可用集群 HA:High Availavility    高可用集群 HP:High Performace     高性能集群 三.lvs的常用集群方式及其详解 1.lvs是由用户空间命令和工作在内

高性能MySQL集群详解(二)

一.通过Keepalived搭建MySQL双主模式的高可用集群系统 1.MySQL Replication介绍: MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一台MySQL服务器(称为Slave)从另一台MySQL服务器(称为Master)上复制日志,然后解析日志并应用到自身的过程.MySQL Replication是单向.异步复制,基本复制过程为:Master服务器首先将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志的循环,这些日志文件可以发送到

MHA 高可用集群详解

一.什么是MHA 传统的主从复制如果主库宕机,其余从库不会自动的代替主库继续工作,这样就不能保证业务的高可用,而MHA就是一个mysql主从复制高可用的解决方案,当主库宕机后,MHA能在1-30秒实现故障检测和故障自动转移,选择一个最优的从库作为主库,同时新的主库还继续与其他从库保持数据一致的状态 二.MHA架构组成 整个MAH架构由两部分组成,即MHA Manager(管理节点),和MHA Node(数据节点),MHA Manager 可以独立部署到一台服务器上(含虚拟机)管理多个主从复制集群

elasticsearch 集群详解

ES为什么要实现集群 在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等. 如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理机器上,从而可以实现高可用.容错性等. es核心存放的是索引. 什么是分片技术 将数据拆分成多台节点进行存放. ES是如何解决高并发 ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制.集群发现.分片负载均衡请求路由. Shards 分片:代表索引分片,es可以把一个完整的索引分

LVS集群详解(持续更新中)

一.LVS(Linux Virtual Server)简介: 背景:在Internet的飞速发展下,对于网络宽带和服务器的要求越来越高.因此,对用硬件和软件的方法实现高可用伸缩.高可用网络服务的需求不断增长.针对高可用伸缩.高可用网络服务的需求章文嵩博士在1988年5月成立了LVS自由软件项目,是基于IP层和基于内容请求分发的负载平衡调度方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的.高可用网络服务的虚拟服务器. 项目目标:使用集群技术和Linux操作系统实现一个高性

负载均衡LVS集群详解

 一.LB--负载均衡 在负载均衡集群中需要一个分发器,我们将其称之为Director,它位于多台服务器的上面的中间层,根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来进行响应请求,而其分发的方式则是根据某个算法进行的. 二.HA--高可用 高可用顾名思义就是服务的可用性比较高,即当我们不会因为某台服务器的宕机,从而造成我们的服务不可用,其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断. 三.LVS: LVS:Linux Virtual Serve