使用SaltStack安装JBoss

SaltStack是一个具备puppet与func功能为一身的集中化管理平台,其基于python实现,功能十分强大,各模块融合度及复用性极高。SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。

在开始使用SaltStack之前,首先要对SaltStack的基础进行一系列的学习,这里,强烈推荐官网的Tutorial,在完成了整个Tutorial之后,通过Module Index页面,我们能够快速查阅Salt所有模块的功能与用法:http://docs.saltstack.com/py-modindex.html

安装saltstack

安装过程请参考:安装saltstack和halite

添加pillar

你可以执行下面命令查看minion拥有哪些Pillar数据:

$ salt '*' pillar.data

saltstack的默认states目录为/srv/salt,默认为/srv/pillar,如果不存在请先创建。

[root@sk1 /]# tree /srv/ -L 3
/srv/
├── pillar
│   ├── jboss
│       ├── params.sls
│   └── top.sls
├── salt
│   ├── jboss
│   ├── _modules
│   └── top.sls

/srv/pillar/下创建top.sls,该文件引入jboss下的params.sls:

 base:
  '*':
    - jboss.params

创建jboss目录并添加params.sls如下:

 jboss_home: /home/jboss/jboss-eap-5.1/jboss-as
 profile_port:
  default1:
    http_port: ports-default
    jmx_port: 1099
  default2:
    http_port: ports-01
    jmx_port: 1199
  default3:
    http_port: ports-02
    jmx_port: 1299
  default4:
    http_port: ports-03
    jmx_port: 1399

 jmx:
  username: admin
  password: admin

该文件定义了如下变量,你可以按需要定义自己的变量:

  • jboss_home:mimion机器上jboss的home目录
  • profile_port:定义有多少个profile以及每个profile下的http端口和jmx端口
  • jmx:定义jmx-console用户名和密码

定义变量之后,你可以在sates文件中这样引用:

pillar['profile_port']['default1']

下面是个复杂的例子,使用了python中的模板引擎语言:

{% for profile, port in pillar.get('profile_port', {}).items() %}
    {{profile}}
{% endfor %}

你还可以在python脚本中或者是saltstack自定义module中这样引用变量:

__pillar__['jboss_home']
__pillar__['profile_port']['default1']['jmx_port']

在master上修改Pilla文件后,需要用以下命令刷新minion上的数据:

$ salt '*' saltutil.refresh_pillar

如果定义好的pillar不生效,建议刷新一下或者重启salt试试。

编写states

/srv/salt目录如下:

[root@sk1 salt]# tree -L 3
.
├── jboss
│   ├── files
│   │   └── jboss-eap-5.1.zip
│   └── init.sls

├── _modules
│   └── jboss.py
├── top.sls

top.sls为sates入口,定义如下:

 base:
  *:
    - jboss

创建jboss目录并编写init.sls文件:

 unzip:
  pkg.installed
 jboss:
  file.managed:
    - name:  /home/jboss/jboss-eap-5.1.zip
    - source: salt://jboss/files/jboss-eap-5.1.zip
    - include_empty: True
    - user: jboss
    - group: jboss
    - mode: 655
  cmd.run:
    - name: 'unzip jboss-eap-5.1.zip'
    - cwd: /home/jboss
    - user: jboss
    - unless: 'test -e jboss-eap-5.1'
    - require:
      - file.managed: jboss

{% for profile, port in pillar.get('profile_port', {}).items() %}
 {{profile}}:
  cmd.run:
    - name: '\cp -r default {{profile}}'
    - cwd:  /home/jboss/jboss-eap-5.1/jboss-as/server
    - user: jboss
    - unless: 'test -e {{profile}}'
    - require:
      - file.managed: jboss
{% endfor %}

说明:

1.上面文件中创建了jboss ID,其包括两部分:拷贝文件和解压缩,分别对应file.managed和cmd.run。

2.然后通过脚本语言读取pillar中定义的变量并以依次遍历生成多个ID,ID名称由变量中值定义。本例中,是读取profile_port的值,然后创建多个profile。profile_port变量在/srv/pillar/jboss/params.sls中定义。

编写完sates文件之后,你可以通过执行以下命令让所有minion执行sates文件中定义的state:

$ salt '*' state.highstate

你也可以单独执行jboss这个states:

$ salt '*' state.sls jboss

自定义grains_module

自定义的grains_module存放在/srv/salt/_grains目录,下面定义一个获取max_open_file的grains:

import os,sys,commands

def Grains():
    grains = {}
    max_open_file=65536
    try:
        getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
    except Exception,e:
        pass
    if getulimit[0]==0:
        max_open_file=int(getulimit[1])
    grains['max_open_file'] = max_open_file
    return grains

