Day03:Linux案例与zookeeper分布式基础

                                                            优秀是一种习惯

知识点01:回顾

  1. Linux中如何实现文本编辑?

    • 命令:vim
      • 命令模式:执行一些快捷命令
        • 复制:yy
        • 粘贴:p
        • 剪切:dd
        • 跳转:G、gg
        • 进入编辑:i、O、o、A
      • 编辑模式:修改内容
      • 末行模式:保存退出
        • wq
      • 应用:不适合于复杂的数据编辑,适合于轻量级的修改
    • 工具:notepad++
      • 应用:适合于复杂的数据编辑
  2. Linux中如何修改静态网络信息?

    • 配置文件的位置

      /etc/sysconfig/network-scrips/ifcfg-ens33
      								|
      								ifcfg-ethN (0 ~ 7)
      
    • 修改的内容

      bootProtocol=static | none
      IP			:用于唯一标记一台机器,所有机器间的访问与通信都是通过IP地址来实现
      GATEWAY		:用于让机器能够访问外部网络的地址
      DNS			:域名解析服务,用于将主机名或者域名解析为IP地址
      		ping node1
      		step1:本地解析,现在本地做解析/etc/hosts
      		step2:如果本地解析失败,才走DNS
      NETMASKS	:子网掩码,必须搭配IP使用的,解决构建子网的问题
      
  3. 如何在Linux中实现软件的安装?

    • 方式一:RPM包
      • 类似于安装可执行文件的方式
      • 缺点:容易产生依赖的问题
    • 方式二:YUM源
      • 自动管理所有依赖
    • 方式三:编译安装
      • 基于源码直接进行编译进行安装
      • 定制化的需求
    • 方式四:免安装
      • 官方编译好的,下载以后直接使用的
      • 解压就代表安装
  4. 为什么要开发Shell脚本?如何开发一个Shell脚本?

    • 应用
      • 批量化处理
      • 自动化处理
    • 规则
      • 声明头部:#!/bin/bash
      • 实现逻辑:命令的封装
      • 添加可执行的权限
  5. Shell脚本中的变量有哪几种以及如何使用?

    • 分类
      • 系统:PATH、PWD、USER
      • 内置:$0 $1 ~ $9 $# $? @ / @/ @/*
      • 用户:var=value
    • 引用
      • ${var}
  6. Shell中如何实现条件判断?

    • if

      • 语法

        if [条件]
        then
        [elif 条件] 
        [else]
        fi
        
      • 条件表达式

        • 文件
          • -e
          • -f
          • -d
          • -r
        • 数值
          • -eq
          • -ne
          • -gt
          • -lt
          • -ge
          • -le
        • 字符串
          • =
          • !=
          • ……
    • case

      case var in
      value1)
      		op1;;
      value2)
      		opt2;;
      *)
      	optN;;
      esac
      
  7. Shell中如何实现循环以及如何控制循环?

    • 实现

      • for

        for var in  范围
        do
        	operation
        done
        
        for((i=0;i<10;i++))
        do
        done
        
      • while

        while [条件]
        do
        done
        
    • 控制

      • 死循环

        for((;;))
        
        while true
        while  :
        
      • 跳出整个循环:break

      • 跳出当前循环:continue

  8. 脚本如何运行以及如何嵌套脚本?

    • 方式一:. 调用的脚本
    • 方式二:source 调用的脚本

知识点02:目标

  1. Linux Shell的基本应用案例
    • 熟练基本Shell语法
    • 自动化实现:Crontab
  2. 集群环境搭建配置
    • 克隆虚拟机
    • 修改配置:免秘钥登陆、时钟同步、本地域名解析
    • 只要记住过程,实现即可
  3. 分布式基础:理论 【重要】
    • 什么是分布式?
    • 分布式的通用架构是什么样的?
    • 分布式有什么优缺点?
  4. Zookeeper的基本介绍 【重要】
    • Zookeeper的功能是什么?

