Java_项目管理和自动化部署笔记

回顾

1,zookeeper概述

zookeeper是分布式小文件系统。

节点: 同时具备文件夹的特性和文件的特点。

2,zookeeper常用命令

2.1 服务端命令

进入到zookeeper的安装目录,进入到bin目录

./zkServer.sh start|stop|restart|status

2.2 客户端命令

连接服务端命令

./zkCli.sh 
  • 创建节点

    create 【-e】 【-s】 /节点  数据
    
  • 获取节点的数据

    get /节点
    
  • 设置节点的数据

    set /节点 数据
    
  • 删除节点

    rmr /节点
    
  • 查看节点下子节点命令

    ls /节点
    

2.3 JAVAAPI操作zookeeper

curator 是zookeeper客户端软件。

使用:

  • 建立连接

    目的: CuratorFramework

     //重试策略
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);
            //2.第二种方式
            //CuratorFrameworkFactory.builder();
            client = CuratorFrameworkFactory.builder()
                    .connectString("127.0.0.1:2181")
                    .sessionTimeoutMs(60 * 1000)
                    .connectionTimeoutMs(15 * 1000)
                    .retryPolicy(retryPolicy)
                    .namespace("itheima")
                    .build();
    //开启连接
    client.start();
    
  • 增删改查操作

    client.create().forPath("/节点",数据);
    client.create().withMode(CreateMode.EPHEMERAL).forPath("/节点",数据);
    

今日内容

  1. 增删改查操作
  2. 监听机制
  3. 作为分布式锁
  4. 集群
  5. 项目管理(ones)

1. 增删改查操作

1.1 查询

  • 查询数据

    @Test
    public void testGet1() throws Exception {
        //1. 查询数据:get
        byte[] data = client.getData().forPath("/app1");
        System.out.println(new String(data));
    }
    

在这里插入图片描述

  • 查询子节点

    @Test
    public void testGet2() throws Exception {
        // 2. 查询子节点: ls
        List<String> path = client.getChildren().forPath("/");
    
        System.out.println(path);
    }
    

在这里插入图片描述

  • 查询节点状态

     @Test
    public void testGet3() throws Exception {
    
    
        Stat status = new Stat();
        System.out.println(status);
        //3. 查询节点状态信息:ls -s
        client.getData().storingStatIn(status).forPath("/app1");
    
        System.out.println(status);
    
    }
    

在这里插入图片描述

1.2 修改

 @Test
public void testSet() throws Exception {
    client.setData().forPath("/app1", "itcast".getBytes());
}


@Test
public void testSetForVersion() throws Exception {

    Stat status = new Stat();
    //3. 查询节点状态信息:ls -s
    client.getData().storingStatIn(status).forPath("/app1");


    int version = status.getVersion();//查询出来的 3
    System.out.println(version);
    client.setData().withVersion(version).forPath("/app1", "hehe".getBytes());
}

在这里插入图片描述

2,watch机制

监听:

  • 事件
  • 事件源
  • 监听器
  • 绑定监听器

zookeeper中watch : zookeeper中的特定事件触发后,通知指定的客户端。

zookeeper管理其他的集群的应用原理:

在这里插入图片描述

curator对zookeeper原生的watch机制进行了封装:

  • NodeCache : 监听的是特定的节点
  • PathChildrenCache : 监听的是特定节点的子节点
  • TreeCache : 监听的是特定节点及其子节点

2.1 NodeCache

@Test
public void testNodeCache() throws Exception {
    //1. 创建NodeCache对象
    final NodeCache nodeCache = new NodeCache(client,"/app1");
    //2. 注册监听
    nodeCache.getListenable().addListener(new NodeCacheListener() {
        @Override
        public void nodeChanged() throws Exception {
            System.out.println("节点变化了~");

            //获取修改节点后的数据
            byte[] data = nodeCache.getCurrentData().getData();
            System.out.println(new String(data));
        }
    });

    //3. 开启监听.如果设置为true,则开启监听是,加载缓冲数据
    nodeCache.start(true);

    while (true){
    }
}

2.2 PathChildrenCache

/**
     * 演示 PathChildrenCache:监听某个节点的所有子节点们
     */

@Test
public void testPathChildrenCache() throws Exception {
    //1.创建监听对象
    PathChildrenCache pathChildrenCache = new PathChildrenCache(client,"/app2",true);

    //2. 绑定监听器
    pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
        @Override
        public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
            System.out.println("子节点变化了~");
            System.out.println(event);
            //监听子节点的数据变更,并且拿到变更后的数据
            //1.获取类型
            PathChildrenCacheEvent.Type type = event.getType();
            //2.判断类型是否是update
            if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                System.out.println("数据变了!!!");
                byte[] data = event.getData().getData();
                System.out.println(new String(data));

            }
        }
    });
    //3. 开启
    pathChildrenCache.start();

    while (true){

    }
}