然后,同步grains模块:

$ salt '*' saltutil.sync_all
sk2:
    ----------
    grains:
        - grains.max_open_file
    modules:
    outputters:
    renderers:
    returners:
    states:

刷新模块(让minion编译模块):

$ salt '*' sys.reload_modules

然后,验证max open file的value:

$ salt '*' grains.item max_open_file
sk2:
  max_open_file: 1024

自定义module

你通过执行states可以完成bao的安装、配置和部署,如果你想对他们做管理,你可以自定义module来执行一些远程命令。

自定义的module需要存放在/srv/salt/_modules目录下,为了对jboss实例进行启动、停止、查看运行状态,编写jboss.py模块:

def _simple_cmd_retcode(cmd):
    home = __pillar__['jboss_home']+'/bin'
    out = __salt__['cmd.retcode'](cmd,cwd=home)
    ret = {}
    ret['Cmd']=cmd
    ret['Msg']=out
    ret['Result']=True
    return ret

def _simple_cmd(cmd):
    home = __pillar__['jboss_home']+'/bin'
    out = __salt__['cmd.run'](cmd,cwd=home).splitlines()
    ret = {}
    ret['Cmd']=cmd
    ret['Msg']=out
    ret['Result']=True
    return ret

def running(profile):
    ret =_simple_cmd("ps -ef|grep -v grep|grep java|grep "+profile+" |grep "+__pillar__['profile_port'][profile]['http_port'])
    if ret['Msg']=='' or len(ret['Msg'])==0:
        return False
    return True

def start(profile):
    ip = __grains__['id'][0]
    port = __pillar__['profile_port'][profile]['http_port']
    cmd = 'nohup ./run.sh -b '+ip+' -c '+profile+' -Djboss.service.binding.set='+port+' &'

    ret={}
    if running(profile):
        ret['Cmd']=cmd
	ret['Msg']=profile+' has started'
        ret['Result']=False
        return ret

    return _simple_cmd_retcode(cmd)

def status(profile):
    ip = __grains__['id'][0]
    port = __pillar__['profile_port'][profile]['jmx_port']
    username = __pillar__['jmx']['username']
    password = __pillar__['jmx']['password']
    cmd="./twiddle.sh -s "+ip+":"+str(port)+" -u "+username+" -p "+password+" get jboss.system:type=Server Started"

    ret=_simple_cmd(cmd)
    for line in ret['Msg']:
        if not line:
            continue
        if 'ERROR' in line:
 	    ret['Result']=False
	    ret['Msg']=ret['Msg'][0:2]
            break
    return ret

def stop(profile):
    ip = __grains__['id'][0]
    port = __pillar__['profile_port'][profile]['jmx_port']
    username = __pillar__['jmx']['username']
    password = __pillar__['jmx']['password']
    cmd="./shutdown.sh -S -s "+ip+":"+str(port)+" -u "+username+" -p "+password
    return _simple_cmd(cmd)

以上python脚本定义了对单个profile的启动、停止和查看运行状态的方法,你可以修改或者扩增代码,添加更多的方法。

然后运行下面命令同步所有模块:

$ salt '*' saltutil.sync_all
sk2:
    ----------
    grains:
    modules:
        - modules.jboss
    outputters:
    renderers:
    returners:
    states:

刷新自定义模块(让minion编译模块):

$ salt '*' sys.reload_modules

如果你想启动jboss的default1实例,只需要执行以下方法:

$ salt '*' jboss.start default1

同样,查看状态:

$ salt '*' jboss.status default1

jboss为自定义模块的名称,也是jboss.py的名称,start或者status为jboss.py中定义的方法。

如果运行出错,请查看minion的日志,路径为/var/log/salt/minion

同步配置文件

现在需要修改jmx-console-users.properties文件中的用户名和密码并将其同步到所有jboss实例中。

将jmx-console-users.properties文件放置在/srv/salt/jboss/files目录下,并修改该文件如下:

 #A sample users.properties file for use with the UsersRolesLoginModule
 pillar['jmx']['username']= pillar['jmx']['password']

上面文件中使用了pillar获取变量,你还可以使用模板语言如if、for语句来丰富你的文件内容,saltstack支持的模板引擎有jinja等。

然后在init.sls中添加:

 jmx-console-users.properties:
   file.managed:
     - name: /home/jboss/jboss-eap-5.1/jboss-as/server/default/conf/props/jmx-console-users.properties
     - source: salt://jboss/files/jmx-console-users.properties
     - template: jinja
时间: 2024-10-29 09:19:15

使用SaltStack安装JBoss的相关文章

linux安装jboss之后,浏览器访问localhost:8080:提示“连接被拒绝”,是啥情况?

