rabbitMQ集群的搭建和维护

  • 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):绑定交换机和对列直接的路由;

扫描二维码关注公众号,回复: 5381672 查看本文章

如果用乘坐火车打比方,可以这样理解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的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

图一:

rabbitmq1

 

图二:

 

RA2

 

备注:前端有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:[email protected]:9020/software/rabbitmq/otp_src_19.0.tar.gz
wget -O /software/wxWidgets-3.0.2.tar.bz2 ftp://ftp:[email protected]:9020/software/rabbitmq/wxWidgets-3.0.2.tar.bz2
wget -O /software/rabbitmq-server-generic-unix-3.6.9.tar ftp://ftp:[email protected]: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:[email protected]: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:[email protected]:9020/software/rabbitmq/enabled_plugins
wget -O /usr/local/rabbitmq_server-3.6.9/etc/rabbitmq/rabbitmq.config  ftp://ftp:[email protected]: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  [email protected]:/root 复制erlang的cookie文件到另外两个节点

           scp  -r /root/.erlang.cookie  [email protected]:/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,<<"[email protected]">>},
{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的脑裂故障排查等,敬请期待。。。

 

 

 

猜你喜欢

转载自blog.51cto.com/zgui2000/2356928