(第二十三周作业)
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