知识点03:Linux案例:猜数游戏

  • 目标实现猜数游戏脚本开发

  • 路径

    • step1:需求分析
    • step2:开发实现
  • 实施

    • 需求分析

      • 需求:由脚本随机生成一个数字,用户进行猜数,猜对了就退出,猜错了返回大小
    • 开发实现

      #!/bin/bash
      
      #step1:先生成一个随机数
      numb=$[RANDOM%100+1]
      #echo $numb
      
      #step2:读取用户的输入来比较是否相等,如果相等,就退出,如果不等,返回比较的结果,继续输入
      while true
      do
         #读取用户的输入
         read -p "请输入一个你猜的数字【1-100】:" input
         #判断输入的值与随机数的比较
         if [ $numb -eq $input ]
         then
      		echo "猜对了"
      		break
         elif [ $numb -gt $input ]
         then
      		echo "小了"
         else
      		echo "大了"
         fi
      done
      
  • 小结

    • 掌握循环和判断的使用

知识点04:Linux案例:数据库备份

  • 目标实现数据库备份脚本的开发

  • 路径

    • step1:需求分析
    • step2:环境准备
    • step3:脚本开发
  • 实施

    • 需求分析

      • 需求:每天00:00,自动将数据库中导出的SQL文件进行备份,并删除10天之前的备份文件
      • 例如
        • 数据库导出的SQL文件,每天单独放在一个目录中
    • 环境测试

      • 上传itcast_shop.sql到Linux上

        cd /export/data
        rz
        
      • 在MySQL中运行SQL文件

        source /export/data/itcast_shop.sql;
        

    在这里插入图片描述

    • 创建数据库备份目录

      mkdir /export/data/mysqlback/20210419
      
    • 导出itcast_shop数据库的备份

      mysqldump -uroot -p123456 --host=node1 itcast_shop > /export/data/mysqlback/20210419/itcast.sql
      

    在这里插入图片描述

    • 打包压缩备份文件

      tar -zcf /export/data/mysqlback/itcast_20210419.tar.gz
      
    • 脚本开发

      #!/bin/bash
      
      #step1:先备份MySQL中的数据
      #定义常用的变量
      yesterday=`date -d '-1 day' +%Y%m%d`
      backdir=/export/data/mysqlback
      #先构建昨天备份的目录
      if [ -d $backdir/$yesterday ]
      then
      	rm -rf $backdir/$yesterday
      	mkdir -p $backdir/$yesterday
      else
      	mkdir -p $backdir/$yesterday
      fi
      
      #备份
      read -p "请输入用户名:"  username
      read -p "请输入密  码:"  password
      read -p "请输入数据库:"  dbname
      mysqldump -u$username -p$password --host=node1 $dbname > $backdir/$yesterday/$dbname.sql
      
      #构建压缩
      tar -zcf $backdir/${dbname}_${yesterday}.tar.gz  $backdir/$yesterday
      
      #删除备份目录
      rm -rf $backdir/$yesterday
      
      #step2:删除10天之前的备份
      #获取删除的日期
      rmdate=`date -d '-10 day' +%Y%m%d`
      filename=`ls ${backdir} | grep ${rmdate}`
      #判断这个filename是否为空
      if [ -n "${filename}" ] && [ -f $backdir/${filename} ]
      then
      	echo "要删除的日期是:${rmdate}"
      	echo "要删除的文件是:${filename}"
      	rm  -rf $backdir/${filename}
      else
      	echo "要删除的日期是:${rmdate}"
      	echo "要删除的文件不存在"
      fi
      
  • 小结

    • 掌握Shell中判断及命令的封装使用

