最近老大给我了一个需求,研究一下nexus的高可用的方案,刚开始确实没有啥头绪。只能网上各种找资料,但是确实这方面资料不多。而且在线上搭建的教案也就更少了。前前后后大概花了两周多才把方案整理出来,并在uat环境搭建起来。
方案:基于keepalived+inotify+rsync的nexus主备模式
1、安装jdk
1.1 linux安装jdk
这个不做过多介绍,网上多的是。
1.2 配置jdk环境
vim /etc/profile
# vim /etc/profile
export JAVA_HOME=/opt/export/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export RUN_AS_USER=root # 后边启动nexus需要
# source /etc/profile
这里如果线上有多套jdk版本,可以在nexus配置里面去指定jdk。
export RUN_AS_USER=root 保证nexus在启动的时候不会报错
2、安装nexus 3
nexus 3可以到官网下载,
https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3
解压nexus
tar -zxvf nexus.tar.gz
进入nexus :
如有需要可以进入nexus,修改配置
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
这里可以修改端口号
设置jdk
vim bin/nexus
指定jdk :INSTALL4J_JAVA_HOME_OVERRIDE=/opt/jdk8
#!/bin/sh
# chkconfig: 2345 75 15
# description: nexus
### BEGIN INIT INFO
# Provides: nexus
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: nexus
### END INIT INFO
# Uncomment the following line to override the JVM search sequence
INSTALL4J_JAVA_HOME_OVERRIDE=/opt/jdk8
# Uncomment the following line to add additional VM parameters
# INSTALL4J_ADD_VM_PARAMS=
INSTALL4J_JAVA_PREFIX=""
GREP_OPTIONS=""
read_db_entry() {
if [ -n "$INSTALL4J_NO_DB" ]; then
return 1
if [ ! -f "$db_file" ]; then
return 1
if [ ! -x "$java_exc" ]; then
启动nexus
./nexus-3.14.0-04/bin/nexus start
查看日志 cat sonatype-work/nexus3/log/nexus.log
如下所以表示已经启动成功了
当然我们要搭建主备模式,也要选择一台服务器做备份,执行上面操作。
浏览器访问nexus页面
如上所示,主备nexus已经搭建完成了。
下面我们考虑如何使他们成为主备模式。
- 通信如何让备nexus在主nexus宕机的情况下,让备nexus充当主nsxus,我们采用的是keepalived
- 数据同步,让备nexus数据和主nexus数据一致rsync
- 但是rsync不及时,容易遗漏数据,我们这里采用inotify+rsync来实现数据实时同步
3、keepalived 搭建
- Keepalived的作用是检测服务器状态,如果一台服务器宕机或者出现其他故障导致当前服务器不可用,keep alived就会检测到并将故障的服务器从系统中剔除,同时使用备用服务器替代该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
- Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
- Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
总而言之 keepalived有三个功能:
- 管理LVS软件
- 基于VRRP实现高可用
- 健康检查,故障切换
3.1 搭建keepalived
安装命令:yum install keepalived -y
搭建成功后如下:
keepalived.conf 配置文件后面我们需要对他进行修改。
3.2 日志服务配置(主备一样)
将KEEPALIVED_OPTIONS="-D" 改成 KEEPALIVED_OPTIONS="-D -d -S 0"
[root@KSSHUAT01041 /home/ec1]# cat /etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
KEEPALIVED_OPTIONS="-D -d -S 0"
修改配置文件:vim /etc/rsyslog.conf
添加:local0.* /var/log/keepalived.log
重启rsyslog服务:service rsyslog restart
重启keepalived,后面我们把keepalived的配置文件修改好在重启
3.3 keepalived的配置文件修改
3.3.1 主nexus 配置如下:
! Configuration File for keepalived
global_defs {
router_id nexus01
# vrrp_strict
vrrp_script chk_http_port
script "/etc/keepalived/check_keepalived.sh"
interval 10
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
virtual_ipaddress {
172.25.221.253/24
track_script {
chk_http_port
- 这里需要注意的地方:vrrp_script chk_http_port 与大括号一定要换行,不然可能会不执行,之前我是做了空格,怎么都不识别。换行后就可行了。卡了我近一天的时间。
- 设置虚拟ip 这里也要主要到。如果你是在线上布置,一定要确定这个虚拟ip别的服务器没有再用(找运维把这个ip申请下来独用),切记,切记。这个地方我踩了坑,搞了好久。
- # vrrp_strict把这个注释掉
配置详情如下:
# 全局配置
global_defs {
# 邮件通知信息
notification_email {
# 定义收件人
[email protected]
# 定义发件人
notification_email_from [email protected]
# SMTP服务器地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 路由器标识,一般不用改,也可以写成每个主机自己的主机名
router_id LVS_DEVEL
# VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
vrrp_mcast_group4 224.0.0.18
vrrp_mcast_group6 ff02::12
# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
vrrp_script SCRIPT_NAME {
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告选举使用哪个接口进行
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
virtual_router_id 51
# 使用哪个虚拟MAC地址
use_vmac XX:XX:XX:XX:XX
# 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
track_interface {
ens33
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
virtual_ipaddress {
# IP/掩码 dev 配置在哪个网卡
192.168.200.16/24 dev eth1
# IP/掩码 dev 配置在哪个网卡的哪个别名上
192.168.200.17/24 dev label eth1:1
# 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
virtual_routes {
192.168.110.0/24 dev eth2
# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
nopreempt|preempt
# 如果是抢占默认则可以设置等多久再抢占,默认5分钟
preempt delay 300
# 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
track_script {
# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
notify_master ""
notify_backup ""
notify_fault ""
# 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
# 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
# LVS的模式
lb_kind NAT|DR|TUN
# 子网掩码,这个掩码是VIP的掩码
nat_mask 255.255.255.0
# 持久连接超时时间
persistence_timeout 50
# 定义协议
protocol TCP
# 如果后端应用服务器都不可用,就会定向到那个服务器上
sorry_server 192.168.200.200 1358
# 后端应用服务器 IP PORT
real_server 192.168.200.2 1358 {
weight 1
# MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是
# 针对应用服务器做健康检查的方法
MISC_CHECK {}
# 用于检查SMTP服务器的
SMTP_CHEKC {}
# 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
TCP_CHECK {
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
# 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
SSL_GET {}
# 应用服务器UP或者DOWN,就执行那个脚本
notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来"
notify_down "/PATH/SCRIPTS.sh 参数"
# 使用HTTP_GET方法去检查
HTTP_GET {
# 检测URL
url {
# 具体检测哪一个URL
path /testurl/test.jsp
# 检测内容的哈希值
digest 640205b7b0fc66c1ea91c463fac6334d
# 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
status_code 200
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
# 尝试次数
nb_get_retry 3
# 每次尝试之间间隔几秒
delay_before_retry 3
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
脚本check_keepalived.sh根据实际情况进行编写,我写的比较简单。
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
SERVER=localhost
PORT=8081
</dev/tcp/$SERVER/$PORT
if [ "$?" -ne 0 ]; then
echo "$d nexus down,keepalived will stop" >> /etc/keepalived/check_keepalived.log
echo "$d nexus down,keepalived will stop"
systemctl stop keepalived
echo "$d nexus is running,keepalived is starting"
当主nexus挂掉后,我就关闭keepalived,虚拟ip则会漂移到备nexus上。进行正常访问。并且会记录挂掉的日志。
3.3.2 备nexus配置文件搭建
! Configuration File for keepalived
global_defs {
router_id nexus02
# vrrp_strict
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
virtual_ipaddress {
172.25.221.253/24
notify_master "/etc/keepalived/restart_nexus.sh"
- 备份状态为BACKUP
- 其中监听当备nexus变成为主的时候(虚拟ip漂移到备nexus服务上)重启nexus ,让nexus重新构建索引(nexus数据虽然已经同步过来,但是nexus备份过来数据不展示)。
restart_nexus.sh脚本如下:
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
echo "$d virtual_ipaddress is skipping,nexus will restart"
echo "$d virtual_ipaddress is skipping,nexus will restart" >> /etc/keepalived/keepalived.log
/opt/nexus/nexus/nexus-3.14.0-04/bin/nexus restart
其中我们需要对在任务目录启动nexus进行配置。
vim /etc/profile
在配置下添加:export PATH=$PATH:/opt/nexus/nexus/nexus-3.14.0-04/bin
重新加载/etc/profile
source /etc/profile
3.4 测试
主备 keepalived启动
systemctl start keepalived
我们看看虚拟ip是否已经开启
虚拟ip已经开启,查看日志:cat /var/log/keepalived.log
这时候我们关闭nexus,看看是否可漂移备nexus上
root@KSSHUAT01041 /opt/nexus]# ./nexus/nexus-3.14.0-04/bin/nexus stop
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Shutting down nexus
Stopped.
[root@KSSHUAT01041 /opt/nexus]#
nexus已关闭。查看监控日志:
那么我们再看看备nexus服务器是不是已经ip漂移过去
已经漂移。虚拟ip依然可以正常访问
亲测nexus后,如果不手动重启keepalived,则ip不会漂移过来,这就是我们的目的达到了。等到适当的时间再叫虚拟ip转回到主服务器上。
手动重启后,虚拟ip已经跑回主服务上。
4、数据同步
4.1 备 部署rsync服务端
yum install -y rsync
# /etc/rsyncd: configuration file for rsync daemon mode
uid = rsync
gid = rsync
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[nexus]
path = /opt/nexus/nexus/sonatype-work/nexus3
comment = "nexus backup dir"
ignore errors
read only = no
write only = no
hosts allow = 172.25.221.151
auth users = rsync_backup
secrets file = /etc/rsync.password
- 创建备份目录的管理用户:useradd -s /sbin/nologin -M rsync
- 创建安全认证文件:
- echo "rsync_backup:123" >/etc/rsync.password
- chmod 600 /etc/rsync.password
- 修改备份目录属主:chown -R rsync.rsync /opt/nexus/nexus/sonatype-work/nexus3
- 启动rsync服务 rsync --daemon
4.2 主 部署rsync客户端
4.3 部署inotify-tools软件
下载:wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
解压并进入该目录下
tar xzf inotify-tools-3.14.tar.gz ;cd inotify-tools-3.14
安装:./configure --prefix=/usr && make && su -c 'make install'
当然也可以:yum install -y inotify-tools
没有这个包,更新epel源:yum install -y epel-release && yum update
4.4 写同步脚本
touch backup.sh
#!/bin/bash
###########
inotifywait -mrq /opt/nexus/nexus/sonatype-work/nexus3/ --format '%w%f' -e create,delete,close_write,moved_to|\
while read line
rsync -az --delete /opt/nexus/nexus/sonatype-work/nexus3/* [email protected]::nexus --password-file=/etc/rsync.password &>/dev/null
注意:inotify默认监控同步文件的个数是有限制的,8192,通过配置文件/proc/sys/fs/inotify/max_user_watches可以调整监控的个数。此问题明显就是文件太多,导致无法监控。
解决方案:echo 8192000 > /proc/sys/fs/inotify/max_user_watches
在后台执行: sh backup.sh &
如上,关于nexus的主备模式就搭建好了,自测数据可以同步。
最近老大给我了一个需求,研究一下nexus的高可用的方案,刚开始确实没有啥头绪。只能网上各种找资料,但是确实这方面资料不多。而且在线上搭建的教案也就更少了。前前后后大概花了两周多才把方案整理出来,并在uat环境搭建起来。方案:基于keepalived+inotify+rsync的nexus主备模式1、安装jdk1.1 linux安装jdk这个不做过多介绍,网上多的是。1.2 配置jdk环境vim /etc/profile# vim /etc/profileexport JAV
1、在ifconfig内容中找出ip
[root@localhost ~]# ifconfig ens33|grep "inet "\ > |awk '{print $2}' #awk默认分割符号为空格
ping都懂用,可是linux下,ping命令会一直ping,不会自动停止怎么办
[root@localhost ~]# ping www.baidu.com -c 4 #-c 次数...
2、解决方法
1. 使用图片的网络路径
background:url('http://1812.img.pp.sohu.com.cn/images/blog/2009/11/18/18/8/125b6560a6ag214.jpg');
2. base64
作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。
首先谈一下grep命令的常用格式为:grep [选项] ”模式“ [文件]
grep家族总共有三个:grep,egrep,fgrep。
常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(inv...
Cisco Nexus系列交换机的主备切换引擎命令是非常简单的。可以通过以下步骤完成:
1.进入主交换机的配置界面,输入命令“vpc domain <domain-id>”,赋值一个唯一的vPC名称;
2.再输入命令“peer-gateway”,配置同步 vPC peer-gateway选项;
3. 接着设置主备链路的优先级(priority和priority )和保护组(peer-keepalive destination、peer-gateway);
4.最后,定义交换机之间的虚拟机器口(vPC peer-link),使用命令“vpc peer-link”进行.
在配置完以上命令之后,主备切换引擎已经开始工作,主交换机发生故障时,备份交换机将自动接管网络操作并维持网络的正常运转。需要注意的是,由于Nexus 系列交换机大部分都是采用配置文件自动备份功能,因此在进行主备切换之前一定要保证配置文件的一致性。在完成主备切换之后,测试网络是否正常,及时进行维护和故障排除。
### 回答2:
Cisco Nexus是一个数据中心交换平台,用于提供高性能和高可用性的网络服务。其切换引擎主备命令是通过在交换机上配置多个切换引擎来实现的。
首先,在交换机上配置多个切换引擎,可以使用"switch system"命令实现。具体命令如下:
switch# conf t
Enter configuration commands, one per line. End with CNTL/Z.
switch(config)# switchsystem dual-sup
switch(config)# switch 1
switch(config)# switchname Nexus7010-Switch1
switch(config)# exit
switch(config)#
switch(config)# switch 2
switch(config)# switchname Nexus7010-Switch2
switch(config)# exit
switch(config)#
以上命令将交换机切换引擎名称分别设为Nexus7010-Switch1和Nexus7010-Switch2。
在此基础上,还需要配置两个切换引擎的优先级,可以使用"priority"命令实现。具体命令如下:
switch(config)# span root primary priority 24576
switch(config)# span root secondary priority 16384
以上命令将主切换引擎的优先级设置为24576,次主切换引擎的优先级设置为16384。
最后,需要配置主备切换的触发条件,可以使用"spanning-tree guard root"命令实现。具体命令如下:
switch(config)# interface Ethernet5/1
switch(config-if)# spanning-tree guard root
以上命令将Ethernet5/1端口配置为在主切换引擎失效时,该端口将从备切换引擎上接收并转发数据。
总的来说, Cisco Nexus切换引擎主备命令的配置过程是:配置切换引擎名称,设置切换引擎优先级,配置主备切换的触发条件。这样可以确保在切换引擎故障或故障发生时,网络不会发生中断的情况。
### 回答3:
Cisco Nexus交换机的切换引擎主备命令非常简单且易于执行。以下是具体操作步骤:
1. 确认交换机引擎的状态:通过执行show system redundancy status命令来查看交换机引擎的状态。输出结果应该包括主和备引擎的IP地址和状态。
2. 更改交换机引擎状态为备份:通过执行configure terminal命令进入配置模式,并执行system redundancy命令来切换主引擎为备份引擎,比如使用以下命令:
switch# configureterminal
switch(config)# systemredundancy
switch(config-red)# switch-id2
switch(config-red)# exit
这里,switch-id 2表示备份引擎的ID,可以根据实际情况进行调整。
3. 确认交换机引擎的状态更新:执行show system redundancy status命令可以再次确认引擎状态是否已成功更改。如果发现主引擎的状态已更改为备份引擎,则说明已成功执行切换引擎主备命令。
在使用切换引擎主备命令时,需要注意以下事项:
1. 在切换引擎主备命令期间,交换机可能会出现短暂的中断或性能下降。因此,建议在非工作时间执行此操作。
2. 在切换引擎主备命令执行期间,网络管理员应该时刻关注引擎状态并确保正常运行。
总的来说,切换引擎主备命令是保证切换引擎在Cisco Nexus交换机中正常运行的必要操作。网络管理员应该熟悉该命令的执行步骤,并在必要时执行此命令。
Mybatis关键源码深度分析学习-插件与缓存
ctotalk: