第1章 部署准备
软件需求
序号 | 类型 | 软件名称 | 备注 |
---|---|---|---|
1 | 操作系统软件 | Windows Server 2003 或更高版本(RedHat 6.5或CentOS 7或Ubuntu 11) | |
2 | 数据库 | Oracle Enterprise 11G | |
3 | Redis 3.0(或更高版本) | ||
4 | 应用服务器 | JDK 6(或更高版本) | |
5 | Tomcat 6.5(或更高版本) | ||
6 | 中心端应用 | Datamanager.dmp | 数据库导出文件 |
7 | Datacenter.dmp | 数据库导出文件 | |
8 | Datacenter.war | 部署war包 | |
9 | 分布式应用程序协调服务 | Zookeeper3.5.6(或更高版本) | |
10 | 负载均衡器 | Ngnix1.8.0(或更高版本) |
硬件需求(非集群版)
序号 | 类型 | 名称 | 线程数 | 内存数 | 硬盘大小 | 数量 | 备注 |
---|---|---|---|---|---|---|---|
1 | 数据库服务器 | Oracel数据库服务器 | 8个以上 | 16G以上 | 500G以上 | 1 | |
2 | 应用 服务器 | 应用服务器 | 16个以上 | 16G以上 | 200G以上 | 1 | |
3 | 应用 服务器 | 适配器应用服务器 | 8以上 | 8G以上 | 160G以上 | 1 | |
4 | 应用 服务器 | 门户服务器 | 8个以上 | 16G以上 | 1T以上 | 1 | 全文检索服务器部署在门户服务器上,所以存储空间为1T,系统监控服务也部署在此服务器上 |
硬件需求(中配集群版)
序号 | 类型 | 名称 | 线程数 | 内存数 | 硬盘大小 | 数量 | 备注 |
---|---|---|---|---|---|---|---|
1 | 数据库服务器 | Oracel数据库服务器 | 32以上 | 32G以上 | 1T以上 | 2 | |
2 | 应用 服务器 | 应用服务器 | 32以上 | 32G以上 | 200G以上 | 3 | Tomcat、Redis、Zookeeper服务器 |
3 | 应用 服务器 | 适配器应用服务器 | 16以上 | 32G以上 | 160G以上 | 1 | |
4 | 负载均衡器 | nginx负载均衡器 | 16以上 | 16G以上 | 200G以上 | 1 | |
5 | 应用 服务器 | 门户服务器 | 8以上 | 16G以上 | 1T以上 | 1 | 全文检索服务器部署在门户服务器上,所以存储空间为1T,系统监控服务也部署在此服务器上 |
配件需求(高配集群版)
序号 | 类型 | 名称 | 线程数 | 内存数 | 硬盘大小 | 数量 | 备注 |
---|---|---|---|---|---|---|---|
1 | 数据库服务器 | Oracel数据库服务器 | 32以上 | 64G以上 | 1T以上 | 2 | |
2 | 应用 服务器 | tomcat应用服务器 | 32以上 | 32G以上 | 200G以上 | 3 | |
3 | 应用 服务器 | Redis、Zookeeper服务器 | 32以上 | 32G以上 | 200G以上 | 3 | |
4 | 应用 服务器 | Flink | 32以上 | 32G以上 | 200G以上 | 3 | |
5 | 应用 服务器 | 适配器应用服务器 | 16以上 | 32G以上 | 200G以上 | 2 | |
6 | 负载均衡器 | nginx负载均衡器 | 16以上 | 32G以上 | 200G以上 | 2 | nginx或F5,建议用F5 |
7 | 应用 服务器 | 门户服务器 | 8以上 | 16G以上 | 1T以上 | 1 | 全文检索服务器部署在门户服务器上,所以存储空间为1T,系统监控服务也部署在此服务器上 |
部署说明
部署类型说明
集群版部署:
集群部署就是部署多台服务器协同完成一项工作。
非集群版部署:
非集群部署则是部署在同一台服务器上。
集群部署模式说明
Master/Slave模式:
核心思想是基于分而治之的思想,将一个原始任务分解为若干个语义等同的子任务,并由专门的工作者线程来并行执行这些任务,原始任务的结果是通过整合各个子任务的处理结果形成的。
Cluster模式:
通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
集群部署时软件所属类型
Master/Slave模式:
1、 Oracle;
2、 Redis;
3、 Zookeeper;
4、 Ngnix(Keepalive);
5、 datacenter(基于某个服务时);
Cluser模式:
1、 Oracle;
2、 Tomcat;
3、 datacenter(基于不同服务时);
第2章 Windows非集群版部署安装
Oracle数据库安装与配置
安装前准备工作
确认Oracle数据库的安装操作系统及版本,从Oracle官网下载相应的Oracle Enterprise 11G安装程序;
规划好的数据库备份方案与容灾方案;
其它未涉及事宜。
Oracle数据库安装与配置
设置字符集为GBK;
用sys账号登录,修改Process参数,命令如下:
alter system set processes=1600 scope = spfile;
修改180天要强制修改口令:
用sys账号登录,修改口令限期问题,命令如下:
Alter PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
设置参数SQLNET.EXPIRE_TIME:
找到sqlnet.ora文件(在Oracle_Home\network\amdin目录下),打开文件,在文件中增加以下内容:SQLNET.EXPIRE_TIME=20;
防火墙设置,设置1521端口可以外部防问,如果没有安装防火墙或防火墙关闭则可以不处理;
设置游标数(show parameter open_cursors;):
alter system set open_cursors=2000;
对Oracle Users表空增加dbf文件,先查询dbf文件存放路径:
Select * from dba_data_files。 -- 增加dbf文件: alter tablespace USERS add datafile 'Oracledbf文件路径\USERS02.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS03.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS04.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS05.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile 'Oracledbf文件路径\USERS06.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS07.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS08.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS09.DBF' size 500M autoextend on next 50M maxsize unlimited ; alter tablespace USERS add datafile ' Oracledbf文件路径\USERS10.DBF' size 500M autoextend on next 50M maxsize unlimited ;
Dmp导入
安装前的准备工作
确定已经完成了Oracle数据库安装与配置步骤;
获得到datamanager.dmp与datacenter.dmp文件;
安装PLSQL工具。
用户创建及用户授权
用sys账号(dba身份)登录PLSQL,打开sql文件,执行文件中的所有语句。
注意:要核对所有的语句是否执行成功。
Datamanager dmp导入
导入前检查:
在导入dmp文件前,请核对DMP导入的前二个步骤已经成功执行完成。核对操作导入dmp的机器上可以执行imp命令操作及正确配置数据库的连接。
采用imp命令进行数据导入,完整命令如下:
Imp userid=datamanager/data file=datamanager文件目录/datamanager.dmp full=y
导入数据后处理(空表不能导出处理,在datamanager下执行):
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
把查询结果在PLSQL中执行,以空行数据进行导出处理。
Datacenter dmp导入
导入前检查:
在导入dmp文件前,请核对DMP导入的前二个步骤已经成功执行完成。核对操作导入dmp的机器上可以执行imp命令操作及正确配置数据库的连接。
采用imp命令进行数据导入,完整命令如下:
Imp userid= datacenter /data file= datacenter文件目录/ datacenter.dmp full=y
导入数据后处理(空表不能导出处理,在datacenter下执行):
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
把查询结果在PLSQL中执行,以空行数据进行导出处理。
应用服务器安装
安装前准备工作
下载JDK,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,注请下载64位的JDK版本。
下载Tomcat,地址;http://tomcat.apache.org/,请下载64位版本。
其它未涉及事宜。
JDK安装
双击进行安装;
配置环境变量,JAVA_HOME与Bin路径,下面是Windows的配置
设置JAVA_HOME:
在PATH中增加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
在cmd命令行验证安装是否正确:java -version。
Tomcat安装
按照官网的文档安装进行Tomcat安装。
JAVA运行内存配置
修改应用运行内存大小,打开tomcat bin目录下的catalina文件,在头部加入以下参数:
set JAVA_OPTS=-Xms1024M -Xmx4096M
Redis数据库安装
安装前准备工作
确认Redis内存数据库安装的操作系统及版本,从http://redis.io/官网下载相应的安装程序(3.0以上的版本);
其它未涉及事宜。
Redis数据库安装
按照官方文档安装。
Redis安装后配置
设置appendfsync:
打开redis.conf文件,设置 `appendfsync no`
设置对外服务地址:
bind 127.0.0.1
设置最大的内存使用量(设置成物理内存的一半):
maxmemory 4G
修改服务端最大连接数据:
maxclients 10000
修改连接空闲保留时间:
tcp-keepalive 60
修改连接超时:
timeout 60
修改tcp-backlog:
tcp-backlog 1022
防火墙设置,设置6379端口可以外部防问,如果没有安装防火墙或防火墙关闭则可以不处理。
War包部署
安装前准备工作
1、Tomcat、JDK、数据库配置已经安装完成;
2、获得最的datacenter.war包;
3、准备Winrar类似的解压工具与UE类似的编辑工具。
修改war中配置文件
用winrar打开datacenter.war包;
修改global.app.properties中日志文件保存路径:
documentPath=D:\\dwdocument,修改正式运行环境下的日志文件存放路径,注意windows与Linux路径格式;
修改jdbc.conf文件:
Jdbc.conf在目录datacenter\WEB-INF\classes下,修改Oracle数据库连接信息,如下:
修改redis数据库连接信息,如下图:
部署datacenter.war包
拷贝修改后datacenter.war包到tomcat安装目录下的webapps下;
测试部署结果,进入命令行,进入tomcat bin目录下,运行以下命令:
Catalina run
如果正常启动,则部署成功,如果有错误,根据错误的情况调整相关的参数。
第3章 Windows集群版部署安装
安装服务
数据库(oracle与redis)
1、Oracle的集群部署安装:
Oracle集群安装参考非集群版部署安装
2、Redis的集群部署安装:
1、redis Server:
Master;
Bind IP;
Port:改成相应自定义;
MaxMemory:改成实际物理内存一半;
Appendonly:no;
protected-mode:no;
Slave:
Bind ip;
Port:改成相应自定义;
MaxMemory:改成实际物理内存一半;
AppendOnly:no;
Protected-mode:no;
Slaveof:IP port;
2、redis Sentinel:
Bind ip
Port:改成相应自定义
守护服务名称及服务配置信息
sentinel monitor master1 127.0.0.1 6379 2
sentinel会向master发送心跳PING来确认master是否存活时间配置:
sentinel down-after-milliseconds master1 30000
在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步:
sentinel parallel-syncs master1 1
sentinel向master发起ping超时设置:
sentinel failover-timeout master1
protected-mode:no
分布式任务与状态服务(Zookeeper)
1、 Zookeeper:
1、运行zookeeper命令:/bin下的zkSever.bat
2、在zookeeper目录下创建数据目录data,日志目录log
3、zookeeper配置文件zoo.cfg
设置数据目录dataDir:dataDir=../data
增加日志目录logDir:logDir=../log
4、设置集群信息:
在data目录新增文件myid没有后缀,在文件中输入数字,第一个zookeeper为1,第二个为2,第三为3,依此类推:
zoo.cfg中新增集群配置信息如下:
server.1=192.188.90.81:2887:3887
server.2=192.188.90.82:2887:3887
server.3=192.188.90.83:2887:3887
5、zookeeper的查看工具zooInspector
应用服务器(Tomcat)
Tomcat
1、Tomcat节点配置,打开配置文件conf\server.xml
配置jvm,同一台机器上多个tomcat,jvmRoute不能重复
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxHttpHeaderSize="81920" redirectPort="8443" maxThreads="1500" acceptCount="200" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Connector port="8009" protocol="AJP/1.3" maxThreads="1500" redirectPort="8443" />
2、..\Tomcat\conf下context.xml文件中配置:
3、 修改内存JAVA_OPTS
a) xms:修改成物理内存的1/3
b) xmx:修改成物理内存2/3
4、..\Tomcat\lib下jar包:
负载均衡器(Nginx)
Nginx
1、配置nginx:
文件位置: /usr/local/bin/nginx-1.8.0/conf/nginx.conf
Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值。
2、配置负载均衡:
upstream lsrjhttp {
server 192.168.100.98:8080 weight=1;
server 192.168.100.17:8080 weight=1;
server 192.168.100.88:8080 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://lsrjhttp;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#add_header 'Access-Control-Allow-Origin' '*';
#add_header 'Access-Control-Allow-Credentials' 'true';
#add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
error_page 500 502 503 504 /50x.html;
}
3、负载算法:
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
#设定负载均衡服务器列表
upstream lsrj_http {
#后端服务器访问规则
server 192.168.1.115:8080 weight=1; #server1
server 192.168.1.131:8081 weight=1; #server1
server 192.168.1.94:8090 weight=1; #server3
}
2、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
upstream lsrj_http {
2、url_hash;
server .*.***.***:8855;
server .*.***.***:8811;
}
3、源地址哈希法(不推荐用,因为消息发布系统有的特别多,这样会导致某些机器压力特别大)就是对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream lsrj_http {
ip_hash;
server .*.***.***:8855;
server .*.***.***:8811;
}
4、fair法(非官方):这个fair表示的是按照服务器响应时间的长短来进行分发的,服务器响应时间越短的,优先分发。
upstream lsrj_http {
server .*.***.***:8855;
server .*.***.***:8811;
fair;
}
4、启动方法:
查看nginx的版本号:nginx -v
启动nginx:start nginx
快速停止或关闭nginx:nginx -s stop
正常停止或关闭nginx:nginx -s quit
配置文件nginx.conf修改重装载命令:nginx -s reload
应用程序(中心端)
1、 Datacenter配置
1、拿到最新datacenter.war,解压;
2、更改四个文件的名字:
找到datacenter\WEB-INF\classes\config\下的global.dao.xml,修改成global.dao.single.xml;
找到datacenter\WEB-INF\classes\config\下的global.dao.cluser.xml,修改成global.dao.xml;
找到datacenter\WEB-INF\classes\config\app\下的app.service.xml,修改成global.service.single.xml;
找到datacenter\WEB-INF\classes\config\app\下的app.service.cluser.xml,修改成app.service.xml;
找到datacenter\WEB-INF\classes\config\app\下的app.extend.xml,修改成global.extend.single.xml;
找到datacenter\WEB-INF\classes\config\app\下的app.extend.cluser.xml,修改成app.extend.xml;
3、修改redis集群配置信息,找到修改后的global.dao.xml
1、修改 <property name="name" value="master1"> </property> 中value值为正确的redis senstinal中的配置信息;
2、修改集群中各sentinal信息:IP地址与端口,有几个senstinal就配置几个,下面的例子有三个senstinal.
<constructor-arg name="host" value="192.168.100.105"></constructor-arg>
<constructor-arg name="port" value="27000"></constructor-arg>
3、例子:
<bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="master1">
</property>
</bean>
</property>
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.100.105"></constructor-arg>
<constructor-arg name="port" value="27000"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.100.106"/>
<constructor-arg name="port" value="27000"/>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.100.107"/>
<constructor-arg name="port" value="27000"/>
</bean>
</set>
</property>
</bean>
4、修改zookeeper集群信息,找到修改后的app.service.xml,修改如下的配置信息:
<bean id="zkConnection" class="org.win.extend.zookeeper.bean.ZKConnection" >
<constructor-arg index="0" value="192.168.100.105:2181,192.168.100.105:2181,192.168.100.105:2181" />
<constructor-arg index="1" ref="retryPolicy" />
<constructor-arg index="2" value="kmonitor" />
<constructor-arg index="3" value="/tasks" />
</bean>
把zookeeper的IP地址与端口修改成集群的zookeeper配置信息。
5、修改kafka配置信息。
1、找到修改后的app.service.xml,打开kafkaProducerService注释。
例子:
<bean id="syncMessageImpl" class="org.win.framework.syncmessage.impl.SyncMessageImpl" scope="prototype">
<property name="syncSettingMappingImpl" ref="syncSettingMappingImpl"></property>
<property name="subscriberMappingImpl" ref="subscriberMappingImpl"></property>
<property name="xMLParameterParse" ref="xMLParameterParse"></property>
<property name="jsonParameterParse" ref="jsonParameterParse"></property>
<property name="xmlParamEncoder" ref="xmlParamEncoder"></property>
<property name="jsonParamEncoder" ref="jsonParamEncoder"></property>
<property name="xMLResultRender" ref="xMLResultRender"></property>
<property name="jsonResultRender" ref="jsonResultRender"></property>
<property name="xMLResultParse" ref="xMLResultParse"></property>
<property name="jsonResultParse" ref="jsonResultParse"></property>
<property name="tableInfo" ref="tableMapping" ></property>
<property name="parameterMapping" ref="parameterMapping"></property>
<property name="publiserMapping" ref="publiserMapping"></property>
<property name="blobSave" ref="blobSaveImpl" ></property>
<property name="syncMessageImplV3" ref="syncMessageImplV3" ></property>
<property name="kafkaProducerService" ref="kafkaProducerService" ></property> <!---->
</bean>
2、找到app.kafka.producer.xml,修改kafka服务地址。
例子:
<bean id="producerFactory" class="org.springframework.kafka.core.DefaultKafkaProducerFactory">
<constructor-arg>
<!-- key 详见org.apache.kafka.clients.producer.ProducerConfig中的常量用于调优kafka参数 -->
<map>
<entry key="bootstrap.servers" value="192.168.100.113:9092,192.168.100.114:9092,192.168.100.115:9092"/>
<entry key="key.serializer" value="org.apache.kafka.common.serialization.StringSerializer"></entry>
<entry key="value.serializer" value="org.apache.kafka.common.serialization.StringSerializer"></entry>
</map>
</constructor-arg>
</bean>
5、Tomcat session同步用的redis可以采用同一个集群(Master/Salve)。
2、 Datacenter部署
1、拷贝修改后datacenter.war包到tomcat安装目录下的webapps下
2、测试部署结果,进入命令行,进入tomcat bin目录下,运行以下命令:
Catalina run
3、如果正常启动,则部署成功,如果有错误,根据错误的情况调整相关的参数。
第4章 Linux非集群版部署安装
常用命令
修改机器名:hostnamectl set-hostname 定义的机器名称;
通过机器名访问机器:gedit /etc/hosts;
免密处理:
生成公钥:ssh-keygen -t rsa
copy到相应的机器:ssh-copy-id 机器名
查看进程:ps -ef|grep 服务名;
查看磁盘空间:df -h;
查看大文件:find / -type f -size +80M;
查看内存:free -m;
远程copy: scp -r /etc/hosts root@192.168.100.22:/etc/;
部署服务
数据库服务器
1、 Redis:
a) 把redis-3.2.11.tar copy到linux /tmp目录下;
b) 转到 /tmp/目录下运行 tar xzf redis-3.2.11.tar.tz;
c) 转到redis-3.2.11目录
d) 运行make install命令;
e) 在usr/local/bin目录下创建redis3.2目录,把usr/local/bin目录下的redis开头的几个文件copy到usr/local/bin/redis3.2目录下;
f) cp /tmp/redis-3.2.11目录下的redis.conf 文件copy到 /usr/local/bin/redis3.2目录,cp /tmp/redis-3.2.11/redis.conf /usr/local/bin/redis3.2;
应用服务器
JDK:
把jdk-8u91-linux-x64.tar.gz copy linux /usr/local/bin
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/bin
设置环境变量:gedit vi /etc/profile
在文件末尾增加以下三行:
export JAVA_HOME=/usr/local/bin/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
使环境变量生效:source /etc/profile
验证安装情况:java -version
Tomcat
Tomcat节点配置,打开配置文件conf\server.xml
Copy conf目录与lib到tomcat安装目录
设置内存:修改catalina.sh,在第一行增加:
set JAVA_OPTS=-Xms1024m -Xmx2048m
Linux特殊操作:设置目录权限(在tomact根目录下执行):
chmod -R 777 /usr/local/bin/apache-tomcat-8.5.51
启动与关闭:
启动:/usr/local/bin/apache-tomcat-8.5.51/bin/startup.sh
关闭:ps -ef|grep tomcat kill -9 进程号
进入目录
# cd /etc/systemd/system/
设置开机启动
# systemctl enable tomcat
查询当前tomcat的状态:
# systemctl status tomcat
关闭tomcat:
# systemctl stop tomcat
重启tomcat:
# systemctl restart tomcat
启动tomcat:
# systemctl start tomcat
关闭开机自启:
# systemctl disable tomcat
中心端程序
按照windows非集群版配置进行修改。
拷贝修改后datacenter.war包到tomcat安装目录下的webapps下;
第5章 Linux集群版部署安装
Redis
安装包
Copy redis3.2到/usr/local/bin/,把redis3.2改名为redis6379;
Copy redis3.2到/usr/local/bin/,把redis3.2改名为redis27000;
redis 配置
设置appendonly: appendonly: no
redis slave中增加一行:slaveof 192.168.0.10 6379
maxmemory 要打开设置成物理内存的一半
修改IP地址(IP地址为redis所在的机器IP地址) bind 192.168.100.98
修改端口:port 7000
设置后台运行:daemonize yes
设置protected-mode(集群sentinel与redis要不需用户验证):protected-mode no
redis 启动命令用: ./redis-server redis.conf
redis senstinel 配置
bind 192.168.100.98
port 27000
daemonize yes
sentinel monitor master1 192.168.100.98 6379 2
sentinel down-after-milliseconds master 30000
sentinel parallel-syncs master 1
sentinel failover-timeout master 180000
redis senstinel 启动命令:./redis-sentinel sentinel.conf
注意事项与命令
非集群版部署redis与redis sentinel的端口号不能重复;
查看redis进程:ps -ef|grep redis 杀过程:kill -9 进程号;
redis命令查看集群:./redis-cli -h 192.168.100.14 -p 6379 info replication;
启动命令:./redis-server redis.conf;
Zookeeper
安装前准备
查看是否安装JDK java -version,如果没有安装,请先安装jdk;
安装zookeeper
copy apache-zookeeper-3.5.6-bin.tar.gz 到 linux /tmp 目录;
cd /tmp tar zxvf apache-zookeeper-3.5.6-bin.tar.gz -C /usr/local/bin;
在zookeeeper-3.5.6下创建data与log目录;
在zookeeper目录下创建数据目录data,日志目录log;
zookeeper配置文件zoo.cfg:
数据目录:dataDir=/usr/local/bin/apache-zookeeper-3.5.6-bin/data
日志目录:logDir=/usr/local/bin/apache-zookeeper-3.5.6-bin/log
设置集群信息:
在data目录新增文件myid没有后缀,在文件中输入数字,第一个zookeeper为1,第二个为2,第三为3,依此类推:
zoo.cfg中新增集群配置信息如下:
admin.serverPort=8280
server.1=192.100.100.20:2887:3887
server.2=192.100.100.21:2887:3887
server.3=192.100.100.22:2887:3887
给zookeeper目录下的文件及子目录授权:
chmod -R 777 /usr/local/bin/apache-zookeeper-3.5.6-bin
分发:
scp -r /usr/local/bin/apache-zookeeper-3.5.6-bin/
root@192.168.100.21:/usr/local/bin/
scp-r/usr/local/bin/apache-zookeeper-3.5.6-bin/ root@192.168.100.22:/usr/local/bin/
启动停止及查看命令:
启动: cd/usr/local/bin/apache-zookeeper-3.5.6-bin/bin ./
zkServer.sh start
停止:cd /usr/local/bin/apache-zookeeper-3.5.6-bin/bin./zkServer.sh stop
状态:cd /usr/local/bin/apache-zookeeper-3.5.6-bin/bin./zkServer.sh status
查看日志: cat zookeeper.out
zookeeper的查看工具zooInspector
Tomcat
安装部署
1.Tomcat节点配置,打开配置文件conf\server.xml;
2.Copy conf目录与lib到tomcat安装目录;
3.设置内存:修改catalina.sh,在第一行增加:
set JAVA_OPTS=-Xms1024m -Xmx2048m;
4.Linux特殊操作:设置目录权限(在tomact根目录下执行):
chmod -R 777 /usr/local/bin/apache-tomcat-8.5.51;
5.启动与关闭:
启动:/usr/local/bin/apache-tomcat-8.5.51/bin/startup.sh;
关闭:ps -ef|grep tomcat ;
kill -9 进程号;
6.进入目录:
# cd /etc/systemd/system/
7.设置开机启动:
# systemctl enable tomcat
8.查询当前tomcat的状态:
# systemctl status tomcat
9.关闭tomcat:
# systemctl stop tomcat
10.重启tomcat:
# systemctl restart tomcat
11.启动tomcat:
# systemctl start tomcat
12.关闭开机自启:
# systemctl disable tomcat
Nginx
安装
copy nginx-1.8.0 to /usr/local/bin目录下;
授权:chmod -R 777 /usr/local/bin/nginx-1.8.0;
启动、测试、关闭命令:
启动:cd /usr/local/bin/nginx-1.8.0/sbin./nginx
测试配置文件:nginx -t
强制关闭:pkill nginx
配置
文件位置: /usr/local/bin/nginx-1.8.0/conf/nginx.conf Nginx(配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值)。
配置负载均衡:
upstream lsrjhttp {
server 192.168.100.98:8080 weight=1;
server 192.168.100.17:8080 weight=1;
server 192.168.100.88:8080 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://lsrjhttp;
proxy_set_header Host $host:$server_port;
}
error_page 500 502 503 504 /50x.html;
}
负载算法
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
#设定负载均衡服务器列表
upstream lsrj_http {
#后端服务器访问规则
server192.168.1.115:8080 weight=1; #server1
server192.168.1.131:8081 weight=1; #server1
server192.168.1.94:8090 weight=1; #server3
}
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
upstream lsrj_http {
2、url_hash;
server .*.***.***:8855;
server .*.***.***:8811;
}
源地址哈希法(不推荐用,因为消息发布系统有的特别多,这样会导致某些机器压力特别大)就是对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream lsrj_http {
ip_hash;
server .*.***.***:8855;
server .*.***.***:8811;
}
fair法(非官方):这个fair表示的是按照服务器响应时间的长短来进行分发的,服务器响应时间越短的,优先分发。
upstream lsrj_http {
server .*.***.***:8855;
server .*.***.***:8811;
fair;
}
Keepalive
安装
yum install keepalived -y;
配置文件:/etc/keepalived/keepalived.conf;
主程序:/usr/sbin/keepalived;
配置部署
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.110/24 dev ens33 label ens33:1
}
}
注意:ens33 这个是网卡接口,有可能不是这个用ifconfig查看
另一台机器上的配置文件如下(与一台不同的参数:state,priority)
global_defs {
notification_email {
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.110/24 dev ens33 label ens33:1
}
}
查看日志:tail /var/log/messages
Kafka
配置部署
解压:tar -zxvf kafka_2.11-2.3.1.tgz -C /usr/local/bin;
listeners=PLAINTEXT://192.168.100.98:9092
advertised.listeners=PLAINTEXT://192.168.100.98:9092
#topic的默认分割的分区个数。多分区允许消费者并行获取数据,机器数量的3倍。
num.partitions=9
#当Kafka启动时恢复数据和关闭时保存数据到磁盘时使用的线程个数。
num.recovery.threads.per.data.dir=3
#副本个数。除了开发测试外,其他情况都建议将该值设置为大于1的值以保证高可用,比如:3。
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
#Zookeeper连接字符串。是一个使用逗号分隔的host:port字符串。 zookeeper.connect=172.16.3.177:12181,172.16.3.178:12181,172.16.3.179:12181/kafka
log.dirs=./logs
分发:
scp -r /usr/local/bin/kafka_2.11-2.3.1/ root@192.168.100.21:/usr/local/bin/kafka_2.11-2.3.1/
scp -r /usr/local/bin/kafka_2.11-2.3.1/ root@192.168.100.22:/usr/local/bin/kafka_2.11-2.3.1/
修改配置文件
#每台机器上不一样,第一台为0,第二台1,第三台为2
listeners=PLAINTEXT://192.168.100.98:9092
advertised.listeners=PLAINTEXT://192.168.100.98:9092
启动kafka与停止
切换目录:cd /usr/local/bin/kafka_2.11-2.3.1
启动:bin/kafka-server-start.sh -daemon config/server.properties
停止:bin/kafka-server-stop.sh
查看主题: bin/kafka-topics.sh -list -zookeeper 192.168.100.20:2181,192.168.100.201:2181,192.168.100.22:2181
重新初始化Kafka在zookeerp中的配置信息:
cd /usr/local/bin/apache-zookeeper-3.5.6-bin/bin
./zkCli.sh -timeout 5000 -server node20:2181,node21:2181,node22:2181
删除kafka在zookeeper中的信息:deleteall /kafka
查看数据: ls /
删除指定数据: delete /node_1/node_1_10000000001
要使分区比较均匀的落到不同的机器上,要在所的kafka启动完成后,同发布数据
其他操作
cd /usr/local/bin/kafka_2.11-2.3.1
查看主题:
bin/kafka-topics.sh --list --bootstrap-server 192.168.100.20:9092,192.168.100.21:9092,192.168.100.22:9092
创建主题:
bin/kafka-topics.sh --create --bootstrap-server node20:9092,node21:9092,node22:9092 --replication-factor 3 --partitions 9 --topic datacenter
删除主题:
bin/kafka-topics.sh --delete --bootstrap-server node20:9092,node21:9092,node22:9092 --topic datacenter
查看分区:
bin/kafka-topics.sh --describe --bootstrap-server 192.168.100.20:9092,192.168.100.21:9092,192.168.100.22:9092
创建分区:
bin/kafka-topics.sh --alter -bootstrap-server node20:9092,node21:9092,node22:9092 --topic datacenter --partitions 9
Hadoop
配置部署
修改host文件gedit /etc/hosts增加以下信息:
192.168.100.20 node20
192.168.100.21 node21
192.168.100.22 node22
发送到集群的其它机器:
scp -r /etc/hosts root@192.168.100.21:/etc/
scp -r /etc/hosts root@192.168.100.22:/etc/
测试:ping node21ping node22
/usr/local/bin 目录下创建文件夹(三台机器都需要做) 在root用户下创建hadoop文件夹
设置SSH免密钥
设置20与其它机器免密钥:
ssh-keygen -t rsa
ssh-copy-id node20
ssh-copy-id node21
ssh-copy-id node22
设置21与其它机器免密钥:
ssh-keygen -t rsa
ssh-copy-id node20
ssh-copy-id node21
ssh-copy-id node22
设置22与其它机器免密钥:
ssh-keygen -t rsa
ssh-copy-id node20
ssh-copy-id node21
ssh-copy-id node22
解压安装hadoop(只在一台机器上处理,最后用scp分发)
tar zxvf hadoop-2.8.3.tar.gz -C /usr/local/bin/hadoop/
配置hadoop集群注意:配置文件在/usr/local/bin/hadoop/hadoop-2.8.3/etc/hadoop/下
cd /usr/local/bin/hadoop/hadoop-2.8.3/etc/hadoop
6.1修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/bin/hadoop/hadoop-2.8.3/data/full/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node20:2181,node21:2181,node22:2181</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>ipc.client.connect.max.retries</name>
<value>100</value>
<description>Indicates the number of retries a client will make to establish a server connection. </description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>10000</value>
<description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
</property>
</configuration>
6.2 修改hadoop-env.sh
export JAVA_HOME=/usr/local/bin/java/jdk1.8.0_91
6.3修改hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>node20,node21</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.node20</name>
<value>node20:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.node20</name>
<value>node20:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.node21</name>
<value>node21:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.node21</name>
<value>node21:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node20:8485;node21:8485;node22:8485/cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/bin/hadoop/hadoop-2.8.3/data/journal_tmp_dir</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/bin/hadoop/hadoop-2.8.3/data/datanode/data</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/bin/hadoop/hadoop-2.8.3/data/datanode/name</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
</configuration>
6.4 修改 slaves:
node20
node21
node22
export JAVA_HOME=/usr/local/bin/java/jdk1.8.0_91
6.6 修改mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6.7 修改yarn-env.sh:
修改 export JAVA_HOME=/usr/local/bin/java/jdk1.8.0_91
6.8 修改yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm0,rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm0</name>
<value>node20</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node21</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node22</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node20:2181,node21:2181,node22:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
分发hadoop到节点(写机器别名与IP地址是一样的)
cd /usr/local/bin/hadoop
scp -r /usr/local/bin/hadoop/hadoop-2.8.3/ root@node21:/usr/local/bin/hadoop/hadoop-2.8.3/
scp -r /usr/local/bin/hadoop/hadoop-2.8.3/ root@192.168.100.22:/usr/local/bin/hadoop/hadoop-2.8.3/
配置环境变量
gedit /etc/profile
末尾追加
export HADOOP_HOME=/usr/local/bin/hadoop/hadoop-2.8.3
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/
sbin:$HADOOP_HOME/lib/native
编译生效 source /etc/profile
初始化验证集群(只运行一次)
1、如果集群是第一次启动,需要格式化namenode
cd /usr/local/bin/hadoop/hadoop-2.8.3
2、创建命名空间(格式化ZK集群):
hdfs zkfc -formatZK
3.启动journalnode集群 :安装journalnode的主机上(node20,node21,node21)上启动journalnode
hadoop-daemon.sh start journalnode
4.格式化namenode、启动namenode
1.在node20上执行: hdfs namenode -format
2.在node20上执行: hadoop-daemon.sh start namenode
3.在node21上执行: hdfs namenode -bootstrapStandby
4.在node21上执行: hadoop-daemon.sh start namenode
5.启动datanode,在node20上执行:
hadoop-daemons.sh start datanode
6.启动启动主备切换进程,(即node20和node21上都执行命令)上启动主备切换进程,ZKFC (FailoverController) 必须是在namenode节点上启动 让zk来决定用哪个namenode作为active hadoop-daemon.sh start zkfc
10.启动与停止:
1、在安装journalnode的主机上(node20,node21,node21)上启动journalnode(等待一些时间,好像这个服务启动比较慢)
cd /usr/local/bin/hadoop/hadoop-2.8.3
hadoop-daemon.sh start journalnode
2.启动:
1.在node20上执行: hadoop-daemon.sh start namenode
2.在node21上执行: hadoop-daemon.sh start namenode
3.启动datanode,在node20上执行:
hadoop-daemons.sh start datanode
4、启动主备切换进程
在所有NameNode(即node20和node21上都执行命令)上启动主备切换进程:
hadoop-daemon.sh start zkfc
5、停止:
6.其它
1、启动某个namenode:
hadoop-daemon.sh start namenode
2、启动某个datanode
hadoop-daemon.sh start datanode
11、检查启动是否成功
1、启动后node20和node21都处于备机状态,将node21切换为主机(下面的命令在hadoop1上执行):
hdfs haadmin -transitionToActive node21
2、查看DataNode是否正常启动 :
hdfs dfsadmin -report
访问集群:
浏览器 http://192.168.100.20:50070 访问集群
12、HA的切换:
由于配置的是自动切换,若NNA节点宕掉,NNS节点会立即由standby状态切换为active状态。若是配置的手动状态,可以输入如下命令进行人工切换:
hdfs haadmin -failover --forcefence --forceactive nna nns
hdfs haadmin -getServiceState node20
13、参考文档:https://www.iteye.com/blog/chengjianxiaoxue-2174940
版本一致:https://yq.aliyun.com/articles/100913?t=t1
14、yarn启动与停止:
sbin/stop-yarn.sh
sbin/start-yarn.sh
15、yarn后台访问:
Flink
安装部署
1、先安装Hadoop,把Flink与Hadoop安装一块,一来可以少一些服务器,另外,安装JDK及免登录的事件可节省。
2、安装:
tar -zxvf flink-1.8.2-bin-scala_2.11.tgz -C /usr/local/bin/flink/
3、修改flink.conf:
#值设置成你master节点的IP地址指向Master,但可能会发生变化,因为由zookeeper选举决定,所以不需要设定
jobmanager.rpc.address:node20
#.配置JobManager进行RPC通信的端口,使用默认的6213即可
jobmanager.rpc.port: 6123
#每个TaskManager可用的总内存
jobmanager.heap.size: 1024m
#每个节点的JVM能够分配的最大内存
taskmanager.heap.size: 1024m
#配置每一个slave节点上task的数目 等于每台机器上可用CPU的总数
taskmanager.numberOfTaskSlots: 3
# 用于未指定的程序的并行性和其他并行性,默认并行度
parallelism.default: 2
#临时目录
taskmanager.tmp.dirs:hdfs://cluster/flink/ha/tmp
io.tmp.dirs: /usr/local/bin/flink/flink-1.8.2/tmp
web.tmpdir: /usr/local/bin/flink/flink-1.8.2/tmp/web
jobmanager.web.tmpdir: hdfs://cluster/flink/ha/tmp/web
web.upload.dir: /usr/local/bin/flink/flink-1.8.2/tmp/web
# fixed-delay:固定延迟策略
restart-strategy: fixed-delay
# 尝试5次,默认Integer.MAX_VALUE
restart-strategy.fixed-delay.attempts: 5
# 设置延迟时间10s,默认为 akka.ask.timeout时间
restart-strategy.fixed-delay.delay: 10s
#Flink JobManager HA部署参考:https://www.cnblogs.com/liugh/p/7482571.html
#zookeeper地址 master高可用部署
high-availability: zookeeper
#这个地址写成实际的存储地址,可以是网络地址,也可以本机地址
high-availability.storageDir: hdfs://cluster/flink/ha
high-availability.zookeeper.quorum: 192.168.2.102:2181,192.168.2.103:2181,192.168.2.104:2181
high-availability.zookeeper.path.root: /flink
# high-availability.cluster-id: /cluster_one
state.backend: filesystem
state.checkpoints.dir: hdfs://cluster/flink/flink-checkpoints
state.savepoints.dir: hdfs://cluster/flink/flink-checkpoints
state.backend.fs.checkpointdir: hdfs://cluster/flink/flink-checkpoints
state.checkpoints.num-retained: 3
4、#master(jobmanager)配置文件 slave(taskmanager)配置文件
配置:master与slave
master:
node20:8081
node21:8081
slave:
node20
node21
node22
5、Copy flink-shaded-hadoop2-uber-2.8.3-1.8.2.jar 到/usr/local/bin/flink/flink-1.8.2/lib目录下,连接Hadoop组件
6、分发到别的机器上
scp -r /usr/local/bin/flink/flink-1.8.2/ root@192.168.100.21:/usr/local/bin/flink/flink-1.8.2/
scp -r /usr/local/bin/flink/flink-1.8.2/ root@192.168.100.22:/usr/local/bin/flink/flink-1.8.2/
7、启动与停止:
cd /usr/local/bin/flink/flink-1.8.2/bin
1.集群方式启动或关闭flink:
启动: ./start-cluster.sh
停止: ./stop-cluster.sh
关闭(某个): ./jobmanager.sh stop
访问:
2.启动或关闭jobManager某个jobmanager(不要用这个):
启动(master):
./jobmanager.sh start node20 8081
或:
./jobmanager.sh start node21 8081
关闭(所有): ./jobmanager.sh stop-all
3.启动或关闭taskmanager:
启动: ./taskmanager.sh start
关闭(某个): ./taskmanager.sh stop
关闭(所有): ./taskmanager.sh stop-all
8、查看zookeeper中flink信息:
cd /usr/local/bin/apache-zookeeper-3.5.6-bin/bin
./zkCli.sh -timeout 5000 -server node20:2181,node21:2181,node22:2181
flink目录信息:ls /flink/clusterflink
当前flink master信息:get /flink/clusterflink/leader/rest_server_lock
9、如果hadoop运行过程后面格式化,需要删除zookeeper中的flink信息:
cd /usr/local/bin/apache-zookeeper-3.5.6-bin/bin
./zkCli.sh -timeout 5000 -server node20:2181,node21:2181,node22:2181
先删除子目录,再让上删除主目录
deleteall /flink/clusterflink
deleteall /flink
删除指定数据:
delete /node_1/node_1_10000000001
9、hadoop flink文件存储信息:
查看文件存储信息: hadoop fs -ls /flink
删除文件存储信息: hadoop fs -rm -r /flink
清空回车站: hdfs dfs -expunge
10、参考:
https://www.jianshu.com/p/c743041e55b0
https://www.cnblogs.com/leon0/p/11606699.html
https://blog.csdn.net/bao_since/article/details/90234181
Datacenter
配置部署
按照windows集群版配置进行修改。
拷贝修改后datacenter.war包到相对应tomcat安装目录下的webapps下;