crm搭建流程

crm搭建流程整理

1、环境搭建

1.1 Asianux 4.4系统完全安装
  • 镜像包 Asianux-4.4.iso(CentOS6.5)

  • 安装包选择“Everything”,安装所有包

1.2 环境配置
# 1、配置eth1网卡
vim /etc/sysconfig/network-script/ifcfg-eth1

# 2、关闭防火墙
service iptables status
service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off
iptables -F
ip6tables -F

# 3、查看selinux状态
getenforce # 完全安装的4.4系统默认是disabled状态
# 4、配置/etc/hosts
# 更改主机名,追加IP地址与对应主机名到hosts文件

2、集群安装

2.1 挂载光盘
# 图形挂载,“设置”——“光驱”——勾选”已连接“(镜像选择HA7.2-tools-x86_64-20161208.iso)
# 命令行挂载
mount /dev/cdrom /media
[root@yangzonglan2 ~]# ls /media/RedFlag/
autorun  cmdline  Documents  RedFlag  TRANS.TBL

[root@yangzonglan2 ~]# df -h # 查看挂载结果
2.2 安装集群
cd /media/RedFlag
./cmdline # 执行安装
# 填写序列号界面,暂时不写,连接XShell后通过rfhareglic命令输入

2.3 部署corosync
# 修改corosync.conf配置文件
vim /etc/corosync/corosync.conf
    # Please read the corosync.conf.5 manual page
    compatibility: whitetank

    totem {
            version: 2
            secauth: off
            threads: 0
            rrp_mode: passive
            interface {
                    ringnumber: 0
                    bindnetaddr: 192.168.113.0	# 修改到与eth1同网段
                    broadcast: yes
                    mcastport: 5546		# 如启动rfhaserver失败,尝试更换其他端口
            }
    #       interface {
    #               ringnumber: 1
    #               bindnetaddr: 192.168.127.0
    #               broadcast: yes
    #               mcastport: 5547
    #       }
    }

    logging {
            fileline: off
            to_stderr: no
    ...
# 添加corosync认证,并同步到节点2
[root@yangzonglan1 RedFlag]# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
[root@yangzonglan1 RedFlag]# scp /etc/corosync/authkey yangzonglan2:/etc/corosync/

3、集群配置

3.1 启动集群
  • 集群启动前,再次确认防火墙状态,iptables status ,ip6tables status ,chkconfig iptables off,iptable -F
# 输入序列号
[root@yangzonglan1 RedFlag]# rfhareglic 
Register HA License #L9...-T...IC-OWQ..U-M..JA-F..80
# 开启服务
[root@yangzonglan1 ~]# service rfhaserver start
# 设置开机启动
[root@yangzonglan1 ~]# chkconfig rfhaserver on
# 添加全局配置
crm(live)configure# rsc_defaults resource-stickiness=200 # 此参数为资源有多大程度倾向于停留在当前节
点。
crm(live)configure# property no-quorum-policy="ignore" # 此参数是通过分组机制判断集群节点的合法
crm(live)configure# property stonith-enabled="false" # 此参数是不开启防止脑裂服务
3.2 添加资源
crm(live)configure# primitive fip1 ocf:heartbeat:IPaddr2 params ip="192.168.126.1" cidr_netmask="24" nic="eth0" iflabel="fip1" op monitor interval="10" 
#配置浮动IP 资源,参数:浮动IP地址为10.200.1.11,掩码为24,网口为eth0,标签为fip,监控间隔为10 秒。

crm(live)configure# primitive fip2 ocf:heartbeat:IPaddr2 params ip="192.167.126.2" cidr_netmask="24" nic="eth0" iflabel="fip2" op monitor interval="10" 

crm(live)configure# primitive weblogic ocf:redflag:template params rcname="template-weblogic" startcmd="/home/web_scripts/startWeb.sh" stopcmd="/home/web_scripts/stopWeb.sh" pname="java" pnamepara="home=/weblogic/wlserver_10.3/server"  
op monitor interval="30" timeout="30" op start interval="0" timeout="90" op stop interval="0" timeout="90"
#配置weblogic资源,参数:weblogic启动命令/home/web_scripts/startWeb.sh,weblogic停止命令/home/web_scripts/stopWeb.sh,监控进程关键字为java,监控进程关键字详细参数为home=/weblogic/wlserver_10.3/server(详细参数可以不设置),监控间隔30秒、监控超时30秒,启动间隔0秒、启动超时90秒,停止间隔0秒、停止超时90秒。


3.3 添加管理组
crm(live)configure# group 组名字 资源名字 meta target-role="Started"

3.3 添加资源约束
crm(live)configure# location 约束名字 组名字 rule inf: #uname eq 主机名 //添加约束
3.4 停止/清除/删除资源
crm(live)resource# stop httpd # 停止httpd服务
crm(live)resource# cleanup httpd # 清除httpd状态
crm(live)# resource status # 查看资源列表
crm(live)# configure delete httpd # 删除httpd资源 
crm(live)# configure commit # 提交更改,命令生效


4、问题手机

4.1 序列号漏输
[root@yangzonglan1 RedFlag]# service rfhaserver start
Starting Redflag Cluster Manager:                          [FAILED]
[root@yangzonglan1 RedFlag]# rfhareglic 	# rfhareglic输入序列号即可


4.2 集群连接不上

集群启动成功,但是显示连接失败

[root@yangzonglan1 RedFlag]# service rfhaserver start
Starting Redflag Cluster Manager:                          [  OK  ]
[root@yangzonglan1 RedFlag]# rfhastat
Connection to cluster failed: connection failed


  • 再次检查防火墙状态,关闭防火墙,关闭服务,修改corosync端口,确认防火墙状态,重启服务
   29  service iptables status
   30  iptables -F
   31  service rfhaserver stop
   32  service rfhaserver status
   33  vim /etc/corosync/corosync.conf
   34  service iptables status
   36  service iptables stop
   48  chkconfig iptables off
   49  chkconfig ip6tables off
   57  service iptables status
   59  service ip6tables status
   64  service rfhaserver start
   65  rfhastat
[root@yangzonglan2 ~]# rfhastat
============
Last updated: Thu Apr 16 06:44:27 2020
Last change: Thu Apr 16 06:43:55 2020 via crmd on yangzonglan1
Stack: openais
Current DC: yangzonglan1 - partition with quorum
Version: 1.1.7-6.0.8.AXS4-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ yangzonglan1 yangzonglan2 ]


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
crm项目的架构 * 创建web工程 * 引入jar包 * mysql的驱动包 * hibernate需要的jar包 * spring需要的jar包 * struts2需要的jar包 * jstl 需要的jar包 * junit需要的jar包 * 包的介绍 * cn.itcast.crm.container:重新封装spring容器 * cn.itcast.crm.dao:放置的是dao接口 * cn.itcast.crm.dao.impl:放置的是dao接口的实现类 * cn.itcast.crm.domain:放置的是po类、po类和数据库表关联的映射文件 * cn.itcast.crm.service:业务层的接口 * cn.itcast.crm.service.impl:业务层的接口的实现类 * cn.itcast.crm.web.action:struts2的action * cn.itcast.crm.web.form:封装页面数据的javaBean * junit:开发人员测试用的 * 搭建hibernate层 * 定义需求:部门信息的页面数据要插入到数据库中 * 定义表 CREATE TABLE `sys_user_group` ( `id` INTEGER(11) NOT NULL AUTO_INCREMENT, #编号 `remark` TEXT, #备注 `name` VARCHAR(100) DEFAULT NULL, #部门名称 `principal` VARCHAR(50) DEFAULT NULL, #部门负责人 `incumbent` VARCHAR(200) DEFAULT NULL, #部门职能 PRIMARY KEY (`id`) ) * 创建po对象,放置在cn.itcast.crm.domain包下 public class SysUserGroup implements java.io.Serializable { private Integer id; private String remark; // 备注 private String name; // 部门名称 private String principal; // 部门负责人 private String incumbent; // 部门职能 } * 创建表和po之间的映射文件SysUserGroup.hbm.xml 放置在cn.itcast.crm.domain包下 * SysUserGroup.hbm.xml文件的内容直接看该文件即可 * 创建hibernate.cfg.xml文件连接数据库,加载SysUserGroup.hbm.xml文件,放置src下 <session-factory> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itcast0807crm</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.autocommit">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.show_sql">true</property> <mapping resource="cn/itcast/crm/domain/SysUserGroup.hbm.xml"/> </session-factory> * 测试.放置在junit包下 public class TestHibernate { @Test public void testHibernateConf(){ Configuration config=new Configuration(); config.configure(); SessionFactory sf=config.buildSessionFactory(); Session s=sf.openSession(); Transaction tx=s.beginTransaction(); SysUserGroup sysUserGroup=new SysUserGroup(); sysUserGroup.setName("销售部"); sysUserGroup.setPrincipal("xxx"); sysUserGroup.setIncumbent("ttt"); s.save(sysUserGroup); tx.commit(); s.close(); } } * 搭建spring和hibernate * 创建beans.xml文件,放置在src下 * 引入命名空间 bean tx context aop <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> * 配置如下: <!-- 1 配置注解的自动扫描--> <context:component-scan base-package="cn.itcast.crm"/> <!--3 配置本地化代理工程bean,这是spring整合hibernate的入口 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <!--表示在类路径下加载hibernate.cfg.xml --> <value>classpath:hibernate.cfg.xml</value> </property> </bean> <!--4 创建事务管理器 aop切面--> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!--5 配置处理事务的注解--> <tx:annotation-driven transaction-manager="txManager"/> * 创建dao层共同的接口,放置在cn.itcast.crm.dao下 public interface ICommonDao<T> { public void save(T entity); } * 创建dao层共同的接口的实现类,,放置在cn.itcast.crm.dao.impl下 public class CommonDaoImpl<T> extends HibernateDaoSupport implements ICommonDao<T> { public void save(T entity) { this.getHibernateTemplate().save(entity); } @Resource(name="sessionFactory") //注入sessionFactory public void setSessionFactoryDI(SessionFactory sessionFactory) { System.out.println("sessionFactory "+sessionFactory); //调用父类的setSessionFactory方法,注入sessionFactory super.setSessionFactory(sessionFactory); } } * 创建部门的dao接口 SysUserGroupDao接口 放在cn.itcast.crm.dao包下 public interface ISysUserGroupDao extends ICommonDao<SysUserGroup> { public final static String SERVICE_NAME="cn.itcast.crm.dao.impl.SysUserGroupDaoImpl"; } * 创建部门的dao接口的实现类 放在cn.itcast.crm.dao.impl包下 @Repository(ISysUserGroupDao.SERVICE_NAME) public class SysUserGroupDaoImpl extends CommonDaoImpl<SysUserGroup> implements ISysUserGroupDao { } * 测试,放置在junit包下 public class TestSysUserGroupDao { @Test public void testSave() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); ISysUserGroupDao sysUserGroupDao = (ISysUserGroupDao) ctx.getBean(ISysUserGroupDao.SERVICE_NAME); SysUserGroup sysUserGroup = new SysUserGroup(); sysUserGroup.setName("销售部"); sysUserGroup.setPrincipal("xxx"); sysUserGroup.setIncumbent("ttt"); sysUserGroupDao.save(sysUserGroup); } } * 创建部门的业务层接口 ,放置在cn.itcast.crm.service包下 public interface ISysUserGroupService { public final static String SERVICE_NAME="cn.itcast.crm.service.impl.SysUserGroupServiceImpl"; public void saveSysUserGroup(SysUserGroup sysUserGroup); } * 创建部门的业务层接口实现类,放置在cn.itcast.crm.service.impl包下 @Transactional(readOnly=true) @Service(ISysUserGroupService.SERVICE_NAME) public class SysUserGroupServiceImpl implements ISysUserGroupService { @Resource(name=ISysUserGroupDao.SERVICE_NAME) private ISysUserGroupDao sysUserGroupDao; @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false) public void saveSysUserGroup(SysUserGroup sysUserGroup) { sysUserGroupDao.save(sysUserGroup); } } * 测试 public class TestSysUserGroupService { @Test public void testSavex() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); ISysUserGroupService sysUserGroupService = (ISysUserGroupService) ctx.getBean(ISysUserGroupService.SERVICE_NAME); SysUserGroup sysUserGroup = new SysUserGroup(); sysUserGroup.setName("销售部"); sysUserGroup.setPrincipal("xxx"); sysUserGroup.setIncumbent("ttt"); sysUserGroupService.saveSysUserGroup(sysUserGroup); } } * 搭建struts2(保存部门信息) * jsp页面(sys/group/add.jsp) * 请求的路径/sys/sysUserGroupAction_save.do * 根据路径创建SysUserGroupAction和在action中增加save方法,放置在cn.itcast.crm.web.action包下 public class SysUserGroupAction extends ActionSupport public String save() throws IllegalAccessException, InvocationTargetException{ System.out.println("xxxxxxxxxxxxxxxxxxxxxxxx "); return null; } } * 建立请求路径和action之间的关联 * 创建struts.xml文件,放置在src下 * 文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!-- 配置请求后缀名.do --> <constant name="struts.action.extension" value="do"/> <!-- 配置主题为简单主题 --> <constant name="struts.ui.theme" value="simple"/> <!--配置struts2的模式为开发模式--> <constant name="struts.devMode" value="true"/> <package name="sys" namespace="/sys" extends="struts-default"> <action name="sysUserGroupAction_*" class="cn.itcast.crm.web.action.SysUserGroupAction" method="{1}"> <result name="add">/sys/group/add.jsp</result> </action> </package> </struts> * 在web.xml文件配置struts2的过滤器 <filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> * 测试 * 定义javaBean(vo对象)接收表单数据,放置在cn.itcast.crm.web.form包下 public class SysUserGroupForm implements java.io.Serializable { private String id; private String name; private String principal; private String incumbent; private String remark; } * action要实现模型驱动接口 public class SysUserGroupAction extends ActionSupport implements ModelDriven<SysUserGroupForm>{ private SysUserGroupForm sysUserGroupForm=new SysUserGroupForm(); public String save() throws IllegalAccessException, InvocationTargetException{ System.out.println("xxxxxxxxxxxxxxxxxxxxxxxx "); return null; } public SysUserGroupForm getModel() { return sysUserGroupForm; } } * 测试,SysUserGroupForm是否接收到值 * 如何在struts2的SysUserGroupAction中的save方法中,获取spring容器中bean节点的对象 * 创建ServiceProvinderCore,加载beans.xml文件,放置在cn.itcast.crm.container包下 public class ServiceProvinderCore { protected ApplicationContext ctx; /** * @param filename beans.xml */ public void load(String filename){ ctx=new ClassPathXmlApplicationContext(filename); } } * 创建ServiceProvinder类,获取获取spring容器中bean节点的对象,放置在cn.itcast.crm.container包下 public class ServiceProvinder { private static ServiceProvinderCore sc; static{ System.err.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); sc=new ServiceProvinderCore(); sc.load("beans.xml"); } public static Object getService(String beanName){ System.err.println("ppppppppppppppppppppppp"); if(StringUtils.isBlank(beanName)){ throw new RuntimeException("您要访问的服务名称不能为空"); } Object bean=null; //如果spring容器中包含beanName if(sc.ctx.containsBean(beanName)){ bean=sc.ctx.getBean(beanName); } //如果spring容器中不包含beanName if(bean==null){ throw new RuntimeException("您要访问的服务名称["+beanName+"]不存在"); } return bean; } } * 测试 @Test public void testSave() { ISysUserGroupService sysUserGroupService=(ISysUserGroupService)ServiceProvinder.getService(ISysUserGroupService.SERVICE_NAME); SysUserGroup sysUserGroup = new SysUserGroup(); sysUserGroup.setName("销售部"); sysUserGroup.setPrincipal("xxx"); sysUserGroup.setIncumbent("ttt"); sysUserGroupService.saveSysUserGroup(sysUserGroup); } * 在 SysUserGroupAction中的save方法中增加如下代码 public String save() throws IllegalAccessException, InvocationTargetException{ System.out.println("sysUserGroupForm.getName() "+sysUserGroupForm.getName()); //实例化po对象 SysUserGroup sysUserGroup=new SysUserGroup(); //赋值vo对象的值到po中 BeanUtils.copyProperties(sysUserGroup, sysUserGroupForm); //获取业务层的对象(本项目struts2和spring是分离的) ISysUserGroupService sysUserGroupService= (ISysUserGroupService)ServiceProvinder.getService(ISysUserGroupService.SERVICE_NAME); //调用业务层保存po对象 sysUserGroupService.saveSysUserGroup(sysUserGroup); return null; } * 测试:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值