知识点05:定时任务:Linux Crontab

  • 目标掌握Linux中Crontab的功能与使用

    • 什么是Crontab?
    • 如何使用Crontab?
  • 路径

    • step1:Crontab的功能与应用场景
    • step2:Crontab的语法
    • step3:Crontab的测试
  • 实施

    • Crontab的功能与应用场景

      • 功能:根据设定的时间规则,定时的调度执行Linux命令
      • 应用:用于实现Linux脚本的自动化运行
    • Crontab的语法

      • 命令

        crontab [l|e|r]
        
      • l:列举所有定时任务

      • e:编辑定时任务

      • r:删除所有定时任务

      • 格式

      *			*			*			*				*				Linux  command
        |			|			|           |               |
      分钟		 小时         日期         月份            星期几			你要执行的命令
        0 ~ 59	  00 ~ 23     1 - 31      1  ~ 12		  0 ~ 7
      
    • Crontab的测试

      • 每天01:15执行这个脚本

        15		01			*		*		*			bash  xxx.sh
        
      • 每分钟执行一次数据的追加

        */1		*			*		*		*			date >>/export/data/cron.txt
        
      • 每个月的1号的12:00执行命令

        00		12			1		*		*			/usr/bin/ls /
        
      • 一般命令建议给绝对路径,通过whereis可以查找某个命令的具体位置

        [root@node1 shell]# whereis ls
        ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
        
      • 每周三00:00执行命令

        00	00		*		*		3			/usr/bin/ls /
        
      • 特殊的符号

        • */1 :每一分钟

        • 1,2,3 :不连续的时间点

          00  1,2,3 *	* *
          代表1点,2点和3点
          
        • 1-3:连续的时间点

          */1  1-3 *	* *
          1点到3点之间每分钟执行一次
          
  • 小结

    • 什么是Crontab?

      • 定时调度:根据配置时间规则,定时的去执行Linux的命令
    • 如何使用Crontab?

      分钟		小时		几号		月份		周几			命令
      

知识点06:虚拟机克隆及网络配置

  • 目标实现虚拟机的克隆及三台机器网卡的配置

    • 为什么要克隆虚拟机?
    • 如何克隆虚拟机?
    • 克隆后如何修改三台机器的网络?
  • 路径

    • step1:分布式集群构建需求
    • step2:虚拟机的克隆
    • step3:网络配置修改
  • 实施

    • 分布式集群构建需求

      • 分布式本质:利用多台机器的资源一起处理来提高性能和解决问题
      • 大数据学习:分布式存储和分布式计算
      • 分布式的构建必须基于集群:多台机器
      • 需求:需要多台Linux机器
    • 虚拟机的克隆

      • 基于原有的一台,克隆2台

      • step1:先将机器关机,找到克隆选项
        在这里插入图片描述

      • step2:克隆第二台机器:node2

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • step3:克隆第三台:node3

    • 参考step2

在这里插入图片描述

  • 网络配置修改

    • 由于node2与node3是克隆node1得到的,所以网卡的物理地址和IP地址都与node1是一致的

    • step1:更改node2与node3的网卡的Mac地址

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • step2:启动三台机器,修改第二台和第三台机器的IP

    • 修改第二台

      vim  /etc/sysconfig/network-scripts/ifcfg-ens33
      

在这里插入图片描述
在这里插入图片描述

  • 重启网络服务

    systemctl restart network.service
    

在这里插入图片描述

  • 修改第三台

    vim  /etc/sysconfig/network-scripts/ifcfg-ens33
    

在这里插入图片描述
systemctl restart network.service

在这里插入图片描述

  • step3:修改第二台和第三台的机器名称

    • 第二台

      hostnamectl set-hostname node2
      
      • 断开重连
    • 第三台

      hostnamectl set-hostname node2
      
      • 断开重连
  • 小结

    • 参考克隆过程,一步步实现即可