问题描述 linux安装jboss之后,浏览器访问localhost:8080:提示"连接被拒绝",是啥情况? RT linux安装jboss之后,浏览器访问localhost:8080:提示"连接被拒绝",是啥情况? 解决方案 ping 一下看看能否ping同如果 不通说明是网络的问题 解决方案二: 把SElinux以及防火墙关掉试试 Linux 下SElinux以及防火墙的关闭http://blog.csdn.net/wangxiaofei2006/articl

jboos-Myeclipse 2014怎么安装JBoss tools 插件

问题描述 Myeclipse 2014怎么安装JBoss tools 插件 我下了一个jboos tools 4. 2. 3的工具包,怎么把它装到myeclipse 上,还有那个server 新建的时候总提示说我的jboos 路径不对. 解决方案 MyEclipse中安装tomcat插件在Myeclipse下安装tomcat插件MyEclipse2014安装jadeclipse插件 解决方案二: 为什么没有人回答我啊,我都搞了5天了,不带这样的,又是Ruby 启动rhc报错,一大堆英文,又是jb

eclipse3.7安装jboss eap6.2版本报错

问题描述 eclipse3.7安装jboss eap6.2版本报错 我在eclipse3.7安装jboss eap6.2版本报以下错误,大概意思说在bin目录下找不到twiddle.jar包.但我在安装包下看了一下,确实没有这个包,我从v5版拷过来一个也不行.

如何在windows NT 下安装jboss为服务?(How to install jboss as Windows NT OS Service?)

window 大部分情况下,我们是连续运行jboss,如何保证其不受外界干扰而继续运行不会被关闭?在unix/linux下,通过shell应该可完成那么在windows下呢?想达到这个目的需要把jboss安装为系统服务而jboss本身或windows本身没有提供安装为服务的方法达到这个目的需要借助另外的方法.比如自己写C/C++程序调用windows api这个可能比较浪费时间现在open source的project中已经有支持这个的了.http://javaservice.objectweb

使用SaltStack安装JDK1.6

创建states文件 在/srv/salt目录下创建jdk目录,并在jdk目录创建init.sls文件,init.sls文件内容如下: jdk-file: file.managed: - source: salt://jdk/files/jdk1.6.0_39.tar.gz - name: /usr/java/jdk1.6.0_39.tar.gz - include_empty: True jdk-install: cmd.run: - name: '/bin/tar -zxf jdk1.6.0

J2EE应用服务器(Jboss+Tomcat)安装攻略

j2ee|服务器|攻略 JBoss+Tomcat已经成为一个免费的开源的稳定的J2EE服务器,虽然在JBoss中部署J2EE没有商用J2EE服务器那么方便,基本都是通过手工编写XML配置文件,但是这样可以让我们更容易理解J2EE的来龙去脉. 注意,正如Tomcat3 和Tomcat 4两个版本差异很大一样,Jboss 2和Jboss 3两者差异较大,本处是以Jboss 2为例,建议安装JBoss 3. Jboss 3 安装其实更简单,下载解压就可运行,部署应用方式也一样. 1.从JBoss主页h

vmware安装cent os 6.5 + oracle 11g xe + jboss eap 6.2 + weblogic 12c+ webshpere mq 7.5

前言: mac系统发展速度确实很快,短短数年,mac os上已经能网银支付(中行.招行.工商.支付宝等均已全面支持mac os了),windows上的经典常用软件:qq.飞信.旺旺.有道词典.有道云笔记.迅雷.PPS影音.AcdSee,甚至微软自家的office全套都有for mac,今天下定决心把mac机上vmware里的windows 7给"打入冷宫",准备把oracle.nexus.jboss.weblogic 这些跟java开发有端的"重量级"大家伙都放到c

自动化运维工具Saltstack学习笔记(二)

前面学习了Saltstack安装和基本的配置,可以通过Saltstack批量执行系统命令,包括系统重启,查看系统负载,添加/删除用户等等.也可以把线上WEB,DB,BBS等安装和配置相同或相近的服务器分为一组,通过Saltstack的group功能批量执行管理.下面通过Saltstack来实现批量安装,卸载RPM软件包,批量分发文件,压缩包和推送目录到指定的minion,定期修改Apache/Nginx/Mysql等配置文件并实施推送到minion. 1.物理环境 2.配置Saltstack m

ovirt-engine安装

一.安装 1.更新系统 原来是centos4.5 #yum update 升级后到6.7版本. [root@localhost ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 2.新建用户 #adduser liuxiaoyan #passwd liuxiaoyan 3.安装snapshot库(root用户) [root@localhost ~]# yum -y install http://resources.ovirt.org/r