2.3 TreeCache

/**
     * 演示 TreeCache:监听某个节点自己和所有子节点们
     */

@Test
public void testTreeCache() throws Exception {
    //1. 创建监听器
    TreeCache treeCache = new TreeCache(client,"/app2");

    //2. 注册监听
    treeCache.getListenable().addListener(new TreeCacheListener() {
        @Override
        public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
            System.out.println("节点变化了");
            System.out.println(event);
        }
    });

    //3. 开启
    treeCache.start();

    while (true){

    }
}

3,分布式锁

锁: 多线程间共享数据安全的保障。

分布式锁:

  • 应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM之间已经无法通过多线
    程的锁解决同步问题。
  • 那么就需要一种更加高级的锁机制,来处理种跨机器的进程之间的数据同步问题——这就是分布式锁。

4,集群

角色:

  • leader : 老大
    • 处理事务型操作。
    • 集群的调度者
  • follower : 跟随者
    • 处理非事务操作,将事务型操作转发给leader
  • observer : 观察者
    • 处理非事务操作,将事务型操作转发给leader

跟随者和观察者的区别:

  • 跟随者有参与选举的权利,观察者没有。

集群特点:

  • 建议安装奇数台
  • 一般以下的服务器宕机不影响正常的运行
  • 选举机制: 票数过半者则为leader

5,项目管理

6,gitlab

配置ssh免密登陆:

在这里插入图片描述

git操作命令:

git init                创建本地仓库
git add .               添加到暂存区
git commit -m ""         提交到本地仓库
git remote add origin 远程仓库地址
git push origin master
git clone 远程仓库地址

创建本地仓库:
在这里插入图片描述

项目的克隆:

在这里插入图片描述

代码冲突解决方式:

在这里插入图片描述

在这里插入图片描述

jenkins目录:

/usr/lib/jenkins/jenkins.war  WAR包
/etc/sysconfig/jenkins    配置文件
/var/lib/jenkins/    默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log  Jenkins日志文件

sh /opt/scripts/tomcat.sh ssm

#!/bin/bash
set -x
PROJECT_NAME=$1  #  获取传递的第一个参数,也就是上面命令的  ssm
# 获取tomcat的安装目录路径
TOMCAT_HOME=/usr/local/tomcat/tomcat_$PROJECT_NAME/bin
# 获取tomcat相关进程的个数
PROCESS=`ps -ef |grep tomcat_$PROJECT_NAME|grep -v grep|wc -l`
# 判断进程数是否为0,如果是0表示tomcat未启动,如果是1,表示已经启动
if [ $PROCESS -eq 0 ];then
     echo "run starting tomcat"
     # 启动tomcat
     sh $TOMCAT_HOME/startup.sh
     # 将war包解压缩的内容拷贝到tomcat的暗转目录下webapps下的ROOT下
     `unzip -oq /opt/war/target/*.war -d /usr/local/tomcat/tomcat_$PROJECT_NAME/webapps/ROOT`
else
	# 说明tomcat已经启动了
	# 关闭tomcat
     sh $TOMCAT_HOME/shutdown.sh
     # $? 获取上一个命令执行的结果,0表示执行成功, 1表示执行失败
     if [ $? -eq 0 ]; then
     	# 启动tomcat
       sh $TOMCAT_HOME/startup.sh
       # 将war包解压缩的内容拷贝到tomcat的暗转目录下webapps下的ROOT下
       `unzip -oq /opt/war/target/*.war -d /usr/local/tomcat/tomcat_$PROJECT_NAME/webapps/ROOT`
     else
     	# 说明关闭tomcat失败。杀进程
       for pid in `ps -ef |grep $tomcat_$PROJECT_NAME|grep -v grep |awk '{print $2}'`;do 
       		# 杀进程
       		kill -9 $pid;done
       		# 启动tomcat
       		sh $TOMCAT_HOME/startup.sh
       		# 将war包解压缩的内容拷贝到tomcat的暗转目录下webapps下的ROOT下
       		`unzip -oq /opt/war/target/*.war -d /usr/local/tomcat/tomcat_$PROJECT_NAME/webapps/ROOT`
	 fi
fi
echo "Sucessfull ...."

tomcat_$PROJECT_NAME/webapps/ROOTelse # 说明关闭tomcat失败。杀进程 for pid inps -ef |grep KaTeX parse error: Expected group after '_' at position 7: tomcat_̲PROJECT_NAME|grep -v grep |awk '{print $2}';do # 杀进程 kill -9 $pid;done # 启动tomcat sh $TOMCAT_HOME/startup.sh # 将war包解压缩的内容拷贝到tomcat的暗转目录下webapps下的ROOT下unzip -oq /opt/war/target/*.war -d /usr/local/tomcat/tomcat_$PROJECT_NAME/webapps/ROOT`
fi
fi
echo “Sucessfull …”


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值