知识点07:集群环境配置:基本网络配置

  • 目标实现集群基础网络配置

  • 路径

    • step1:IP、主机名及映射
    • step2:防火墙及selinux
  • 实施

    • IP、主机名及映射

      • 三台机器IP

        192.168.88.130
        192.168.88.131
        192.168.88.132
        
      • 三台机器主机名

        node1
        node2
        node3
        
      • 配置Linux本地映射:三台机器都要配置

        vim /etc/hosts
        
        192.168.88.130	node1
        192.168.88.131	node2
        192.168.88.132	node3
        
      • 配置Windows映射

        • 修改文件:C:\Windows\System32\drivers\etc\hosts

        • 添加内容

          192.168.88.130	node1
          192.168.88.131	node2
          192.168.88.132	node3
          
    • 防火墙及selinux

      • 关闭三台机器的防火墙并禁止开机自启

        systemctl stop firewalld
        systemctl disable firewalld
        
        • 前面已配置过不用再次配置
      • 关闭三台机器的selinux

        vim /etc/selinux/config
        
        #修改第6行
        SELINUX=disabled
        

在这里插入图片描述

  • 小结

    • 按照配置实现即可

知识点08:集群环境配置:免秘钥登陆

  • 目标实现集群免秘钥登陆配置

    • 什么是免秘钥登陆?
    • 如何实现免秘钥登陆?
  • 路径

    • step1:免秘钥登陆功能及基本原理
    • step2:免秘钥登陆实现
  • 实施

    • 免秘钥登陆功能及基本原理

      • 需求:分布式过程中,经常需要通过一台机器来管理所有机器

        • 要想管理别的机器,必须要登陆到对应的机器上,再进行命令的操作管理

        • 例如:当前在node1这台机器上,想通过node1登陆到node3上

          ssh username@node3
          
          • 只要运行,就会让用户输入node3上root用户的密码,才允许登陆node3
      • 问题:工作中所有程序要自动化的运行,程序中会实现机器之间彼此自动登陆,怎么解决?

      • 解决:登陆的时候不需要手动的输入密码

        • 通过SSH的免秘钥协议就可以实现第一次输入密码,以后不需要了
        • 假设:A和B,A想免秘钥登陆B或者B想免秘钥登录A,怎么办?
          • step1:让A和B都各自生成一对公私钥
            • A:公钥A,私钥A
            • B:公钥B,私钥B
          • step2:将A的公钥发送给B
            • B会让A输入B的用户的密码,如果密码正确,保留A的公钥
              • 反映了A是知道B的密码的,下一次登陆,A可以不要密码
              • 问题:B如何知道这次的请求是A呢?
            • A下一次登陆,发送请求給B,B用A的公钥加密一串内容,返回给A
            • 如果A能用自己私钥解密内容,并且返回给B
            • B确认内容一致,就确定了A的身份,允许免秘钥登陆
    • 免秘钥登陆实现

      • step1:三台都要生成自己当前用户的一对公私钥

        ssh-keygen -t rsa
        

在这里插入图片描述

- step2:将自己的公钥发送给三台机器

  ```
  ssh-copy-id node1
  ssh-copy-id node2
  ssh-copy-id node3
  ```
  • 小结

    • 什么是免秘钥登陆?
      • 登陆时候不需要给定密码
    • 如何实现免秘钥登陆?
      • step1:先生成公私钥
      • step2:将自己的公钥发送给谁,就能免秘钥登陆谁

知识点09:集群环境配置:时钟同步

  • 目标实现集群时钟同步及软件安装

    • 什么是时钟同步?
    • 如何实现时钟同步?
  • 路径

    • step1:时钟同步需求及方案
    • step2:时钟同步实现
  • 实施

    • 时钟同步需求及方案

      • 需求:所有机器是一个集群,用于共同工作解决同一个问题,必须保证所有机器的时间是同步的,不能有毫秒以上的误差
        • 三台机器:A,B,C
      • 解决
        • 时钟服务器:专门用于提供时钟校准的,只要请求同步即可
          • 代表了标准的时区时间
        • 方案一:B和C都和A同步,不需要联网,时间与实际的时间不准
        • 方案二:A、B、C都跟时钟服务器同步,时间一致都是精准的时间,三台都要联网
        • 方案三:A跟时钟服务器,B和C跟A进行同步,一台机器联网,其他所有机器与这台机器同步
          • 大数据集群中选用方案三
      • 怎么同步?
        • ntp时钟同步服务
    • 时钟同步实现

      • step1:安装ntp服务

        • 三台机器都要执行

          yum -y install ntp
          

