集群部署zookeeper

一、制作局域网YUM源

1、先挑选一台机器mini4,挂载一个系统光盘到本地目录/mnt/cdromm,然后启动一个httpd服务器

mkdir /mnt/cdromm
mount -t iso9660 -o ro /dev/cdromm /mnt/cdromm
#为了避免每次重启都需要手动挂载,添加自动挂载
vi /etc/fastab
/dev/cdromm     /mnt/cdromm   iso9660 default 0  0

2、将/mnt/cdromm软连接到httpd服务器的/var/www/html 目录中

cd /var/www/html/
ln -s /mnt/cdromm ./centos

3、然后测试一下http://mini4/centos 会看到光盘目录内容,网络版yum私有仓库建立完毕

4、然后就是去各台机器把httpd地址http://mini4/centos配置到repo文件中


二、minimal版本安装软件时缺少依赖

scp 命令都没有 ssh工具箱 yum list | grep ssh  
yum install -y openssh-clients.x86_64
scp拷贝文件需要每台机器都安装scp
scp file1 mini1:/root

 

三、自动化部署脚本

需要将n台虚拟机安装软件,需要先将软件安装包上传到其中一台虚拟机上并在这台虚拟机上安装htppd服务,可以使用命令yum install -y httpd.x86_64安装。接下来需要每台机器配置免密登录,通过那台机器下载需要安装的压缩包,在配置免密登陆时候使用except来解决需要交互输密码的问题。使用boot.sh配置免密登录,使用install.sh安装程序

boot.sh文件:

#!/bin/bash
SERVERS="192.168.156.51 192.168.156.52" # 需要安装软件的虚拟机列表
PASSWORD=123456 # 虚拟机的密码
BASE_SERVER=172.16.203.100  # 主虚拟机的地址
 
auto_ssh_copy_id() {    # 这是一个函数,根据脚本在console执行的返回的结果不同,执行不同的内容
    # 9:模拟输入ssh-copy 变量1->第23行第一个参数是$SERVER
    # 11:如果提示信息结尾是yes/no的形式,发送yes
    # 12:如果提示信息结尾是assword,发送变量2->第23行第二个参数是$PASSWORD
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}
            *assword:* {send -- $2\r;exp_continue;}
            eof        {exit 0;}
        }";
}
 
ssh_copy_id_to_all() {
    for SERVER in $SERVERS  # 遍历$SERVERS,依次执行auto_ssh_copy_id方法
    do
        auto_ssh_copy_id $SERVER $PASSWORD
    done
}
 
ssh_copy_id_to_all  # 执行第20行的方法
 
 
for SERVER in $SERVERS  # 遍历$SERVERS
do
    scp install.sh root@$SERVER:/root  # 将install.sh复制到root@$SERVER:/root下
    ssh root@$SERVER /root/install.sh  # 登录到@SERVER下,执行install.sh脚本
done

install.sh文件:

#!/bin/bash
BASE_SERVER=192.168.156.50	# 主虚拟机的地址
yum install -y wget	# 执行命令安装wget
wget $BASE_SERVER/soft/jdk-7u45-linux-x64.tar.gz	# 从$BASE_SERVER获取jdk的压缩包
tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local	#解压缩到/usr/local下
# 向/etc/profile中写入内容,通常我们的写法是cat a.txt >> /etc/profile,意思是追加a.txt中的内容到/etc/profile下,这里没有写,后面用了一个<<符号,后面跟着EOF+字符串+EOF
# 意思是创建一个临时文件,文件内容是EOF+字符串+EOF,将它的内容追加到/etc/profile中
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.7.0_45
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

 

四、ZooKeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务

ZooKeeper的特征

一个leader,多个follower组成的集群
全局数据一致,每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
分布式读写,更新请求转发,由leader实施
更新请求顺序执行,来自同一个client的更新请求,按其发送顺序依次执行
数据更新原子性,一次数据更新,要么成功,要么失败
实时性,在一定时间范围内,client能读到最新数据

主要使用场景

数据发布与订阅     
发布与订阅即所谓的配置管理,顾名思义就是有系统将数据发布到zk节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,地址列表等就非常适合使用。(Diamond和ConfigServer在这方面也具备的功能)

Name Service     
这个主要是作为分布式命名服务,能过调用zk的create api,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。

分布通知/协调
ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。

分布式锁
分布式锁,这个主要得益于ZooKeeper为我们保证了强一致性,即用户只要完全信任每时每刻,zk集群中任意节点(一个zk server)上的相同znode的数据是一定是相同的。

集群管理
集群机器监控:这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化响应。这样的场景中,通常有一个监控系统,实时检测集群机器是否存活。

分布式队列
队列方面,我目前感觉有两种,一种是常规的先进先出队列,另一种是要等到队列成员聚齐之后的才统一按序执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值