puppt、haproxy

(第二十三周作业)

1、搭建puppt,对haproxy实现分发

需要4台虚拟机
A机:puppet-master,IP地址:192.168.184.110  主机名:puppetmaster
B机:puppet-slave,安装haproxy IP地址:192.168.184.111  主机名:haproxy
C机:puppet-slave,安装nginx IP地址:192.168.184.112  主机名:web1
D机:puppet-slave,安装nginx IP地址:192.168.184.113  主机名:web2

1.1 准备工作

1).时间同步
给4台机器做NTP时间同步
# yum install ntp -y
# crontab -e

*/5 * * * *  /usr/sbin/ntpdate ntp1.aliyun.com  >/dev/null 2>&1

2).主机名解析
修改hosts文件并设置hostname
4机的host文件修改:
#vi /etc/hosts
增加以下内容

192.168.184.110  puppetmaster.localdomain
192.168.184.111  haproxy.localdomain
192.168.184.112  web1.localdomain
192.168.184.113  web2.localdomain

各台主机要修改主机名:
A机:#  hostnamectl set-hostname  puppetmaster
B机:#  hostnamectl set-hostname  haproxy
C机:#  hostnamectl set-hostname  web1
D机:#  hostnamectl set-hostname  web2
3).防火墙
master主机要开放8140端口。
A机:
# firewall-cmd --zone=public --add-port=8140/tcp --permanent
# firewall-cmd --reload

1.2 puppet-master主机安装步骤:

这些操作步骤在A机上执行
1).添加puppet安装包仓库。
# rpm -Uvh https://yum.puppet.com/puppet6/puppet6-release-el-7.noarch.rpm
执行后在/etc/yum.repos.d目录下会产生一个 puppet6.repo文件
2).安装puppetServer
# yum install puppetserver -y
设置PATH
# vi  ~/.bash_profile

export PATH=$PATH:/opt/puppetlabs/bin/

保存后再执行一下
# source  ~/.bash_profile
3).为Puppet Server生成根和中间签名CA.
# puppetserver ca setup
将在 /etc/puppetlabs/puppet/ssl/ca目录下生成证书文件等。
4).启动Puppet Server服务
修改默认的内存设置,默认为2G,最小可以改为512m
# vi  /etc/sysconfig/puppetserver

JAVA_ARGS="-Xms2g -Xmx2g"

可以修改为1g或512m,根据实际需要修改。
5)修改puppet.conf配置文件
#vi  /etc/puppetlabs/puppet/puppet.conf
在文件后面增一行内容:

server = puppetmaster.localdomain

保存文件后启动puppetserver
# systemctl start puppetserver

以上步骤如果由于网络导致puppetserver的rpm包无法下载。可通过编译来安装(这里只是记录在这里,这次不进行此操作,加了删除线已示区别)
1)安装所需的软件
安装jdk1.8以上jdk
上传jdk-8u151-linux-x64.rpm到/root目录下
# cd  /root
# rpm  -ivh  jdk-8u151-linux-x64.rpm
# vi ~/.bash_profile
在最后加上以下两行内容:(JAVA_HOME根据实际jdk安装目录修改)

export  JAVA_HOME=/usr/java/jdk1.8.0_151/jre
export  PATH=$JAVA_HOME/bin:$PATH

保存后再执行一下
# source  ~/.bash_profile
验证jdk环境
# java  -version
安装git
# yum install git-core
安装Leiningen(需要jdk1.8以上)
#curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein>lein
#chmod u+x lein
运行脚本将下载自安装包
#./lein
2)克隆git库中的源代码
$ git clone --recursive git://github.com/puppetlabs/puppetserver
$ cd puppetserver
(如果之前有安装过puppet,使用此命令可以删除旧的配置,# rm -rf ~/.puppetserver)
3)建立config文件
$ ./dev-setup
执行后将生成:~/.puppetlabs 目录和./dev/puppetserver.conf配置文件
lein run -c ./dev/puppetserver.conf

1.3 puppet-slave从机安装步骤:

这些操作步骤在BCD机上执行:
1).添加puppet安装包仓库。
# rpm -Uvh https://yum.puppet.com/puppet6/puppet6-release-el-7.noarch.rpm
2)安装puppet-agent
# yum install puppet-agent
# /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
# vi ~/.bash_profile

export PATH=/opt/puppetlabs/bin:$PATH

3)修改puppet.conf配置文件
#vi /etc/puppetlabs/puppet/puppet.conf
在文件后面增以下内容:

[main]
certname = haproxy.localdomain   #BCD机根据自己的主机名指定不同的certname
server = puppetmaster.localdomain  
environment=production
runinterval=1h

保存文件

1.4 slave向master发起证书申请

发起证书申请请求,在BCD机上执行:
#puppet agent --test
申请成功后,等待master签名
再到A机上执行:
查看哪些机器需要证书申请请求
puppetserver ca list --all
审批通过证书申请,即进行签名
puppetserver ca sign --certname haproxy.localdomain
puppetserver ca sign --certname web1.localdomain
puppetserver ca sign --certname web2.localdomain

