前两篇的博文已经完成了阿里服务器的服务重启,现在开始要把服务转移到网易云服务器中。
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
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数据结构:
大多数时候,我们队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