1、RabbitMQ消息中间件介绍:
RabbitMQ是一种基于AMQP(Advanced Message Queuing Protocol)的消息总线开源实现,包括如下的概念:
1.1 RabbitMQ Server: 也叫broker
server,是一种传输服务,负责维护一条从Producer到consumer的路线,保证数据能够按照指定的方式进行传输。
1.2 生产者(Producer): 数据的发送方
1.3 消费者(Consumer): 数据的接受方
1.4 通道(Channel):
建立在“真实”TCP连接内的虚拟连接,在一条TCP连接上创建多少条信道没有限制,并且信道之间互不干扰,不仅确保私密性,并且有效节省了创建、销毁TCP连接的系统开销。
1.5 队列(Queue):
是消息通信的基础模块,为消息提供处所,消息在此等待消费,是Rabbit中消息的最后终点。
1.6路由键 (routing
key):想把消息投递到队列,通过把消息发送给交换器完成。根据确定的规则,RabbitMQ将会决定消息该投递到哪个队列,这些规则被称作路由键。
1.7
交换机(Exchanges):可以理解成具有路由表的路由程序。队列通过路由键绑定到交换器,消息发送到MQ服务器时,消息将拥有路由键(可以为空)RabbitMQ会将其和队列进行路由键匹配,相匹配则投递到该队列。
1.8
虚拟主机(vhost):虚拟消息服务器,称之为虚拟主机。vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑定,最重要的是拥有自己的权限机制。
1.9 绑定(Bindings):绑定交换机和对列直接的路由;
如果用乘坐火车打比方,可以这样理解RabbitMQ,乘客是消息,火车站进站安检口相当于交换器,负责接收乘客,并告诉乘客自己应该到哪个检票口等候,检票口排队的乘客相当于队列,乘坐同一班次列车的乘客在同一个检票口检票进站,乘客的手上的火车票相当于绑定(路由键),用来告诉乘客该坐哪一班次的列车,该从哪一个检票口进站,火车车厢里的每一个座位就相当于消费者,一个座位只能给一个乘客坐
。
2、RabbitMQ集群的工作图解:
通过 Erlang 的分布式特性(通过 magic COOKIE 认证节点)进行 RabbitMQ 集群,各 RabbitMQ
服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建
3 个节点,2个内存节点,1个磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ
集群对外就能提供服务。rabbitmq的使用模式一般有三种:单机模式、集群模式、镜像模式
单机模式:rabbitmq服务运行在一台机器上,使用很简单。
集群模式:对于queue来说,message data只存在于集群中的一个节点上,而message
metadata则存在于集群中的所有节点。当message进入A节点的queue后,consumer从B节点拉去时,rabbitmq会临时在A、B之间进行消息传输,把A中的message
data取出来发送给链接在B上的consumer。这样就存在A这个瓶颈,无论链接A还是B,出口总是在A。还有如果A节点故障后,在B节点无法取到A节点中还未消费的消息,如果做了消息持久化,则A节点恢复后,仍然可以被消费,但是如果没做消息持久化,即使A恢复了,消息也丢失了。
镜像模式: 该模式和集群模式的区别在于,message
data会在镜像节点间主动同步,而不是在consumer取数据时临时拉取,当然由于在节点间主动同步数据,副作用也很明显,降低系统性能,一但大量消息进入,则同步的消息非常多。
磁盘节点和内存节点:RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。
图一:
图二:
备注:前端有2个LVS的服务器,并且配置了keepalived.其中一台为keepalived master,另外一台为keepalived slave.
用户通过访问VIP地址的56721端口(默认是15672端口为了安全建议修改)
由主LVS服务器分发负载到后端的三台MQ节点;当应用服务器连接MQ的56720端口(默认的数据通信端口为5672,为了安全建议修改),由主LVS服务器将应用服务器的连接请求分发到后端的
两台内存节点的MQ服务器;当master节点的LVS服务器出现故障,通过keepalived服务的心跳检测机制,slave的LVS服务器会自动切换VIP地址为自身,由SLAVE
LVS服务器继续提供服务;
无论消息发送到3个节点中的那一个节点,三个节点的消息都会同步,如果两个内存节点都出现问题,还可以单独使用磁盘节点进行访问,并且磁盘节点的数据重启以后不会丢失;
3、架构部署:
3.1 环境准备:
服务器用途 | OS版本 | 软件版本 | IP地址(非真实场景) |
LVS Master | CentOS 7.2 | keepalived-1.2.13 ipvsadm | 192.168.1.2 |
LVS Slave | CentOS 7.2 | keepalived-1.2.13 ipvsadm | 192.168.1.3 |
Mq memnode1 | CentOS 7.2 | Erlang R16B03 rabbitmq-server-3.6.5 | 192.168.1.4 |
Mq memnode2 | CentOS 7.2 | Erlang R16B03 rabbitmq-server-3.6.5 | 192.168.1.5 |
Mq disknode | CentOS 7.2 | Erlang R16B03 rabbitmq-server-3.6.5 | 192.168.1.6 |
VIP地址为 192.168.1.254
3.2 RabbitMQ集群安装和配置:
Node节点的安装和配置:
① hostnamectl set-hostname rabbitmq-node1 计算机命名
① sed -i '$a\192.168.1.4 rabbitmq-node1' /etc/hosts 修改hosts文件,三个节点保持一致
① sed -i '$a\192.168.1.5 rabbitmq-node2' /etc/hosts
① sed -i '$a\192.168.1.6 rabbitmq-node3' /etc/hosts
① wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 下载epel源
① rpm -ivh epel-release-latest-7.noarch.rpm
① yum clean all
① yum makecache
② yum -y install erlang 安装erlang环境
③ cd /software && wget https://github-production-release-asset-2e65be.s3.amazonaws.com/924551/fe3568da-5aeb-11e6-97d0-2844b85b23c5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190301%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190301T092318Z&X-Amz-Expires=300&X-Amz-Signature=086dcfb22607378f24a460feb386c2e7f0e723b24316c8e03103c350d09607ed&X-Amz-SignedHeaders=host&actor_id=27935695&response-content-disposition=attachment%3B%20filename%3Drabbitmq-server-3.6.5-1.noarch.rpm&response-content-type=application%2Foctet-stream
① yum localinstall rabbitmq-server-3.6.5-1.noarch.rpm
① systemctl start rabbitmq-server.service 启动rabbitmq-server服务
② /sbin/chkconfig rabbitmq-server on 配置开机自启
③ rabbitmq-plugins enable rabbitmq_management 开启web管理功能
① systemctl stop iptables.service 停止防火墙
② systemctl disable iptables.service 配置开机关闭防火墙
① rabbitmqctl add_user bqjr bqjr123 添加MQ用户
② rabbitmqctl set_user_tags bqjr administrator 设置MQ用户的角色为管理员
[root@test rabbitmq]# vim
/usr/local/rabbitmq_server/etc/rabbitmq/rabbitmq.config
[
{rabbit,
[{tcp_listeners, [56720]}, {loopback_users, []}, {vm_memory_high_watermark,
0.6}]},
{rabbitmq_management, [{listener, [{port, 56721}]},{loopback_users,
[]}]},
{rabbitmq_tracing, [{username, "guest"}, {password,
"guest123$%^"}]}
].
[root@SZ3FUAT0MQ00100 rabbitmq]#
[root@test rabbitmq]# vim
/usr/local/rabbitmq_server/etc/rabbitmq/enabled_plugins
[rabbitmq_federation,rabbitmq_federation_management,rabbitmq_management,rabbitmq_shovel,rabbitmq_shovel_management,rabbitmq_tracing].
安装完rabbitmq之后,还需要修改两个配置文件,然后重启一下MQ的服务
以上的命令需要在三台MQ节点上面都执行,以上的命令也可以用脚本来执行。我写了一个自动化安装mq单机的脚本如下:
vim mq_install.sh
#!/bin/bash
#
ip=$(ifconfig|grep "inet addr"|grep -v 127.0.0.1|awk -F "
" '{print $2}'|awk -F ":" '{print $2}')
yum -y install make gcc gcc-c++
kernel-devel m4 unixODBC unixODBC-devel openssl openssl-deetc
yum -y install
ncurses-devel
wget -O /software/otp_src_19.0.tar.gz ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/otp_src_19.0.tar.gz
wget
-O /software/wxWidgets-3.0.2.tar.bz2 ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/wxWidgets-3.0.2.tar.bz2
wget
-O /software/rabbitmq-server-generic-unix-3.6.9.tar ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/rabbitmq-server-generic-unix-3.6.9.tar
cd
/software
tar xzvf otp_src_19.0.tar.gz
cd otp_src_19.0
./configure
--prefix=/usr/local/erlang --without-javac
value=$(echo $?)
if [ ${value}
-eq 0 ];then
make && make install
fi
echo -e
"ERLANG_HOME=/usr/local/erlang\nPATH=\$PATH:\$ERLANG_HOME/bin\nexport
ERLANG_HOME PATH\n" >>/etc/profile.d/erlang.sh
source
/etc/profile.d/erlang.sh
yum -y install gtk2-devel binuti-devel
mesa-libGL-devel mesa-libGLU-devel
cd /software && tar jxvf
wxWidgets-3.0.2.tar.bz2 && cd wxWidgets-3.0.2
./configure
--with-opengl --enable-debug --enable-unicode
value=$(echo $?)
if [
${value} -eq 0 ];then
make && make install
fi
cd
/software
tar xf rabbitmq-server-generic-unix-3.6.9.tar
mv
/software/rabbitmq_server-3.6.9 /usr/local
cd /usr/local
ln -sv
rabbitmq_server-3.6.9 rabbitmq_server
echo -e
"RABBITMQ_HOME=/usr/local/rabbitmq_server\nPATH=\$PATH:\$RABBITMQ_HOME/sbin\nexport
RABBITMQ_HOME PATH\n" >>/etc/profile.d/rabbitmq.sh
source
/etc/profile.d/rabbitmq.sh
wget -O /etc/init.d/rabbitmq-server ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/rabbitmq-server
chmod
+x /etc/init.d/rabbitmq-server
cd /etc/init.d
chkconfig --add
rabbitmq-server
chkconfig rabbitmq-server on
mkdir -p
/logs/rabbitmq
mkdir -p /var/run/rabbitmq
ln -s /usr/local/erlang/bin/erl
/usr/bin/erl
wget -O
/usr/local/rabbitmq_server-3.6.9/etc/rabbitmq/enabled_plugins ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/enabled_plugins
wget
-O /usr/local/rabbitmq_server-3.6.9/etc/rabbitmq/rabbitmq.config ftp://ftp:Pass123@192.168.1.100:9020/software/rabbitmq/rabbitmq.config
service
rabbitmq-server start
sleep 15
source /etc/profile
rabbitmqctl add_user
admin admin123$%^
rabbitmqctl set_user_tags admin
administrator
rabbitmqctl change_password guest guest123$%^
iptables -I
INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 56721 -j
ACCEPT
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED --dport
56721 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED
--dport 4369 -j ACCEPT
iptables -I INPUT -p tcp -m state --state
NEW,ESTABLISHED --dport 25672 -j ACCEPT
/etc/init.d/iptables
stop
/etc/init.d/iptables restart
我一般习惯把下载下来的软件统一存储到FTP服务器上面,然后通过脚本中直接wget ftp路径下的文件来执行;
MQ集群的安装和配置:
第一台MQ内存节点 192.168.1.5 执行如下操作
① chmod 600 /root/.erlang.COOKIE 修改erlang的COOKIE文件属性,然后复制此文件到其他两台节点的相同位
置,保证三台节点的COOKIE文件一致;
① scp -r /root/.erlang.COOKIE root@192.168.1.5:/root 复制erlang的COOKIE文件到另外两个节点
scp -r /root/.erlang.COOKIE root@192.168.1.6:/root 复制erlang的COOKIE文件到另外两个节点
① rabbitmqctl stop_app 停止第一台mq节点
② rabbitmqctl join_cluster --ram rabbit@rabbitmq-node3 以内存节点的方式加入到集群
③ rabbitmqctl start_app 启动第一台mq节点
④ rabbitmqctl cluster_status 查看mq集群状态
⑤ rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' 设置集群的同步策略
第二台MQ内存节点 192.168.1.5 执行如下操作
① rabbitmqctl stop_app
② rabbitmqctl join_cluster --ram rabbit@rabbitmq-node3
③ rabbitmqctl start_app
④ rabbitmqctl cluster_status
第三台MQ内存节点不需要执行集群加入命令
[root@SZ3FUAT0MQ00100 rabbitmq]# rabbitmqctl cluster_status
Cluster status
of node rabbit@SZ3FUAT0MQ00100
...
[{nodes,[{disc,[rabbit@testMQ00101]},
{ram,[rabbit@testMQ00104,rabbit@testMQ00100]}]},
{running_nodes,[rabbit@testMQ00104,rabbit@testMQ00101,
rabbit@testMQ00100]},
{cluster_name,<<"rabbit@test00101.bf.cn">>},
{partitions,[]},
{alarms,[{rabbit@testMQ00104,[]},
{rabbit@testMQ00101,[]},
{rabbit@testMQ00100,[]}]}]
[root@testMQ00100
rabbitmq]#
在任何一台MQ节点上面执行 rabbitmqctl cluster_status 命令查看
MQ集群状态。这里的显示信息包括了。MQ集群主节点的名称,包含的磁盘节点名称,包含的内存节点名称。目前运行的几个节点
网络分区情况(注意:这里的分区是[]才是好的,如果是其他的内容,可能表示产生的网络分区。一般是因为网络中断引起的MQ集群脑裂状况)
LVS节点的安装和配置:
两台 LVS节点都需要安装keepalived软件和ipvsadm软件。
Keepalived
是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则。
当LVS进行主备切换的时候,对外提供服务的IP是如何做到切换的呢?这就依赖于keepalived 所应用的vrrp协议,即Virtual
Reduntant Routing
Protocol,虚拟冗余路由协议。简单来讲,此协议是将IP设置在虚拟接口之上,根据一定的规则实现IP在物理主机上流动,即哪台主机可以占有该IP。
而且keepalived具有脚本调用接口,可通过脚本完成拓展功能。
从2.4版本开始,linux内核默认支持LVS。要使用LVS的能力,只需安装一个LVS的管理工具:ipvsadm。
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
通告内容:心跳,优先级等;周期性;
各主机通告以组播方式通信,只向组内的主机发送数据包,因为按照组播的mac地址发送,组播mac地址是和组播ip地址对应的。iana(internet
assigned number authority)规定,组播mac地址的高24bit为0x01005e,mac
地址的低23bit为组播ip地址的低23bit。相应地网卡需要设置支持multicast。
抢占式,非抢占式;
默认为抢占式。当优先级高的主机恢复正常状态时,将夺回IP,重新成为MASTER。
安全认证:
无认证
简单字符认证 #一般采用此方式
MD5
工作模式:
主/备:单虚拟路径器;
主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)
假定两台主机A和B做HA,可以做两个虚拟接口,流动2个IP。接口1中,A设备优先级设定高,为MASTER;接口2种,B设备优先级高,为MASTER。
这样两台主机,能通过两个对外IP同时工作。即主主模式。
LVS的结构主要分为两部分:
工作在内核空间的IPVS模块。LVS的能力实际上都是由IVPS模块实现。
工作在用户空间的ipvsadm管理工具。其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块
yum –y install keepalived
yum –y install ipvsadm
配置主LVS服务器:
vim /etc/keepalived/keepalived.cof
! Configuration File for keepalived
global_defs {
router_id keepalived_lvs_test_01_01
}
vrrp_sync_group VGM_lvs_test_01 {
group {
lvs_bl_test_138
}
}
#############################lvs########################
vrrp_instance
lvs_bl_test_138 { //
每一个vrrp_instance就是定义一个虚拟路由器的
state MASTER 当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP;
interface eth0 绑定为当前虚拟路由器使用的物理接口
virtual_router_id 138
当前虚拟路由器的惟一标识,范围是0-255 主从必须一致
priority 120
当前主机在此虚拟路径器中的优先级;范围1-254
advert_int 1 //
初始化通告
nopreempt 不抢占
authentication { //
认证机制
auth_type PASS
auth_pass 111111 }
virtual_ipaddress {
192.168.1.254 //
虚拟地址vip
}
}
virtual_server 192.168.1.254 56720 { 设置一个virtual server:
VIP:Vport
delay_loop 6 检查的间隔时间,每隔6秒检查一次
lb_algo lc LVS调度算法,lc表示最少连接数
lb_kind DR
LVS集群模式,代表DR模式
# persistence_timeout 300
会话保持时间(秒为单位),即以用户在120秒内被分配到同一个后端realserver
protocol TCP
健康检查用的是TCP还是UDP
real_server 192.168.1.4 56720 {
后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个
weight 1
给每台的权重,0表示失效(不给他转发请求直到他恢复正常),默认是1
TCP_CHECK {
TCP方式健康检查
connect_timeout
3 健康检查超时时间
nb_get_retry 3
//失败重试次数
delay_before_retry 3
//失败重试的间隔时间
connect_port 56720
检查56720端口
}
}
real_server 192.168.1.5 56720 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56720
}
}
}
virtual_server 192.168.1.254 56721 {
delay_loop 6
lb_algo lc
lb_kind DR
persistence_timeout 300
protocol TCP
real_server 192.168.1.4 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
real_server 192.168.1.5 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
real_server 192.168.1.6 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
}
service keepalived start
第二台LVS Slave 服务器的配置:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id keepalived_lvs_test_01_02
}
vrrp_sync_group VGM_lvs_test_01 {
group {
lvs_bl_test_138
}
}
#############################lvs########################
vrrp_instance
lvs_bl_test_138 {
state BACKUP
interface eth0
virtual_router_id 138
priority 90
#备节点的优先级一定要被主节点小
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 111111 }
virtual_ipaddress {
192.168.1.254
}
}
virtual_server 192.168.1.254 56720 {
delay_loop 6
lb_algo lc
lb_kind DR
# persistence_timeout 300
protocol TCP
real_server 192.168.1.4 56720 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56720
}
}
real_server 192.168.1.5 56720 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56720
}
}
}
virtual_server 192.168.1.254 56721 {
delay_loop 6
lb_algo lc
lb_kind DR
persistence_timeout 300
protocol TCP
real_server 192.168.1.4 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
real_server 192.168.1.5 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
real_server 192.168.1.6 56721 {
weight
1
TCP_CHECK {
connect_timeout
3
nb_get_retry 3
delay_before_retry 3
connect_port
56721
}
}
}
systemctl restart keepalived 重启keepalived
我们这里使用的是LVS的DR模式,LVS除了DR模式之外,还有NAT模式、隧道模式;并且我们这里使用了keepalived结合LVS的统一配置文件实现的。也可以通过ipvsadm命令来配置LVS
如果配置了LVS的DR模式,除了在两台LVS节点的服务器上面配置keepalived生成VIP地址之外,还需要配置real
server的系统参数,需要在real server的lo节点配置VIP地址,需要配置real
server内核参数,不监听从lo 接口接受到的arp包等;
real server的手动配置如下,每台机器都需要配置如下的命令:
添加lo端口的VIP&路由
[root@bogon ~]# ifconfig lo:0 192.168.1.254 netmask 255.255.255.255 (由于RS的VIP不是用来通讯,并且这里一定要设置24位掩码)
[root@bogon ~]# route add -host 192.168.1.4 dev lo
ARP抑制
[root@bogon ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@bogon ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@bogon ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@bogon ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
我将这些操作做成了一个服务,启动开机执行.每一台real server都需要做如下的操作。
[root@SZ3FUAT0MQ00100 ~]# cat /etc/init.d/lvs_real
#!/bin/bash
#
# chkconfig: - 87 15
# Script to start LVS DR real server.
#
description: LVS DR real server
#
.
/etc/rc.d/init.d/functions
VIP=192.168.1.254
#这里根据需要改成自己的VIP地址
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo 1
> /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >
/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >
/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >
/proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP
broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host
$VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback
device(s).
/sbin/ifconfig lo:0 down
echo 0 >
/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 >
/proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 >
/proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 >
/proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
# Status
of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep
$VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
#
Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0
{start|status|stop}"
exit 1
;;
esac
chkconfig –add lvs_real
chkconfig lvs_real on
下班了,今天就写这么多。MQ的技术文档还有很多。包括MQ的监控、MQ的自动化脚本账户管理、MQ的脑裂故障排查等,敬请期待。。。