在这里插入图片描述

  • step2:配置本地时钟同步

    • 三台机器都要执行
        vim /etc/sysconfig/ntpd
        #添加以下内容:
        SYNC_HWCLOCK=yes

在这里插入图片描述

  • step3:第一台机器与外网同步

    • 修改配置文件

      vim  /etc/ntp.conf
      #删除或者注释所有restrict以及server开头的行
      #添加以下内容:
      #允许哪个网段的机器跟我进行同步
      restrict 192.168.88.0 mask 255.255.255.0 nomodify notrap
      #aliyun的时钟服务器有问题,就使用第二个
      server ntp4.aliyun.com
      server 202.112.10.36
      server 127.127.1.0 # localclock
      fudge 127.127.1.0 stratum 10
      

在这里插入图片描述

        systemctl start ntpd.service
        systemctl enable ntpd.service
  • 检查同步状态
        ntpq -p:列举当前所有可用的同步服务器
        ntpstat:查看当前的同步状态
  • step4:配置另外两台机器

    • 修改配置文件

      vim  /etc/ntp.conf
      #删除所有restrict以及server开头的行
      #添加以下内容:与第一台机器同步
      server 192.168.88.130
      
    • 启动两台机器的ntp服务

      systemctl start ntpd.service
      systemctl enable ntpd.service
      
    • 手动同步

      ntpdate -u 192.168.88.130
      
    • 配置定时任务

      crontab -e
      */5 * * * * /usr/sbin/ntpdate -u 192.168.88.130 > /dev/null 2>&1
      
  • 小结

    • 按照步骤实现即可

知识点10:集群环境配置:MySQL及JDK安装

  • 目标实现集群中MySQL及JDK的安装

  • 路径

    • step1:MySQL的安装
    • step2:JDK的安装
  • 实施

    • MySQL的安装

      • 只需要一台即可:保留第三台

      • 关闭第一台和第二台,设置开机禁止启动

        systemctl stop mysqld  
        systemctl disable mysqld
        
    • JDK的安装

      • 三台都已安装,不需要做任何更改
  • 小结

    • 按照步骤实现即可

知识点11:分布式基础:功能与应用场景

  • 目标掌握分布式的概念及功能和应用场景

    • 什么是分布式?
    • 分布式能解决什么问题?
  • 路径

    • step1:分布式的概念
    • step2:分布式的功能
    • step3:分布式的设计思想
  • 实施

    • 分布式的概念

      • 分布式:基于多台机器的资源,从逻辑上合并为一个整体,对外提供一个统一的服务
        • 分布式存储:磁盘 + 内存
        • 分布式计算:CPU + 内存
      • 集群:指的是构建多台机器,指代的是硬件的机器
    • 分布式的功能

      • 场景

在这里插入图片描述

- 问题

  - 如果1s有100万个请求,假设服务器能支撑,但是每s只能处理5万,性能非常差,怎么解决?
  - 如果1s有100万个请求,假设服务器不能支撑,直接挂掉,导致整体服务故障,怎么解决?

- 解决:构建分布式服务,通过多台机器的资源来实现整体对外提供网站的服务

在这里插入图片描述

  • 分布式功能

    • 单机资源不足以满足需求:避免应用故障

    • 单机资源满足需求性能较差:实现高并发,提高性能

  • 分布式的设计思想

    • 分而治之:
      • 分:将一个大的任务拆分成多个小的任务,由分布式集群中的每个节点来完成每个小的任务,每个小任务结束以后得到一个结果
      • 合:将所有小任务的结果合并为最终的大的结果
  • 小结

    • 什么是分布式?
      • 将多台机器的资源从逻辑上进行合并,作为一个整体,对外提供统一的服务
    • 分布式能解决什么问题?
      • 单机资源不足
      • 单机性能较差