1.5 编写站点清单文件

1)准备安装文件和配置文件
#mkdir  /etc/puppetlabs/puppet/manifests/files
在这个目录下上传
haproxy-1.7.9.tar.gz    #haproxy安装包文件
haproxy.cfg                 #haproxy配置文件
hb.html                       #nginx心跳健康检查文件
haproxy.cfg的文件内容如下:

global
    log 127.0.0.1  local0
    maxconn 4096
    chroot    /usr/local/haproxy
    uid 99#使用nobody用户的uid
    gid 99 #使用nobody用户的  用户组
    daemon #以守护进程形式运行haproxy
    nbproc 1 #启动1个haproxy实例。设置成和CPU核心数一样
    pidfile  /usr/local/haproxy/run/haproxy.pid    #进程ID
defaults
    log    global
    log    127.0.0.1      local3        #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7
    mode    http           #工作模式默认采用http模式,Nginx服务要采用这种方式
    option  httplog       #日志类别,记载http日志
    option  httpclose      #每次请求完毕后主动关闭http通道,
    option  dontlognull    #不记录空连接的日志

    option  forwardfor     #使后端服务器可获得客户端真实ip
    option  redispatch     #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
    retries 2              #2次连接失败就认为服务器不可用
    maxconn 2000           #最大连接数
    balance roundrobin      #负载均衡算法轮询方式
    stats  uri    /haproxy-stats          #haproxy 监控页面的访问地址
    timeout connect      5000             #连接超时时间。 单位毫秒
    timeout client       50000            #客户端连接超时时间
    timeout server      50000             #服务器端连接超时时间
    option  httpchk GET /hb.html     #健康检查页面
frontend nginx #前端名称
    bind 0.0.0.0:80 #监听80端口,请求会被转发到后端
    default_backend nginx_back #后端名称
backend nginx_back #后端名称,给上文引用
    server s1 192.168.184.112:80 weight 3 check #后端的主机 IP 通过weight设置权重
    server s2 192.168.184.113:80 weight 3 check 

hb.html的文件内容如下:

OK!

2) 在A机编写站点清单文件
#cd /etc/puppetlabs/puppet/manifests/
#vi site.pp

node 'haproxy.localdomain'{
  package{'gcc':
    ensure => installed,
    procider => yum
  }
  package{'gcc-c++':
    ensure => installed,
    procider => yum
  }
  package{'openssl-devel':
    ensure => installed,
    procider => yum
  }
  file{'haproxy':
    ensure  => file,
    path => 'root/haproxy-1.7.9.tar.gz',
    source => '/etc/puppetlabs/puppet/manifests/files/haproxy-1.7.9.tar.gz'
  }
  exec{'tar':
    cwd => '/root',
    command => 'tar -zxf haproxy-1.7.9.tar.gz',
    path => ['/bin','/sbin','/usr/bin','/usr/sbin']
  }
  exec{'installhaproxy':
    cwd => '/root/haproxy-1.7.9',
    command => ' make    TARGET=linux2628    PREFIX=/usr/local/haproxy  && make install',
    path => ['/bin','/sbin','/usr/bin','/usr/sbin']
  }
  file{'haproxyconfdir':
    ensure => directory,
    path => '/usr/local/haproxy/etc'
  }
  file{'haproxyconf':
    ensure  => file,
    path => '/usr/local/haproxy/etc/haproxy.cfg'
    source => '/etc/puppetlabs/puppet/manifests/files/haproxy.cfg'
  }
  exec{'starthaproxy':
    command => '/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg',
  }
  Package['gcc']->Package['gcc-c++']->Package['openssl-devel']->File['haproxy']->Exec['tar']->Exec['installhaproxy']->File['haproxyconfdir']->File['haproxyconf']->Exec['starthaproxy']
}
node 'web1.localdomain'{
  package{'nginx':
    ensure => installed,
    procider => yum
  }
   file{'hb.html':
      ensure => file,
      path => '/usr/share/nginx/html/hb.html',
      source => '/etc/puppetlabs/puppet/manifests/files/hb.html'
   }
    service{'nginx':
       ensure => running,
       enable => true,
       hasrestart => true,
       hasstatus => true
    }
    Package['nginx']->File['hb.html']->Service['nginx']
}

node 'web2.localdomain'{
  package{'nginx':
      ensure => installed,
       procider => yum
   }
    file{'hb.html':
         ensure => file, 
         path => '/usr/share/nginx/html/hb.html',
        source => '/etc/puppetlabs/puppet/manifests/files/hb.html' 
   }
    service{'nginx':
         ensure => running,
         enable => true,
         hasrestart => true,
         hasstatus => true 
    }
    Package['nginx']->File['hb.html']->Service['nginx']
}

1.6 启动客户端服务

在BCD机上执行
# puppet agent -v  --no-daemonize 
然后访问测试http://192.168.184.111

你可能感兴趣的:(puppt、haproxy)