热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rabbitMQ集群的搭建和维护

rabbit

  • 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 MasterCentOS 7.2keepalived-1.2.13  ipvsadm192.168.1.2
LVS SlaveCentOS 7.2keepalived-1.2.13  ipvsadm192.168.1.3
Mq memnode1CentOS 7.2

Erlang R16B03 

rabbitmq-server-3.6.5

192.168.1.4
Mq memnode2CentOS 7.2

Erlang R16B03 

rabbitmq-server-3.6.5

192.168.1.5
Mq disknodeCentOS 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的脑裂故障排查等,敬请期待。。。




推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 一文了解消息中间件RabbitMQ
    消息中间件---RabbitMQ1消息中间件的作用2.常用的消息中间件3消息中间件RabbitMQ3.1RabbitMQ介绍3.3RabbitMQ的队列模式3.3RabbitMQ的 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • 在RabbitMQ中,消息发布者默认情况下不会接收到关于消息在Broker中状态的反馈,这可能导致消息丢失的问题。为了确保消息的可靠传输与投递,可以采用确认机制(如发布确认和事务模式)来验证消息是否成功抵达Broker,并采取相应的重试策略以提高系统的可靠性。此外,还可以配置消息持久化和镜像队列等高级功能,进一步增强消息的可靠性和高可用性。 ... [详细]
  • Windows下安装RaibbitMQ
    1.软件准备1.1erlang语言包到http:www.erlang.orgdownload.html下载,并且运行!安装目录C:\ProgramFil ... [详细]
  • .Net下RabbitMQ发布订阅模式实践
    一、概念AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的 ... [详细]
  • Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题
    Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题 ... [详细]
  • 在 LeetCode 第 307 题中,我们详细探讨了树状数组(Fenwick Tree)的应用及其优化策略。树状数组 `tree` 用于存储特定区间内的元素和,其中区间的左边界是当前索引的二进制表示中去掉最后一个 1 后再加 1,右边界即为当前索引本身。此外,还维护了一个原始数组 `nums` 和一个表示数组长度的变量 `N`。通过这些结构,我们可以高效地实现区间求和与单点更新操作。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
author-avatar
cutepingge
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有