从阿里到网易云centOS7.2服务器迁移服务和各项数据(zookeeper部分)

 前两篇的博文已经完成了阿里服务器的服务重启,现在开始要把服务转移到网易云服务器中。

1.网易的服务器相比阿里的有些区别,要连接网易的服务器需要经过一台中转的服务器。

这时候连接服务器稍微有些麻烦,需要一个隧道和代理。具体内容可以看下面的链接:

https://blog.csdn.net/chaozhi_guo/article/details/51295871

https://blog.csdn.net/firetreesf/article/details/53287633

2.然后把第三方软件安装配置完成

包括:mysql,mongodb,kafka,redis,zookeeper,neo4j,java环境

先装java环境 (centOS7.2  |  rpm方式   |   jdk-8u121-linux-x64)

首先解压安装

rpm -ivh jdk-8u121-linux-x64.rpm

解压完成的jdk,会放在/usr/java/jdk1.8.0_121下面

什么,vim都没有?装一下

yum -y install vim*

接着是配置环境变量

vim /etc/profile.d/java.sh
#java环境配置
JAVA_HOME=/usr/java/jdk1.8.0_121
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME PATH CLASSPATH

然后让source变量生效

source /etc/profile

之后,在终端使用echo命令检查环境变量设置情况

[root@digdate-serv4 ~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_121
[root@digdate-serv1 ~]# echo $CLASSPATH
.:/usr/java/jdk1.8.0_121/lib:/usr/java/jdk1.8.0_121/jre/lib
[root@digdate-serv1 ~]# echo $PATH
/usr/java/jdk1.8.0_121/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.8.0_121/bin:/usr/java/jdk1.8.0_121/jre/bin:/usr/java/jdk1.8.0_121/bin:/usr/java/jdk1.8.0_121/jre/bin

最后检查JDK是否安装成功

[root@digdate-serv1 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

然后装zookeeper总共有两台

解压+改名(因为本就是root用户下,所以不用加sudo)

tar -zxvf zookeeper-3.4.9.tar.gz -C /home/
mv /home/zookeeper-3.4.9 /home/zookeeper

配置zoo.cfg

[root@localhost zookeeper]# cd conf

[root@localhost conf]# cp zoo_sample.cfg zoo.cfg

[root@localhost conf]# vim zoo.cfg

先把dataDir=/tmp/zookeeper注释,然后将下面四行代码添加到文件末尾

dataDir=/home/data/zookeeper

server.1=192.168.16.86:2888:3888

server.2=192.168.16.84:2888:3888

保存,然后创建目录/home/data/zookeeper/data

创建myid文件

[root@localhost conf]# cd /home/data/zookeeper/data

[root@localhost data]# touch myid

[root@localhost data]# echo "1">>myid

拷贝zookeeper
拷贝zookeeper到另外一台机器

[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/usr/local/

中间会要求输入密码,分别输入你另外两台机器的密码就行了

修改myid文件

192.168.1.92的myid内容改为2

[root@localhost zookeeper]# cd /usr/local/zookeeper/data

[root@localhost data]# echo "2">myid

开启zookeeper端口

这里要说一下,centOS7.2新开的服务器,防火墙是锁定的,所以要先解锁防火墙,再启动。

[root@digdate-serv2 data]# systemctl unmask firewalld
Removed symlink /etc/systemd/system/firewalld.service.

然后再开启防火墙,并检查其状态

[root@digdate-serv2 data]# systemctl start firewalld
[root@digdate-serv2 data]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-10-13 14:26:10 CST; 21s ago
     Docs: man:firewalld(1)
 Main PID: 12304 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─12304 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Oct 13 14:26:10 digdate-serv2.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Oct 13 14:26:10 digdate-serv2.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: ICMP type 'beyond-scope' is not supported by the ...pv6.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: beyond-scope: INVALID_ICMPTYPE: No supported ICMP...ime.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: ICMP type 'failed-policy' is not supported by the...pv6.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: failed-policy: INVALID_ICMPTYPE: No supported ICM...ime.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: ICMP type 'reject-route' is not supported by the ...pv6.
Oct 13 14:26:10 digdate-serv2.localdomain firewalld[12304]: WARNING: reject-route: INVALID_ICMPTYPE: No supported ICMP...ime.
Hint: Some lines were ellipsized, use -l to show in full.

否则会报错:Failed to start firewalld.service: Unit is masked.

开启2888、3888、2181端口

[root@localhost data]# firewall-cmd --zone=public --add-port=2888/tcp --permanent

[root@localhost data]# firewall-cmd --zone=public --add-port=3888/tcp --permanent

[root@localhost data]# firewall-cmd --zone=public --add-port=2181/tcp --permanent

重启防火墙

[root@localhost data]# firewall-cmd --reload

启动zookeeper

1、启动(每台机器都要启动)

[root@localhost bin]# /home/zookeeper/bin/zkServer.sh start

如果输出以下内容,表示启动成功

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED 

2、  查看状态

[root@localhost data]# /usr/local/zookeeper/bin/zkServer.sh status

192.168.16.84

ZooKeeper JMX enabled by default
Using config: /home/zookeeper/bin/../conf/zoo.cfg
Mode: leader

192.168.16.86

ZooKeeper JMX enabled by default
Using config: /home/zookeeper/bin/../conf/zoo.cfg
Mode: follower

由此我们看出192.168.16.84这台机器被自动选举为leader了

这里存在一个不稳定性,因为zookeeper最少需要三台服务器才能保证,一旦某一台挂掉了,服务依然能够正常运行,我这里布置的只有两台,所以一旦任意一台挂掉,整个zookeeper就都挂掉了。

客户端连接

[root@digdate-serv2 ~]# /home/zookeeper/bin/zkCli.sh -timeout 5000 -server 192.168.16.86:2181

timeout:超过时间,单位毫秒

r:只读模式,当结点换掉的时候,还可以提供读服务

最终如下图,表示连接成功:

Connecting to 192.168.16.86:2181
2018-10-13 15:33:58,933 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2018-10-13 15:33:58,937 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=digdate-serv2.localdomain
2018-10-13 15:33:58,937 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_121
2018-10-13 15:33:58,939 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-10-13 15:33:58,939 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/java/jdk1.8.0_121/jre
2018-10-13 15:33:58,939 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/home/zookeeper/bin/../build/classes:/home/zookeeper/bin/../build/lib/*.jar:/home/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/home/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/zookeeper/bin/../lib/jline-0.9.94.jar:/home/zookeeper/bin/../zookeeper-3.4.9.jar:/home/zookeeper/bin/../src/java/lib/*.jar:/home/zookeeper/bin/../conf:.:/usr/java/jdk1.8.0_121/lib:/usr/java/jdk1.8.0_121/jre/lib
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=3.10.0-693.el7.x86_64
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2018-10-13 15:33:58,940 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/root
2018-10-13 15:33:58,942 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.16.86 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@446cdf90
Welcome to ZooKeeper!
2018-10-13 15:33:58,965 [myid:] - INFO  [main-SendThread(192.168.16.86:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 192.168.16.86/192.168.16.86:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2018-10-13 15:33:59,036 [myid:] - INFO  [main-SendThread(192.168.16.86:2181):ClientCnxn$SendThread@876] - Socket connection established to 192.168.16.86/192.168.16.86:2181, initiating session
[zk: 192.168.16.86(CONNECTING) 0] 2018-10-13 15:33:59,094 [myid:] - INFO  [main-SendThread(192.168.16.86:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 192.168.16.86/192.168.16.86:2181, sessionid = 0x1666c504f390000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

h:帮助列表

h
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit 
    getAcl path
    close 
    connect host:port

显示能够执行的命令

命令分类和数据库相似,大概可以分为增删改查四类

ZooKeeper数据结构:

从阿里到网易云centOS7.2服务器迁移服务和各项数据(zookeeper部分)_第1张图片

大多数时候,我们队ZooKeeper的操作都是在对节点进行增删改查

常用命令:

查询相关指令

ls path:列出path下的文件

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
[zookeeper]

如上:列出根目录节点下的所有文件,目前就只有一个系统自带的zookeeper节点

stat path:查看节点状态

[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
cZxid:创建节点时的事务id
pZxid:子节点列表最后一次被修改的事务id
cversion:节点版本号
dataCersion:数据版本号
aclVerson:acl权限版本号

......

get path:获取指定节点的内容

ls2 path:列出path节点的子节点及状态信息


创建指令

create [-s] [-e] path data acl

1 [zk: 127.0.0.1:2181(CONNECTED) 10] create /node_1 123
2 Created /node_1

如上:在根目录创建了node_1节点,携带数据 123

使用 get /node_1 验证是否添加节点及其数据成功

[zk: 127.0.0.1:2181(CONNECTED) 15] create -e /node_1/node_1_1 234
Created /node_1/node_1_1

创建了一个临时节点(-e),并且携带数据234,使用stat命令查看这个新建的临时节点

[zk: 127.0.0.1:2181(CONNECTED) 16] stat /node_1/node_1_1
cZxid = 0x200000003
ctime = Sat Aug 27 15:27:30 CST 2016
mZxid = 0x200000003
mtime = Sat Aug 27 15:27:30 CST 2016
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x156cacb918b0000
dataLength = 3
numChildren = 0
ephemeralOwner值不再是0,表示这个临时节点的版本号,如果是永久节点则其值为 0x0
1 [zk: 127.0.0.1:2181(CONNECTED) 1] create -s /node_1/node_1_1 234
2 Created /node_1/node_1_10000000001

通过使用-s参数,创建一个顺序节点,我们虽然指定的节点名是node_1_1,但是实际上,名称却是 node_1_10000000001,如果我们重复执行:

[zk: 127.0.0.1:2181(CONNECTED) 2] create -s /node_1/node_1_1 234
Created /node_1/node_1_10000000002

效果如上

这个特性,我们可以利用一下,生成在分布式环境下的主键生成器。

-s 和 -e 可以同时使用

退出: quit

[zk: 127.0.0.1:2181(CONNECTED) 19] quit
Quitting...
2016-08-27 15:29:44,760 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x156cacb918b0000 closed
2016-08-27 15:29:44,763 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x156cacb918b0000

这个时候如果重新登录,执行 ls /node_1,发现其子节点是空的,创建的node_1_1子节点不见了,那是因为之前创建的时候就已经指定了,我们创建的是一个临时节点。当客户端会话结束后,临时节点是会被删除了。

 

修改相关指定:

set path data [version]

[zk: 127.0.0.1:2181(CONNECTED) 14] set /node_1 998
cZxid = 0x200000002
ctime = Sat Aug 27 15:24:39 CST 2016
mZxid = 0x20000000a
mtime = Sat Aug 27 15:38:40 CST 2016
pZxid = 0x200000008
cversion = 5
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 3

如果我们多次修改,会发现  dataVersion ,也就是数据版本,在不停得发生变化(自增)

 

如果我们在set的时候手动去指定了版本号,就必须和上一次查询出来的结果一致,否则 就会报错。

这个可以用于我们在修改节点数据的时候,保证我们修改前数据没被别人修改过。因为如果别人修改过了,我们这次修改是不会成功的

 

 

删除指令:

delete path [version]

删除指定节点数据,其version参数的作用于set指定一致

 

delete /node_1/node_1_10000000001

整个节点全删除

注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用rmr命令

 

rmr /node_1

你可能感兴趣的:(zookeeper)