利用puppet管理solrcloud
主脚本
1./etc/puppet/manifests/zookeeper.pp
/* vim set :expandtab:shiftwidth=4:tabstop=4:smarttab: */
#= globalvar
#= sae
#= cron
#= user
#= account
#= stdlib
#= zookeeper
#= solr
#= jetty
node /sae$/ {
include globalvar
include globalvar::user
include account::list
stage { "basic": before => Stage["main"] }
class { "sae::directory":
logs => true,
stage => "basic",
}
$idc = getidc($clientcert)
class { "sae::hosts": idc => $idc, stage => "basic", hosts=>[
"10.67.15.144 mongodb-internal.sae.sina.com.cn",
] }
class { "sae::resolv": idc => $idc }
if $idc == 'bx' {
$ipaddress_internal = $ipaddress_eth1
$netdev_internal = "eth1"
} else {
if 'bond0' in $interfaces {
$ipaddress_internal = $ipaddress_bond0
$dev_inter = 'bond0'
} elsif 'eth1' in $interfaces {
$ipaddress_internal = $ipaddress_eth1
$dev_inter = 'eth1'
}
}
$gateway = getgateway($ipaddress_internal)
class { "sae::route": stage => "basic", rules => [
"add 10.0.0.0/8 via $gateway dev $netdev_internal",
"add 172.16.0.0/16 via $gateway dev $netdev_internal",
"add 192.168.0.0/16 via $gateway dev $netdev_internal",
]}
class { "sae::yum": }
class { "sae::pkg": sendmail => "STOP", }
class { "sae::cron": }
class { "sae::ntpdate": }
class { "sae::sysctl": }
class { "sae::iptables": }
class { "sae::bashrc": }
class { "sae::hostname": }
class { "user": users => [
$globalvar::user::saere,
$globalvar::user::conglei,
$globalvar::user::shijiang,
$globalvar::user::wanghai1,
$globalvar::user::mingming6,
$globalvar::user::renzhong1,
$globalvar::user::liulei5,
$globalvar::user::lintao3,
$globalvar::user::chenfeng2,
$globalvar::user::liren2,
$globalvar::user::tengfei5,
$globalvar::user::liangqi,
$globalvar::user::wangyang15,
$globalvar::user::zhiyun1,
$globalvar::user::suyang,
$globalvar::user::wanghai1,
$globalvar::user::yuwei5,
$globalvar::user::zhantao,
]}
$admin_accounts = $account::list::all_staff
$absent_admins = difference($account::list::all_staff,$admin_accounts)
account { $admin_accounts: operation => 'add', }
account { $absent_admins: operation => 'del', }
class { "account::sudoers": }
class { "zookeeper":
pkg_version => "3.4.6-1" ,
zookeep_servers => ["server.224=10.13.144.224:9984:9985",
"server.225=10.13.144.225:9984:9985",
"server.226=10.13.144.226:9984:9985",
"server.227=10.13.144.227:9984:9985",
],
}
class { "jetty":
pkg_version => "8.1.15-3" ,
leader_zookeepers => ["-Dbootstrap_confdir=/usr/local/sae/solr/solr.home/collection1/conf",
"-Dcollection.configName=myconf",
"-DnumShards=2",
],
}
class { "solr": pkg_version => "4.6-3" }
}
2./etc/puppet/modules/solr/manifests/init.pp
/* vim:expandtab:shiftwidth=4:tabstop=4:smarttab: */
class solr(
$pkg_version = "",
$index_data = "/data0/solr_data/data",
$maxDocs = "100000",
$maxTime = "1800000",
$cache_size = "10000",
$cache_initialSize = "10000",
$cache_autowarmCount = "5000",
)
{
include globalvar
package { "${globalvar::pkg_prefix}solr":
ensure => $pkg_version,
}
file { "${globalvar::install_prefix}/solr/solr.home/solr.xml":
source => "${globalvar::modulepath}/solr/files/solr.xml",
require => Package["${globalvar::pkg_prefix}solr"],
}
file { "${globalvar::install_prefix}/solr/solr.home/collection1/core.properties":
source => "${globalvar::modulepath}/solr/files/core.properties",
require => Package["${globalvar::pkg_prefix}solr"],
}
file { "${globalvar::install_prefix}/solr/solr.home/collection1/conf/solrconfig.xml":
content => template("solr/solrconfig.xml.erb"),
require => Package["${globalvar::pkg_prefix}solr"],
}
exec { "create_solrdata":
command => "/bin/mkdir -p /data0/solr_data/data/",
unless => "/usr/bin/test -d /data0/solr_data/data/",
require => Package["${globalvar::pkg_prefix}solr"],
}
}
#files就不说了,重点说下erb
3./etc/puppet/modules/zookeeper/manifests/init.pp
/* vim:expandtab:shiftwidth=4:tabstop=4:smarttab: */
class zookeeper (
$myid = $ipaddress,
$pkg_version = "",
$zookeep_servers = [],
)
{
include globalvar
package { "${globalvar::pkg_prefix}zookeeper":
ensure => $pkg_version,
}
exec { "create_zdata":
command => "/bin/mkdir -p ${globalvar::install_prefix}/zookeeper/zdata/",
unless => "/usr/bin/test -d ${globalvar::install_prefix}/zookeeper/zdata/",
}
file { "myid":
path => "${globalvar::install_prefix}/zookeeper/zdata/myid",
content => template("zookeeper/myid.erb"),
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
file { "${globalvar::install_prefix}/zookeeper/conf/zoo.cfg":
content => template("zookeeper/zoo.cfg.erb"),
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
file { "${globalvar::install_prefix}/zookeeper/conf/log4j.properties":
source => "${globalvar::modulepath}/zookeeper/files/log4j.properties",
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
file { "${globalvar::install_prefix}/zookeeper/conf/configuration.xsl":
source => "${globalvar::modulepath}/zookeeper/files/configuration.xsl",
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
file { "${globalvar::install_prefix}/zookeeper/bin/zkServer.sh":
owner => "root",
group => "root",
mode => "755",
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
exec { "zookeeper_restart":
command => "${globalvar::install_prefix}/zookeeper/bin/zkServer.sh restart",
require => Package["${globalvar::pkg_prefix}zookeeper"],
}
}
文件
/etc/puppet/modules/solr/templates/zoo.cfg.erb
# The number of milliseconds of each tick
tickTime=6000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=../zdata
# the port at which the clients will connect
clientPort=9983
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
###for语法
<% @zookeep_servers.each do |zookeep_server| -%>
<%= zookeep_server %>
<% end -%>
4./etc/puppet/modules/jetty/manifests/init.pp
/* vim:expandtab:shiftwidth=4:tabstop=4:smarttab: */
class jetty (
$pkg_version = "",
$port = "8983",
$DzkHost = "-DzkHost=10.13.144.224:9983,10.13.144.225:9983,10.13.144.226:9983,10.13.144.227:9983",
$leader_zookeepers = [],
)
{
include globalvar
package { "${globalvar::pkg_prefix}jetty":
ensure => $pkg_version,
}
file { "${globalvar::install_prefix}/jetty/start.ini":
content => template("jetty/start.ini.erb"),
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/bin/web.sh":
source => "${globalvar::modulepath}/jetty/files/web.sh",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/jetty.xml":
source => "${globalvar::modulepath}/jetty/files/jetty.xml",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/keystore":
source => "${globalvar::modulepath}/jetty/files/keystore",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/log4j.properties":
source => "${globalvar::modulepath}/jetty/files/log4j.properties",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/logging.properties":
source => "${globalvar::modulepath}/jetty/files/logging.properties",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/realm.properties":
source => "${globalvar::modulepath}/jetty/files/realm.properties",
require => Package["${globalvar::pkg_prefix}jetty"],
}
file { "${globalvar::install_prefix}/jetty/etc/webdefault.xml":
source => "${globalvar::modulepath}/jetty/files/webdefault.xml",
require => Package["${globalvar::pkg_prefix}jetty"],
}
}
erb文件
stat.ini.erb
#===========================================================
# Jetty start.jar arguments
# Each line of this file is prepended to the command line
# arguments # of a call to:
# java -jar start.jar [arg...]
#===========================================================
#===========================================================
# If the arguements in this file include JVM arguments
# (eg -Xmx512m) or JVM System properties (eg com.sun.???),
# then these will not take affect unless the --exec
# parameter is included or if the output from --dry-run
# is executed like:
# eval $(java -jar start.jar --dry-run)
#
# Below are some recommended options for Sun's JRE
#-----------------------------------------------------------
# --exec
# -Dorg.apache.jasper.compiler.disablejsr199=true
# -Dcom.sun.management.jmxremote
# -Dorg.eclipse.jetty.util.log.IGNORED=true
# -Dorg.eclipse.jetty.LEVEL=DEBUG
# -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
# -Xmx2000m
# -Xmn512m
# -verbose:gc
# -XX:+PrintGCDateStamps
# -XX:+PrintGCTimeStamps
# -XX:+PrintGCDetails
# -XX:+PrintTenuringDistribution
# -XX:+PrintCommandLineFlags
# -XX:+DisableExplicitGC
# -XX:+UseConcMarkSweepGC
# -XX:ParallelCMSThreads=2
# -XX:+CMSClassUnloadingEnabled
# -XX:+UseCMSCompactAtFullCollection
# -XX:CMSInitiatingOccupancyFraction=80
-Djava.net.preferIPv4Stack=true
-Djetty.home=/usr/local/sae/jetty
-Djetty.logs=/data0/log
-Djava.io.tmpdir=/data0/log
-Dsolr.solr.home=/usr/local/sae/solr/solr.home
-Xms4g
-Xmx4g
"start.ini.erb" 89L, 3001C 43,1 Top
-Dsolr.solr.home=/usr/local/sae/solr/solr.home
-Xms4g
-Xmx4g
-XX:MaxPermSize=256m
-Xss256k
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-XX:GCPauseIntervalMillis=200
-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=true
-Dorg.tanukisoftware.wrapper.WrapperManager.mbean.testing=false
-Djava.util.logging.config.file=/usr/local/sae/jetty/etc/logging.properties
-Dlog4j.configuration=file:/usr/local/sae/jetty/etc/log4j.properties
<% @leader_zookeepers.each do |leader_zookeeper| -%>
<%= leader_zookeeper %>
<% end -%>
-Djetty.port=<%= scope.lookupvar("jetty::port") %>
###调用其他类的变量
<%= scope.lookupvar("jetty::DzkHost") %>
#-----------------------------------------------------------
#===========================================================
# Start classpath OPTIONS.
# These control what classes are on the classpath
# for a full listing do
# java -jar start.jar --list-options
#-----------------------------------------------------------
OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus,annotations
#-----------------------------------------------------------
#===========================================================
# Configuration files.
# For a full list of available configuration files do
# java -jar start.jar --help
#-----------------------------------------------------------
#etc/jetty-jmx.xml
etc/jetty.xml
#etc/jetty-annotations.xml
# etc/jetty-ssl.xml
# etc/jetty-requestlog.xml
#etc/jetty-deploy.xml
#etc/jetty-overlay.xml
#etc/jetty-webapps.xml
#etc/jetty-contexts.xml
#etc/jetty-testrealm.xml
#===========================================================