知识点12:分布式基础:架构设计

  • 目标掌握分布式的基本架构设计

    • 分布式如何能实现分而治之?
  • 路径

    • 分布式主从架构
  • 实施

    • 分布式主从架构

      • 几乎所有分布式都是分布式主从架构
      • 角色
        • 主节点:Master:管理节点
          • 管理所有从节点:死活
          • 管理所有任务的分配
          • 管理元数据
          • 一般情况下负责接客:接受客户端的请求
        • 从节点:Worker:工作节点
          • 负责利用自己所在机器的资源实现主节点分配的小任务

在这里插入图片描述

  • 小结

    • 分布式如何能实现分而治之?
    • 架构:分布式主从架构
      • 主:管理节点
        • 管理从节点
        • 管理任务分配
        • 管理元数据
        • 接客
      • 从:工作节点
        • 负责利用自己机器的资源执行任务

知识点13:分布式基础:架构中的问题及解决

  • 目标掌握分布式架构中的问题及解决方案

    • 分布式架构中存在哪些问题以及怎么解决?
  • 路径

    • step1:分布式主从架构中的问题
    • step2:解决方案
  • 实施

    • 分布式主从架构中的问题
      • 整个分布式集群由多台机器构成:如何解决机器故障的问题?
      • 主节点
        • 如果主节点故障是否影响集群的业务实现?
        • 会影响
      • 从节点
        • 如果从节点故障是否影响集群的业务实现?
        • 不影响对外提供的分布式业务
      • 问题:主节点单点故障问题
        • 由于主节点只有一个,一旦主节点故障,整个分布式集群将不可用
    • 解决方案
      • 构建多个主节点,如果一个主节点故障,还有其他的主节点
      • 问题:两个主节点能不能一起工作?
        • 不能一起工作
      • 解决:一个工作,一个不工作
        • HA架构:高可用架构
        • 多个主节点
        • 只有一个主节点是Active状态:处理所有的工作
        • 其他的主节点都是Standby状态:如果Active故障,由Standby转换为Active状态
  • 小结

    • 分布式架构中存在哪些问题以及怎么解决?
      • 问题1:主节点存在单点故障问题
        • 解决:构建多个主节点
      • 问题2:多个主节点能不能一起工作?
        • 不能
        • 解决
          • Active:工作状态的
          • Standby:备份状态的,如果Active故障,Standby切换为Active

知识点14:Zookeeper的介绍

  • 目标掌握Zookeeper的功能及应用场景

    • 什么是Zookeeper?
    • 大数据中什么场景中需要用到Zookeeper?
  • 路径

    • step1:Zookeeper的本质及功能
    • step2:Zookeeper的应用场景
  • 实施

    • Zookeeper的本质及功能

      • 场景1:在分布式架构中,每台机器都有一个JDBC的地址,都是一样的,现在要更换,100台机器,怎么办?

    在这里插入图片描述

    • 解决:实现共享存储:将JDBC这种变化的信息,都存储在一个公共的地方

    • 场景2:多个Master时候,如何决定谁是Active?

在这里插入图片描述

  • 解决:需要一个共享的外部存储来解决选举的问题

  • ZK的本质:是一种特殊的外部存储系统,提供数据的读写

  • 功能

    • 用于存储共享数据:元数据
    • 辅助选举
    • 分布式锁
    • 命名空间
  • Zookeeper的应用场景

    • 应用:ZK不是用于解决大数据存储或者大数据计算的问题,ZK用于解决所有分布式本身所存在的问题的
    • Zookeeper的定义:分布式协调服务
    • 场景1:用于存储核心元数据
    • 场景2:用于辅助选举Master
  • Zookeeper官网:zookeeper.apache.org
    在这里插入图片描述

  • 小结

    • 什么是Zookeeper?

      • 本质:一种特殊的外部存储系统
      • 定义:分布式协调服务工具
      • 功能:专门用于解决分布式工具存在的问题
    • 大数据中什么场景中需要用到Zookeeper?

      • 场景一:存储共享核心元数据

      • 场景二:辅助选举Active的Master

