1.环境要求
系统需部署Rabbitmq(3.6及以上)Redis(Redis2.8及以上)、JDK(JDK1.8或以上)、Tomcat(Tomcat8或以上)、数据库(Oracle 11g或以上、DB2 9.7或以上、Mysql 5.5或以上),并配置好环境变量。
2.软件安装
各软件安装版本符合人行安全等级,原则上开源软件由公司平台部统一提供,实施前由部门SVN统一提取,进制实施人员个人下载,如有必要需和项目经理沟通确认。确认可使用后,必须将此版本带回部门统一维护。
2.1 JDK安装
2.1.1检查jdk的环境
输入命令: java –version
可以看到 现在系统中安装的是系统自带的openJDK环境,需要替换成SUN JDK环境
2.1.2安装jdk
上传jdk的安装包到指定的目录中
cd /usr/local
mkdir java
在上传的安装包目录下解压这个安装包:
rpm -ivh jdk-8u45-linux-x64.rpm
解压如果没有指定目录,默认会在usr下边的java目录中,需要从当前目录退出,再进入到默认目录usr/java下进行安装操作:
如果上传的是jdk-8u171-linux-x64.tar.gz安装包,解压之后直接出现在当前目录中
命令: tar -zxvf jdk-8u171-linux-x64.tar.gz
解压后的包为红框,上传的包为篮框包
配置环境变量:
命令: vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_45(自己的路径和版本)
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
然后查看jdk版本: java -version
注意如果还是openJDK,这个的话 需要用自己安装的替换掉系统自带的,在这里是直接删除掉openJDK,首先查询OpenJDK,命令: rpm -qa | grep java
从上方截图看,发现有两个openJDK版本,要删除openJDK版本:
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
再次执行命令:rpm -qa | grep java
查询OpenJDK,发现openJDK已删除
输入命令:java –version查询版本,已经是自己安装的jdk了:
2.2 redis安装
2.2.1安装环境
-
安装版本:redis-3.2.2.tar.gz
-
集群部署建议安装4.0及以上版本(不需要安装依赖,直接编译修改配置文件启动)
2.2.2安装步骤
1.安装编译命令:
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
2.上传安装包到服务器
将安装包上传至/usr/local
3.解压安装包:
依次执行以下命令:
cd /usr/local
tar -xzvf redis-4.0.9.tar.gz
4.编译
依次执行以下命令:
cd redis-4.0.9
make
cd src
make install PREFIX=/usr/local/redis
5.移动配置文件到安装目录下
依次执行以下命令:
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
mv sentinel.conf /usr/local/redis/etc
6.修改redis配置文件
依次执行以下命令:
vi /usr/local/redis/etc/redis.conf
将daemonize no 改成daemonize yes(后台启动)7.将redis加入到开机启动
vi /etc/rc.local
在文件末尾添加以下内容:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf -
开启redis
带配置文件启动
redis-server redis.conf
2.2.3主从配置
1.修改redis.conf配置文件
vi /u sr/local/redis/etc/redis.conf
主配置文件修改如下:(无则添加)bind 127.0.0.1 --linux约70行 注释掉
requirepass "123456" --有密码则添加
protected-mode yes 改为 protected-mode no --linux约89行
从配置文件修改如下:(无则添加)
#bind 127.0.0.1 --linux约70行 注释掉
protected-mode yes 改为 protected-mode no --linux约89行
添加 slaveof 主服务器IP 主服务器端口号 --linux约283行
例:slaveof 10.28.121.109 6379
masterauth 123456 --有密码则添加
2.重启主从服务器的redis
redis-cli shutdown 停止
redis-server /usr/local/redis/etc/redis.conf 启动
2.2.4验证测试
主从验证
在主服务器存值:set
在从服务器取值(如果能获取到相应的值说明主从配置成功):get
哨兵验证:
/usr/local/redis/bin/redis-cli -p 26379
info sentinel
2.2.5哨兵配置(一主两从三台服务器-linux+windows)
1.修改sentinel.conf配置文件
vi /u sr/local/redis/etc/sentinel.conf
配置文件修改如下:(所有服务器相同配置)
# bind 192.168.1.119 127.0.0.1 ---若网络有特殊要求配置本机ip
logfile "26379.log" ---日志
添加daemonize yes 后台启动
添加 protected-mode no 保护
添加sentinel monitor mymaster 主服务IP 主服务端口 故障转移票数
例: sentinel monitor mymaster 172.19.19.220 6379 2
添加sentinel known-slave mymaster 从服务ip 从服务端口
例:sentinel known-slave mymaster 172.19.19.218 6379
sentinel known-slave mymaster 172.19.19.219 6379
#若有密码添加:sentinel auth-pass mymaster 123456
下列参数若无,按需添加:
sentinel down-after-milliseconds mymaster 10000 检测节点情况
sentinel parallel-syncs mymaster 1 有新主,从节点轮询复制
sentinel failover-timeout mymaster 10000 故障转移 时间
带配置文件启动哨兵:
./redis-sentinel sentinel.conf
#窗口内查看状态
redis-cli -p 26379
info sentinel
从ip可以看出两台服务器的都在监听主机的redis状态,若主机redis宕机,两台服务器的哨兵会变成从机的ip继续监听。
(可以理解为redis与哨兵sentinel是两个独立的服务,reids负责数据存储,sentinel负责监听redis的运行情况)
启动后sentinel.conf里面会自动新增一条myid 和known-sentinel mymsqter 192.168.0.1 26379 02sdvsvwagfacv (从机的ip 端口和myid)
Window系统哨兵
1.下载Windows版redis地址:https://github.com/MicrosoftArchive/redis/releases
2.解压到目录,6379 master, 6380 6381slave
3.redis主从配置
1) master文件配置redis.windows.conf port 6379
2) 6380 slave文件配置redis.windows.conf
port 6380
slaveof 127.0.0.1 6379
3)6381 slave文件配置redis.windows.conf
port 6381
slaveof 127.0.0.1 6379
4.redis哨兵配置
1)每一个redis目录中都创建一个文sentinel.conf文件
master 6379的sentinel.conf文件配置如下
当前Sentinel服务运行的端口
port 26379
master
Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,
而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
sentinel monitor master 127.0.0.1 6381 1
指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。
只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
sentinel down-after-milliseconds master 5000
指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel config-epoch master 12
如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel leader-epoch master 13
2)4.2 slave 6380中的sentinel.conf文件配置
port 26479
slave1
sentinel monitor master 127.0.0.1 6381 1
sentinel down-after-milliseconds master 5000
sentinel config-epoch master 12
sentinel leader-epoch master 13
3) slave 6381中的sentinel.conf文件配置
port 26579
slave2
sentinel monitor master 127.0.0.1 6381 1
sentinel down-after-milliseconds master 5000
sentinel config-epoch master 12
sentinel leader-epoch master 13
5.启动redis服务
redis-server.exe redis.windows.conf --master
redis-server.exe redis.windows.conf --slave
redis-server.exe redis.windows.conf --slave
6.测试redis服务
7.启动哨兵服务
redis-server.exe sentinel.conf --sentinel
2.2.6双机哨兵配置及宕机处置(一主一从双机三哨兵)
两台服务器配置哨兵,主机配置方法不变,从机配置两个sentinel.conf,即复制一份sentinel.conf,设置不同监听端口即可。
port 29379 ----约24行,两个sentinel.conf在此处配置不同端口
带配置文件启动哨兵:
./redis-sentinel sentinel-29379.conf
./redis-sentinel sentinel-29479.conf
从机启动两个哨兵节点,是为了保证主机宕机后可以正常发起稍等投票机制进行投票重选主机,从机宕机不影响主机正常使用,但是此方式为一次性生效,即发生一次主机宕机后,需要重新配置哨兵(建议备份主从的配置文件,发生宕机后直接替换重启两台即可)。如不能重启redis,在原主机redis修复后,启动redis,查看两台服务器的redis状态,执行命令:
./redis-cli
info
若修复后原主机的reids状态为slave(从),查看两台redis数据,
若相同,停掉原从机上redis服务(不要停哨兵,只停redis服务),哨兵配置会自动投票将原主机redis定向为主机,查看确认redis状态是否为主机,启动原主机上哨兵进程,
./redis-sentinel sentinel.conf
启动刚停掉的从机reids服务:
./redis-server &
查看redis状态及哨兵状态。确认正常即可。
2.2.7集群配置(双机)
Redis 集群不像单机 Redis 那样支持多数据库功能, 集群只使用默认的 0 号数据库, 并且不能使用 SELECT index 命令。
1.将 redis-trib.rb 复制到 /usr/local/bin 目录下
cd src
cp redis-trib.rb /usr/local/bin/
2.创建 Redis 节点
首先在 1机器上 /home/redis/redis-3.2.2 目录下创建 redis_cluster 目录;
mkdir redis_cluster
在 redis_cluster 目录下,创建名为7007、7008、7009的目录,并将 redis.conf 拷贝到这三个目录中
mkdir 7007 7008 7009
cp redis.conf redis_cluster/7007
cp redis.conf redis_cluster/7008
cp redis.conf redis_cluster/7009
分别修改这三个配置文件,修改如下内容
port 7007 //端口//7007,7008,7009
bind本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7007,7008,7009
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf
//集群的配置配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置appendonly yes //aof日志开启
//接着在另外一台机器2上,的操作重复以上三步,只是把目录改为7004、//7005、7006,对应的配置文件也按照这个规则修改即可
3.启动各个节点
cd redis-3.2.2//切换到redis-3.2.2目录下
第一台机器上执行
src/redis-server redis_cluster/7007/redis.conf
src/redis-server redis_cluster/7008/redis.conf
src/redis-server redis_cluster/7009/redis.conf
另外一台机器上执行
src/redis-server redis_cluster/7004/redis.conf
src/redis-server redis_cluster/7005/redis.conf
src/redis-server redis_cluster/7006/redis.conf
4.检查 redis 启动情况
5.创建集群
Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。
./redis-trib.rb create --replicas 1 190.2.3.166:7007 190.2.3.166:7008 190.2.3.166:7009 190.2.3.168:7004 190.2.3.168:7005 190.2.3.168:7006
其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。
等等,出错了。这个工具是用 ruby 实现的,所以需要安装 ruby及其相关的插件
安装命令如下:
(1) 安装ruby
网上下载好tar包上传到linux系统里
tar –zxvf ruby-2.4.2.tar.gz
cd ruby-2.4.2
./configure –-prefix=/usr/local/ruby –prefix
是将ruby安装到指定目录,也可以自定义
make && make install
安装完成后 输入 ruby –v 出现ruby版本信息说明安装成功,或非此内容需要配置ruby环境变量:
输入命令vim /etc/profile,在文件当中PATH当中加入安装Ruby的bin目录路径。然后保存执行命令:source /etc/profile
vim /etc/profile
最后需要执行命令:source /etc/profile 才能立即生效
source /etc/profile
输入 ruby –v 出现ruby版本信息
(2) 安装rubygems
网上下载好安装包上传到linux系统里
tar –zxvf rubygems-2.4.2.tgz
cd rubygems-2.4.2
ruby setup.rb
(3) 安装gem-redis
网上下载好安装包上传到linux系统里
gem install –l ./redis-3.2.2.gem
之后再运行 redis-trib.rb 命令,会出现如下提示:
输入 yes 即可,然后出现如下内容,说明安装成功。
注:实际安装过程这一步没有做截图就用网上的图了。如果报错
ERR Slot 16 is already busy(Redis::CommandError)
只需要把redis.conf中定义的cluster-config-file 所在的文件删除,重新启动redis-server
及运行redis-trib即可。
- 集群验证
在第一台机器上连接集群的7007端口的节点,在另外一台连接7004节点,连接方式为 redis-cli -h 190.2.3.166 -c -p 7007 ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
在7007节点执行命令 set welcome credit,执行结果如下:
然后在另外一台7006端口,查看 key 为 welcome 的内容, get welcome ,执行结果如下:
说明集群运作正常。
9.修改项目redis配置
查看redis集群
/usr/local/ruby/bin/ruby redis-trib.rb check 190.2.3.168:7004
M-代表主Master服务器,S-代表从Slave服务器,主服务器地址需要写入项目redis配置文件中。
修改项目部署包中redis配置文件,文件路径如下:
..\creditplatformweb\WEB-INF\classes\redis.properties
修改redis.deploymodel和redis.host两个属性,redis.deploymodel为redis接入方式1表示集群接入,2表示单点接入;redis.host为redis服务器地址,集群状态为主Master服务器地址,以英文逗号“,”间隔。
2.2.8 三机集群
1.开始配置
(1)redis-3.2.9目录下创建一个cluster-conf目录,并在cluster-conf目录下创建6380、6381两个目录
[[email protected]]$ mkdir cluster-config
[hadoop@mastercluster-config]$ mkdir 6380
[hadoop@mastercluster-config]$ mkdir 6381
(2)创建端口目录并修改配置信息,如下
[[email protected]]$ cp redis.conf ./cluster-config/6380
[[email protected]]$ cp redis.conf ./cluster-config/6381
分别修改6380、6381目录下redis.conf文件如下内容:
1.端口
port 6380
2.指定日志文件路径
logfile “/home/hadoop/soft/redis-3.2.9/cluster-config/6380/redis.log”
3.指定rdb、aof文件写入路径
dir /home/hadoop/soft/redis-3.2.9/cluster-config/6380/
4.是否开启集群
cluster-enabled yes
5.集群配置文件名称
cluster-config-file nodes-6380.conf
6.超时时间
cluster-node-timeout 15000(默认值)
appendonly yes
(3)将文件复制到其他机器上
[hadoop@mastersoft]$scp -r redis-3.2.9 [email protected]:/home/hadoop/soft
[hadoop@mastersoft]$scp -r redis-3.2.9 [email protected]:/home/hadoop/soft
(4)启动,先切换到redis的bin目录下分别在三台机器上都执行对应命令,便可启动集群
[hadoop@masterbin]$ ./redis-server /home/hadoop/soft/redis-3.2.9/cluster-config/6380/redis.conf &
[hadoop@masterbin]$ ./redis-server /home/hadoop/soft/redis-3.2.9/cluster-config/6381/redis.conf &
执行完后在终端输入,会看到对应的进程信息,则表示成功启动
[hadoop@masterbin]$ ps -ef|grep redis
hadoop 4046 16759 0 16:00 pts/1 00:00:00 grep redis
hadoop 25805 16759 0 11:48 pts/1 00:00:04 ./redis-server 0.0.0.0:6380 [cluster]
hadoop 25808 16759 0 11:48 pts/1 00:00:04 ./redis-server 0.0.0.0:6381 [cluster]
2.安装ruby、redis
安装ruby2.3.1版本,建议采用这种方式安装(网上的其他方式基本都会失败,亲测)
第一步:下载安装包到对应目录(wget命令不指定目录 ,则下载到当前目录)
[[email protected]]$ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
第二步:下载成功后解压,并切换到解压后的ruby目录下执行编译与安装:
[[email protected]]$ ./configure --prefix=
[[email protected]]$ make && make install
安装redis
[[email protected]]$ gem install redis
3.开启集群
在Redis的src目录下执行
[root@mastersrc]# ./redis-trib.rb create --replicas 1 10.1.1.34:6380 10.1.1.34:6381 10.1.1.12:6380 10.1.1.12:6381 10.1.1.39:6380 10.1.1.39:6381
至此集群搭建完成,可跨机器验证集群,例如
[hadoop@slave2 bin]$ ./redis-cli -c -h 10.1.1.39 -p 6381
10.1.1.39:6381>
查看集群状态
[root@mastersrc]# ./redis-trib.rb check 127.0.0.1:6380
Performing Cluster Check (using node 127.0.0.1:6380)
M: a0d41b839bf4f71cd32249587d9d00d571c2ec05 127.0.0.1:6380
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 0b1fb1ccd3af0a85a75f27b915a96ac832175ee5 10.1.1.12:6380
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: 2b1c67e00dfab99c46c5ad46b5b5af0a1021ce8e 10.1.1.39:6380
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: a62ac61543200fdbfd278f9e80e2105ff11d1780 10.1.1.34:6381
slots: (0 slots) slave
replicates 0b1fb1ccd3af0a85a75f27b915a96ac832175ee5
S: 26a7f4214285c39985c9803283f9ac8b39a72ac6 10.1.1.12:6381
slots: (0 slots) slave
replicates a0d41b839bf4f71cd32249587d9d00d571c2ec05
S: b0b2ace762a2210070a444cf8c9b6adf2ae585e1 10.1.1.39:6381
slots: (0 slots) slave
replicates 2b1c67e00dfab99c46c5ad46b5b5af0a1021ce8e
[OK] All nodes agree about slots configuration.
Check for open slots...
Check slots coverage...
[OK] All 16384 slots covered.
4.验证
选一台服务器上执行:
这个时候如果在其他机器上去获取这个key 会报错
这是因为这个值已经放在该服务器槽中,我们可以使用 ./redis-cli -c方式查找,可以看到该值位于此服务器
2.2.9 问题处理及故障转移
1.安装过程中遇到的问题
1)在装redis时make报错:
解决方式:
安装gcc和gcc-c++ : yum install gcc ,yum install gcc-c++
如果想看安装情况 :先安装yum install tcl ,然后make test测试
2)执行./redis-trib.rb create --replicas 语句报如下错误:/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- redis (LoadError)
解决方式:
安装依赖,因为没有安装 ruby的 redis插件
3)Waiting for the cluster to join.......
解决方式:
cd /usr/local/cluster/7000
rm -rf rm -rf appendonly.aof nodes.conf
同样的7000也需要执行删除 appendonly.aof nodes.conf
redis集群不仅需要开通redis客户端连接的端口如7000,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000
执行如下命令:
firewall-cmd --zone=public --add-port=17000/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --reload
2.故障转移测试
把某个master节点杀掉
这里可以看出156:7000成了matser节点,我们再获取测试值:
2.3 rabbit mq安装
2.3.1安装环境
Rabbit mq软件版本:
Erlang软件版本:
2.3.2安装Erlang
- 上传安装包到服务器
将erlang-ssl-18.3.4.4-1.sdl7.x86_64.rpm、otp_src_18.3.tar.gz、ncurses-6.1.tar.gz、
rabbitmq-server-generic-unix-3.6.2.tar.xz上传至安装路径
查看openssl版本,若无需安装
openssl version -a
使用命令: yum install ncurses-devel
yum install openssl-devel
如不能使用yum命令,可解压ncurses-6.1.tar.gz,使用make命令安装。
./configure
make
make install
强制安装erlang-ssl-18.3.4.4-1.sdl7.x86_64.rpm
rpm空格 -ivh 空格包名 空格--nodeps空格 --force
2. 解压安装包
解压源文件:tar -xzvf otp_src_18.3.tar.gz
cd /opt/otp_src_18.3/
创建erlang安装目录:mkdit /opt/erlang
配置安装路径编译代码:
./configure --with-ssl=/opt/openssl --prefix=/opt/erlang
或不用java编译:
./configure --prefix=/opt/plugin/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac 不用java编译
执行编译结果:make && make install
完成后进入/opt/erlang查看执行结果。
- 配置Erlang环境变量
vi /etc/profile
增加下面的环境变量:
export PATH=$PATH: /usr/local/erlang/bin
使得文件生效 source /etc/profile - 验证erlang是否安装成功:
Erl
halt().退出(不要忘记后面的点)
erlang安装包路不能删除,如果觉得路径不对,可以重新安装
注:解决openssl问题
openssl-1.1.0b.tar.gz
解压之后,root用户执行:
./config
make
make install
然后需要做以下操作:
修改历史的OpenSSL文件设置备份
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
mv /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.old
设置软连接使其使用新的OpenSSL版本
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so
查看
ll /usr/bin/openssl
ll /usr/include/openssl
ll /usr/lib64/libssl.so*
ll /usr/lib64/libcrypto.so*
最后确认安装成功。
2.3.3安装rabbit MQ
-
上传安装包
将安装包上传至/usr/local -
解压安装包
依次执行以下命令:
cd /usr/local
xz -d rabbitmq-server-generic-unix-3.6.2.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.2.tar -
环境变量配置
vi /etc/profile
添加环境变量:
export PATH=$PATH: /usr/local/rabbitmq_server-3.6.2/sbin
环境变量生效:source /etc/profile -
进入sbin 启动服务:./rabbitmq-server -detached
若报错rabbitmq ERROR: epmd error for host deb:address (cannot connect to host/port)解决方法(deb是你linux的主机名)
解决办法
进入/etc/hosts看下
vi /etc/hosts
把 xx.xx.xx.xx deb
修改成 127.0.0.1 deb
查看服务状态:./rabbitmqctl status
关闭服务:./rabbitmqctl stop
- 配置网页插件
启用插件:./rabbitmq-plugins enable rabbitmq_management
查看插件:rabbitmq-plugins list
新增用户: ./rabbitmqctl add_user root root
-
赋予管理员权限
查看mq用户:rabbitmqctl list_users
查看用户权限:rabbitmqctl list_user_permissions guest
新增用户赋权:
./rabbitmqctl set_user_tags root administrator
./rabbitmqctl set_permissions -p "/" root "." "." ".*"
-
访问http://10.28.121.108:15672
-
至此rabbitmq安装完成
查看信息队列数:rabbitmqctl list_queues
关闭应用:rabbitmqctl stop_app
执行清除命令:rabbitmqctl reset(会将命令创建的用户也一并删除)
启动应用:rabbitmqctl start_app -
命令行创建信息队列
rabbitmqctl eval 'rabbit_exchange:declare({resource, <<"/">>, exchange, <<"WARN_MSG_Q">>}, topic, true, false, false, []).'
rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"WARN_MSG_Q">>}, true, false, [], none).'
rabbitmqctl eval 'rabbit_binding:add({binding, {resource, <<"/">>, exchange, <<"WARN_MSG_Q">>}, <<"WARN_MSG_Q">>, {resource, <<"/">>, queue, <<"WARN_MSG_Q">>}, []}).'
2.3.4 Rabbitmq集群配置(增删节点)
编辑各个服务器的hosts文件,配置以上内容
vi /etc/hosts
加入以下内容:
集群内所有的 ip hostname
例:
10.28.121.109 zrc121109
10.28.121.108 zrc121108
....
-
配置erlang.cookie
集群中的所有服务器的 .erlang.cookie必须一致
例:
以10.28.121.109为准
将.erlang.cookie复制到其他服务器
-
将所有节点加入集群中
启动集群内所有服务器
./rabbitmq-server -detached
添加节点:
所有从机服务器命令一样:
./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@zrc121109
./rabbitmqctl start_app
查看集群节点
./rabbitmqctl cluster_status
3.加入镜像策略
在集群中随意一台服务器输入以下命令:
./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
(ha-all:为策略名称。
:为匹配符,只有一个代表匹配所有,^zlh为匹配名称为zlh的exchanges或者queue。
ha-mode:为匹配类型,他分为3种模式:all-所有(所有的queue),exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器),nodes-指定(需配置ha-params参数,此参数为数组类型比如["3rabbit@F","rabbit@G"]这样指定为F与G这2台机器。))
移除某节点:
在主节点,也就是发起进群的主机上进行节点的移除.
rabbitmqctl -n rabbit@rabbit-01 forget_cluster_node rabbit@rabbit-03
Removing node 'rabbit@rabbitmq-03' from cluster ...
范例
rabbitmqctl -n hare@mcnulty forget_cluster_node rabbit@stringer
然后查看集群状态信息.
root@rabbitmq-01:/var/lib/rabbitmq# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-01' ...
[{nodes,[{disc,['rabbit@rabbitmq-01','rabbit@rabbitmq-02']}]},
{running_nodes,['rabbit@rabbitmq-02','rabbit@rabbitmq-01']},
{cluster_name,<<"rabbit@rabbitmq-01">>},
{partitions,[]}]
发现rabbitmq3节点已经被移除.
2.3.5宕机处置
- 清除所有服务器上rabbitmq配置记录与存储文件
mv /home/webligic/rabbitmq/mensia /home/webligic/rabbitmq/mensia.bak
2.从新配置rabbitmq集群
2.4 Nginx安装
2.4.1 Rpm方式安装:
-
上传nginx-1.16.0-1.el6.ngx.x86_64.rpm安装包
-
安装nginx
-
将nginx.conf上传至/usr/local目录下
-
替换/etc/nginx/nginx.conf文件
4.启动nginx
2.4.2.tar.gz安装
2.4.2.1安装依赖方式部署nginx
- 安装nginx部署所需要的依赖包,依赖包安装顺序依次为:openssl、zlib、pcre, 然后安装Nginx包。
openssl :
[root@localhost] tar zxvf openssl-fips-2.0.9.tar.gz
[root@localhost] cd openssl-fips-2.0.9
[root@localhost] ./config && make && make install
指定路径安装
[root@localhost] ./config \
--prefix=/自定义位置
make
make install
openssl version --查看版本
zlib:
[root@localhost]tar zxvf zlib-1.2.8.tar.gz
[root@localhost] cd zlib-1.2.8
[root@localhost] ./configure && make && make install
指定路径安装:
--prefix=/自定义位置
make
make install
pcre:
[root@localhost] tar zxvf pcre-8.36.tar.gz
[root@localhost] cd pcre-8.36
[root@localhost] ./configure && make && make install
指定路径安装:
[root@localhost] ./configure \
--prefix=/自定义位置
make
make install
-
安装pcre需要c++的编译环境,若系统中没有可能会报以下错误:
-
安装rpm格式gcc-c++所需的依赖包及gcc-c++软件包:
安装依赖包:
rpm –ivh libstdc++-devel-4.8.5-4.el7.x86_64.rpm
指定路径安装:
rpm -i --relocate /usr/bin=/自定义位置/bin --relocate /usr/share/doc=/自定义位置/doc libstdc++-devel-4.8.5-4.el7.x86_64.rpm
rpm –ivh zlib-1.2.7-15.el7.x86_64.rpm
指定路径安装:
rpm -i --relocate /usr/bin=/自定义位置/bin --relocate /usr/share/doc=/自定义位置/doc zlib-1.2.7-15.el7.x86_64.rpm
安装gcc-c++软件包:
rpm –ivh gcc-c++-4.8.5-4.el7.x86_64.rpm
若未安装依赖包直接安装gcc-c++软件包报错如下:
(rpm -Uvh *.rpm --nodeps --force
验证:
gcc -v;
gcc-c++ -v 或者 g++ -v;)
4. 成功安装gcc-c++软件包后可正常安装pcre软件包
[root@localhost] tar zxvf pcre-8.36.tar.gz
[root@localhost] cd pcre-8.36
[root@localhost] ./configure && make && make install
指定路径安装:
[root@localhost] ./configure \
--prefix=/自定义位置
make
make install
- nginx应用安装
- 解压nginx包
[root@localhost nginx]# tar -zxvf nginx-1.8.1.tar.gz
[root@localhost nginx]# cd nginx-1.8.1/
默认安装
[root@localhost nginx-1.8.1]# ./configure && make && make install
指定安装路径
./configure \
--prefix=/自定义位置/ \
--sbin-path=/自定义位置/nginx \
--conf-path=/自定义位置/nginx.conf \
--pid-path=/自定义位置/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/pcre-8.38 \ # pcre 源的位置
--with-zlib=/usr/local/zlib-1.2.11 \ #安装的 zlib 的位置
--with-openssl=/usr/local/openssl-1.0.1t # openssl 源的位置
# 编译
make && make install
# 重要:如果不执行则不会创建真正的 nginx 文件
test -d
-
查找nginx,输入命令whereis nginx查看nginx所在目录(此目录默认位于/usr/local/nginx)
-
进入到这个目录之中,ll查看目录内所有文件夹
sbin:启动文件所在文件夹。
conf:配置文件所在文件夹。
logs:日志文件所在文件夹。
-
进入conf文件夹找到nginx配置文件nginx.conf:
-
根据项目需求配置nginx服务器的配置文件nginx.conf:
此处nginx.conf详见2.3.3Nginx配置反向代理与负载均衡。
-
进入nginx/sbin文件夹启动nginx服务
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ./nginx –c /usr/local/nginx/conf/nginx.conf
查看nginx服务进程
[root@localhost sbin]# ps –ef | grep nginx
-
通过浏览器访问nginx服务器url地址及监听端口(默认为80),若未进行修改配置文件页面如下:
2.4.2.2 yum方式部署
nginx依赖于pcre库,要先安装pcre:
yum install pcre pcre-devel
查看pcre版本:
pcre-config –version
安装编译工具及库文件:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
正式安装:
mkdir /home/tomcat/plug/nginx
cd /home/tomcat/plug
tar zxvf nginx-1.10.3.tar.gz
chown nginx:nginx -R /home/tomcat
su tomcat
cd /home/tomcat/plug/nginx-1.10.3
./configure --prefix=/home/tomcat/plug/nginx
make && make install
修改配置文件:
cd /home/tomcat/plug/nginx/conf
修nginx.conf中端口等
启动:
cd /tomcat/plug/nginx/sbin
./nginx -c /home/tomcat/nginx/conf/nginx.conf (带配置文件路径启动)
注:如果有配置防火墙,导致nginx服务开启后无法通过web进行访问,可尝试如下解决方法(例如端口号为10000):
1.//打开防火墙文件
sudo vim /etc/sysconfig/iptables
//新增行 开放10000端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT
保存退出
sudo service iptables restart//重启防火墙
2.开启 web 端口
firewall-cmd --permanent --add-port=10000/tcp
重启 firewall
firewall-cmd –reload
3.或者关闭防火墙systemctl stop firewalld
nginx常见命令:
nginx -s reload # 重新载入配置文件
nginx -s reopen # 重启 Nginx
nginx -s stop # 停止 Nginx
2.4.3 Nginx负载均衡与反向代理
(weblogic双节点案例)
2.4.3.1 nginx配置属性说明
全局设置
main
运行用户
user www-data;
启动进程,通常设置成和cpu的数量相等
worker_processes 1; // 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数
全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024; #单个后台worker process进程的最大并发链接数
# multi_accept on;
}
设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
tcp_nopush on;
tcp_nodelay on;
#连接超时时间
keepalive_timeout 65;
#开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问
server_name www.xx.com;
#设定本虚拟主机的访问日志
access_log logs/www.xx.com.access.log main;
#默认请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
}
#第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen 80;
server_name 192.168.8.x;
#对aspx后缀的进行负载均衡请求
location ~ .*\.aspx$ {
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
}
2.4.3.2 nginx反向代理案例
本地起两个项目, 分别在这两个文件夹下面运行
npm install
node server.js
在浏览器输入
本机ip:4789
本机ip:5789
可以访问到这两个页面
接着我们想使用
test.nginx.com访问到 页面5789
test.nginx.com/bug 访问到页面5789
则我们首先需要配置hosts
win 下hosts 的地址为 C:\Windows\System32\drivers\etc
我们需要在hosts文件里面添加如下配置
172.18.144.23 test.nginx.com
然后在 nginx 的 http 模块上添加一个 server
server {
listen 80;
server_name test.nginx.com;
location / {
proxy_pass http://172.18.144.23:4789/;
}
location /buy {
proxy_pass http://172.18.144.23:5789/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
然后重启nginx
在浏览器输入 test.nginx.com
在浏览器输入 test.nginx.com/bug
2.4.2.3 nginx负载均衡
在nginx中配置http
首先配置负载均衡的服务
在http模块中添加如下配置
upstream webservers {
server 172.18.144.23:4789 weight=10;
server 172.18.144.23:5789 weight=10;
}
把server改为
server {
listen 80;
server_name test.nginx.com;
location / {
proxy_pass http://webservers;
}
location /buy {
proxy_pass http://172.18.144.23:5789/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
在浏览器输入 test.nginx.com,刷新,我们可以看到两种页面,说明nginx已经把我们的请求分发到不同的地方去了。
3.数据库脚本执行
分别按数字顺序执行平台与查询内的脚本。
注意参数配置问题,结合系统部署确认清单:
4.系统部署
结合3内结合《系统部署确认清单》确认的参数进行修改配置文件。
jvm 建议配置以下:
-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=1024M -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/tomcat/logs/heap.prof -Dfile.encoding=UTF-8
4.1 应用包配置文件参数确认与修改
creditplatformweb :
1)db.properties 内数据库配置
2)config.properties内redis 应用访问端口配置
redis单点部署:
redis主从配置
deploymodel: cluster=1, single=2, masterSlave=3,sentinel=4
redis.deploymodel=3
IP
redis.host=masterip:6379
redis.host2=slaveofip:6379
redis哨兵配置
deploymodel: cluster=1, single=2, masterSlave=3,sentinel=4
redis.deploymodel=4
IP
redis.masterName=mymaster
redis.host=masterip:26379,slavefip:26379,slavefip:26479
登陆方式选择:密码登陆
生成环境修改为:密码+验证码
修改端口
其他应用war包:
1)db.properties 内数据库配置成实际的
2)redis.properties内redis配置参照平台包内修改
3)config.properties内签名服务器参数待定
个人+企业web包的config文件修改nginx异议处理相关配置(主要看红线标注部分,生产环境多为test修改成prod,其他基本不变)
4)amqp.properties修改用户名密码:用户名:root 密码:root
单点部署:
集群部署:
amqp.deployMode=2
amqp.addresses=10.10.121.28:5672,10.10.121.29:5672
5)个人+企业api包config.properties内修改是否启用批量及加密加压功能
6)所有含有签名服务器netsignagent.properties配置的war包:
与信安同事沟通Ip及端口配置HA的,分配模式配置为静态集中分配
4.2结构化入库配置
1.修改配置文件
ent-asyncMqStorageService-0.0.1-SNAPSHOT.jar
person-asyncMqStorageService-0.0.1-SNAPSHOT.jar
修改两个jar内的配置文件:BOOT-INF\classes
amqp、config、db、redis、logback修改方法同上,application.properties内修改端口及mq的相关参数,个人/企业端口不同且与服务器其他端口不冲突即可。
2.启动
后台启动分别启动个人、启用的结构化jar,(可以指定当前jar路径下输出日志)
nohup java -jar -D -XX:MaxPermSize=1024m -Ddefault.client.encoding=UTF-8 -Ddefault.override.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.region=CH ent-asyncMqStorageService-0.0.1-SNAPSHOT.jar >>ent-asyncMqStorageService-0.0.1-SNAPSHOT.log 2>&1 &
nohup java -jar -D -XX:MaxPermSize=1024m -Ddefault.client.encoding=UTF-8 -Ddefault.override.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.region=CH person-asyncMqStorageService-0.0.1-SNAPSHOT.jar >>person-asyncMqStorageService-0.0.1-SNAPSHOT.log 2>&1 &
4.3 tomcat应用服务器部署
4.3.1 tomcat安装
上传tomcat包到指定的目录中,进入到tomcat存放目录,执行解压命令: tar -zxvf apache-tomcat-7.0.69.tar.gz
如果需要修改TOMCAT默认端口,则修改TOMCAT的conf目录下server.xml文件
配置TOMCAT的参数,进去bin目录中修改 catalina.sh 文件
修改内存大小,添加下图中的参数,按照图中的位置添加
JAVA_OPTS="-Xms1024m -Xmx4096m"
设置编码格式
export JAVA_OPTS=-Dfile.encoding=UTF-8
如果需要指定某个固定JDK,则需要添加下图中的
bin目录下setclasspath.sh 内添加添加JAVA_HOME及JRE_HOME
添加内容如下:
4.3.2 应用部署
在4.1基础上修改配置文件后,所有war包部署在webapps内,启动tomcat即可。、
注意后台启动:nohup ./startup.sh &
4.4 was应用服务器部署
4.4.1 was安装
Jvm参数参考:
-Dcom.ibm.websphere.webservices.DisableIBMJAXWSEngine=true
-XX:MaxPermSize=512M
-XX:MaxNewSize=256M
-XX:PermSize=256M
-XX:-TraceClassLoadingPreorder
-Dfile.encoding=UTF-8
-agentlib:getClasses
-Xverify:none
-Djava.awt.headless=true
-Dentweb=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig/entweb
-Dperweb.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig/perweb
-Dperapi.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig/perapi
-Dentapi.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig/entapi
-DDconfig.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig/plat
4.4.2 应用部署
1.放置或修改应用配置文件
1)根据JVM中配置的-Dconfig.path的路径创建对应的文件夹
mkdir /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/AppConfig
2)使用FTP工具将properties文件夹中的所有文件上传到上一步骤创建的文件夹中
2.WebSphere部署应用WAR包
1)输入控制台路径,在页面中输入用户名和密码
2)登录到控制台后,按步骤进入企业应用程序页面,点击安装按钮
3)上传部署包
4)选择快速路径,点下一步
5)步骤一,无需要修改的参数,点下一步
6)步骤二,将多选框勾选上,点下一步
7)步骤三,将多选框勾选上,点下一步
8)步骤四,输入上下文根,和部署包名保持一致
9)步骤五,如图所示勾选上,点下一步
10)步骤六,点击完成
11)部署成功则如下图所示,点击保存按钮保存部署状态。
12)设置部署包的类装入顺序,如图所示进入类装入设置界面。
13)应用包中需要设置为“类已装入并且是先使用父类装入器”。点击“应用”按钮,在提示框中点击“保存”设置。
16)应用程序已配置完成。现在的状态应该为未启动。勾选配置完成的应用程序,点击“启动”按钮
17)刷新页面后,若之前启动的应用程序的状态变为绿色箭头,则项目成功启动。(最好根据后台日志判断是否成功启动)
18)以上为部署一个WAR包的流程,征信查询前置系统共有5个WAR包,确保如图所示状态即成功部署
19)输入项目地址,就可以直接访问了
4.5 weblogic应用服务器部署
4.5.1 weblogic安装
4.5.2 应用部署
1.注意修改weblogic.xml文件
**所有web工程的WEB-INF目录下新增weblogic.xml文件, 文件内容详见对应附件、一一对应。
**所有的applicationContext.xml中<context:property-placeholder ignore-unresolvable="true" location="classpath