知识点15:Zookeeper架构设计

  • 目标掌握Zookeeper的架构及其设计思想

    • Zookeeper自己本身的架构是什么样的?
    • Zookeeper怎么保证自己不出问题?
  • 路径

    • step1:ZK的架构
    • step2:ZK的设计
  • 实施

    • ZK的架构

      • 为了保证ZK自己不会出现单台机器故障的问题
      • 架构:分布式主从架构
      • 主节点:Leader
        • 对外提供数据的读写
      • 从节点:Follower
        • 对外提供读,写的请求必须转发给Leader实现

在这里插入图片描述

  • ZK的设计

    • ZK如何保证自己不出问题?
    • 特点:公平节点架构
    • 问题1:如果Follower故障,是否有影响?
      • 不影响,还有别的Follower
    • 问题2:如果Leader故障,是否有影响?
      • 不影响,ZK中允许从节点成为主节点,如果leader故障,剩余的Follower会选举一个新的Leader
    • 问题3:如果leader故障,leader中的数据丢失,怎么能帮别人解决问题呢?
      • ZK中每台节点的存储内容是一致的
    • 问题4:怎么保证写入的数据在每个ZK节点中都有?
      • 写入数据只能写入Leader节点,Leader会同步给所有Follower节点
      • 同步超过半数,才代表写入成功
  • 小结

    • Zookeeper自己本身的架构是什么样的?
      • 分布式主从架构
      • 主:Leader:接受读写请求
      • 从:Follower
        • 接受读请求,转发写的请求给Leader
        • 如果Leader故障,重新选举成为新的Leader
    • Zookeeper怎么保证自己不出问题?
      • 特点:公平节点架构
        • 所有节点都能接受客户端的读写请求
        • 所有节点存储的数据都是一致的
        • 允许Follower成为Leader

知识点16:Zookeeper的分布式集群部署

  • 目标实现Zookeeper分布式集群的部署

  • 路径

    • step1:下载解压
    • step2:修改配置
    • step3:启动测试
  • 实施

    • 下载地址:http://archive.apache.org/dist/

    • 下载解压

      #第一台机器
      cd /export/software/
      rz
      tar -zxvf zookeeper-3.4.6.tar.gz -C /export/server/
      
    • 修改配置

      • 修改第一台

        • 切换进入ZK的HOME目录
        cd /export/server/zookeeper-3.4.6/

在这里插入图片描述

  • 生成配置文件
        cp conf/zoo_sample.cfg conf/zoo.cfg
  • 创建存储目录
        mkdir /export/server/zookeeper-3.4.6/zkData
  • 修改配置:zoo.cfg
        vim  conf/zoo.cfg
        #修改第12行
        dataDir=/export/server/zookeeper-3.4.6/zkData
        
        #文件末尾添加集群配置
        server.1=node1:2888:3888
        server.2=node2:2888:3888
        server.3=node3:2888:3888
  • 生成第一台的myid
        echo "1" >/export/server/zookeeper-3.4.6/zkData/myid
  • 分发
      cd /export/server/
      scp -r zookeeper-3.4.6 node2:$PWD
      scp -r zookeeper-3.4.6 node3:$PWD
  • 修改第二台的myid
      echo "2" >/export/server/zookeeper-3.4.6/zkData/myid
  • 修改第三台的myid
      echo "3" >/export/server/zookeeper-3.4.6/zkData/myid
  • 启动测试
    #三台机器都执行
    cd /export/server/zookeeper-3.4.6/
    #启动
    bin/zkServer.sh start
    #状态
    bin/zkServer.sh status
    #关闭
    bin/zkServer.sh stop

在这里插入图片描述
在这里插入图片描述

  • 小结

    • 按照部署配置即可
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间清醒vv子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值