Centos7 RabbitMQ+HAProxy+Keepalive 多机多节点/单机多节点部署

 

                                                多机多集群部署:

环境虚拟机:

CentOs7:

192.168.56.101    node-001(部署RabbitMQ)

192.168.56.110    node-002(部署RabbitMQ)

192.168.56.111    node-003(部署RabbitMQ)

192.168.56.112    node-004(部署HAProxy+Keepalive)

192.168.56.113    node-005(部署HAProxy+Keepalive)

RabbitMQ依赖环境:

yum -y install make gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC-devel java java-devel

yum -y install  glibc-devel  ncurses-devel openssl-devel xmlto

 

一.安装erlang:

https://pan.baidu.com/s/1gj3IF6L_omJ45kYHwr4n7Q 提取码:dv76

# wget http://erlang.org/download/otp_src_22.2.tar.gz

# tar -zxvf otp_src_22.2.tar.gz

# cd otp_src_22.2

# //这里我们将他统一装到/usr/local/erlang中,方便查找和使用。

# mkdir -p /usr/local/erlang

# ./configure --prefix=/usr/local/erlang

# make && make install

 

//安装后,在/usr/local/erlang中就会出现如下:

// 将/usr/local/erlang/bin 添加环境变量

# vi /etc/profile

//添加如下内容保存
export PATH=$PATH:/usr/local/erlang/bin

# source /etc/profile  #重载配置

//成功如下:

  • 安装rabbitmq

https://pan.baidu.com/s/12XPQwucFwKOsDtpfjTRMdg  提取码:fdov

# tar -xvf rabbitmq-server-generic-unix-3.8.3.tar.xz -C /usr/local/

# vi /etc/profile  //添加环境变量

//添加如下内容

PATH=$PATH:/usr/local/rabbitmq_server-3.8.3/sbin

export LC_ALL=en_US.UTF-8

 # source /etc/profile  //重载一下环境变量
# rabbitmq-plugins enable rabbitmq_management  // 添加web管理插件
# rabbitmq-server -detached   // 后台启动rabbitmq服务

Warning: PID file not written; -detached was passed. 启动服务这个警告,忽略它。实际是已经启动了

#ps aux | grep rabbitmq  //成功如下

// 登陆rabbitmq控制面板 IP:15627

// 添加用户:

rabbitmqctl add_user user1 user1      //添加用户

rabbitmqctl set_permissions -p "/" user1 ".*" ".*" ".*"   //添加权限

rabbitmqctl set_user_tags user1 administrator    //修改用户角色

 

 

  • 安装rabbitmq-c 

https://github.com/alanxz/rabbitmq-c/releases

 

# wget https://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz

# tar zxvf v0.10.0.tar.gz

# cd rabbitmq-c-0.10.0/

# mkdir build && cd build

# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c ..

# cmake --build . --target install

# ln -s /usr/local/rabbitmq-c/lib64/ /usr/local/rabbitmq-c/lib

 

 

四.安装rabbitmq扩展 

http://pecl.php.net/package/amqp

# wget http://pecl.php.net/get/amqp-1.9.4.tgz

# tar zxvf amqp-1.9.4.tgz

# cd amqp-1.9.4

# phpize

// 对应php路径与rabbitmq-c

 ./configure --with-php-config=/opt/phre/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c

 

# make && make install

vi /opt/phre/php/etc/php.ini  //添加扩展

添加: extension=amqp.so

//重启php-fpm

// 如phpinfo()无扩展信息,可在php安装目录vi /opt/phre/php/etc/conf.d下创建文件amqp.ini  写入:extension=amqp.so

 

动态添加rabbitmq扩展

前提已经在一台虚拟中安装过rb/rb-c扩展,且PHP版本需一致

  1. 将安装过的扩展下载至本地

①# find -name amqp.so   //查看扩展位置

②# cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/

③# sz amqp.so  //下载至本地到未安装扩展服务器中

①# cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

②# rz  //上传扩展

③# chmod 755 amqp.so  //赋予权限

④# ldd amqp.so  //查看so扩展依赖库

//提示没有 livrabbitmq.so.4 这个依赖

⑤# find -name librabbitmq.so.4  到安装过扩展的服务器上

⑥# sz librabbitmq.so.4   //进入目录下载扩展至本地

⑦# mkdir -p mkdir -p /usr/local/rabbitmq-c//lib/   //至新服务器上创建rb-c文件夹

⑧# rz     //上传扩展至目录下

⑨# ldd amqp.so  //再次查看依赖

⑩# vi /usr/local/php7/lib/php/php.ini   //ini中添加扩展

[amqp]

extension=amqp.so

//保存退出

php -m 查看扩展

五.Rabbitmq镜像集群搭建

192.168.56.101 node-001 (主节点)

192.168.56.110 node-002  //将node-002节点加入node-001

192.168.56.111 node-003  //将node-003节点加入node-001

1. //在需要部署集群的主机上修改hosts,要包含每个节点信息,保持信息一致(node-001/node-002/node-003 需要部署集群都要配置下列信息,修改参数)

[root@node-001 local]# vi /etc/hosts

192.168.56.101 node-001

192.168.56.110 node-002

192.168.56.111 node-003

[root@node-001 local]# vi /etc/hostname

node-001

[root@node-001 local]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=node-001

[root@node-001 local]# service network restart

[root@node-001 local]# reboot   //重启

[root@node-001 local]# hostname  //是否生效

node-001

  1. rabbitmq集群是基于erlang同步,所以先配置使各个节点 中 .erlang.cookie文件一致(以主节点配置为主,发送至其它子节点.)

[root@node-001 local]# find / -name .erlang.cookie

/root/.erlang.cookie

② [root@node-001 local]# scp /root/.erlang.cookie root@node-002:/root

③ [root@node-001 sbin]# cd /usr/local/rabbitmq_server-3.8.3/sbin

[root@node-001 sbin]#  ./rabbitmq-server -detached  //启动rabbitmq

[root@node-001 sbin]# ps aux|grep rabbitmq

3. 切换到node-002服务器,  确定下两台服务器互相能否ping通,ping node-001

① [root@node-002 local]# cd /usr/local/rabbitmq_server-3.8.3/sbin

② [root@node-002 sbin]# ./rabbitmq-server -detached 

[root@node-002 sbin]# ps aux|grep rabbitmq

[root@node-002 sbin]# ./rabbitmqctl stop_app

//node-002加入主节点node-001(磁盘节点/内存节点,集群中必须存在一个磁盘节点

主节点是默认磁盘节点)

内存节点: ./rabbitmqctl join_cluster --ram rabbit@node-001

磁盘节点: ./rabbitmqctl join_cluster rabbit@node-001

⑤ [root@node-002 sbin]# ./rabbitmqctl join_cluster rabbit@node-001

⑥ [root@node-002 sbin]# rabbitmqctl start_app  //启动

[root@node-002 sbin]# ./rabbitmqctl cluster_status //查看集群状态

4.因为两台服务器host已经改掉了,已经部署localhost了,所以需要加上对应的用户,先前的username用户已经登录不上控制台了。添加一个admin用户如下:(其它集群也可以用添加的用户访问)

[root@node-001 local]#./rabbitmqctl -n rabbit@node-001 add_user admin 123456

[root@node-001 local]#./rabbitmqctl -n rabbit@node-001 set_user_tags admin administrator

[root@node-001 local]#./rabbitmqctl -n rabbit@node-001 set_permissions -p / admin '.*' '.*' '.*'

[root@node-001 local]#./rabbitmq-plugins enable rabbitmq_management

  1. 部署镜像模式(以上的配置是只是普通集群)

只有设置policy策略才能算得上是镜像模式,(两种配置方法,后台OR命令行)

①后台配置:

//集群宕机后数据不一致:

两种同步方式:

1.手动同步

3.策略配置自动同步(未设置是默认是手动同步)

②命令行(任意节点执行)

//表示同步所以的队列消息

rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’

// 表示同步以rqmessage开头的消息

rabbitmqctl set_policy -p /test ha-allqueue “^rqmessage” ‘{“ha-mode”:“all”}’

//现在192.168.56.101:15672 /192.168.56.110:15672/192.168.56.111:15672

都可以登陆admin 123456

5: 对节点的操作:

// ①集群节点删除:

例:删除node-002子节点

node-002中操作:

1.关闭应用:rabbitmqctl stop_app

2.重置信息:rabbitmqctl reset    //删除集群节点残留数据

node-001中操作:

  1. rabbitmqctl forget_cluster_node rabbit@node-002
  2. 回到node-002  rabbitmqctl start_app

// ②节点后删除节点数据(如移除节点后,未执行rabbitmqctl reset。节点会无法启动,错误信息:{error,{inconsistent_cluster,"Node rabbit@node1 thinks it's clustered with node rabbit@node2, but rabbit@node2 disagrees"}})

  1. find / -name mnesia

  1.  mv /usr/local/rabbitmq_server-3.8.3/var/lib/rabbitmq/mnesia/ /tmp/

rm -rf /usr/local/rabbitmq_server-3.8.3/var/lib/rabbitmq/mnesia

//修改节点类型(需要修改的集群下)

#rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type disc   //磁盘节点

rabbitmqctl change_cluster_node_type ram  //内存节点

#rabbitmqctl start_app

 

集群重启顺序

集群重启的顺序是固定的,并且是相反的。 如下所述:

启动顺序:磁盘节点 => 内存节点 。关闭顺序:内存节点 => 磁盘节点 最后关闭必须是磁盘节点,不然可能回造成集群启动失败、数据丢失等异常情况。

 

六:HAProxy +Keepalive高可用负载均衡

环境:192.168.56.112 node-004

环境:192.168.56.113 node-005

1.安装HAProyx

[root@node-003 local]# yum -y install  haproxy

#haproxy 查看状态

2.配置文件

[root@node-003 local]# vi /etc/haproxy/haproxy.cfg

需要修改的片段

注释这两个option,否则启动会报错

②增加以下配置:

注意点:1.配置完成后访问rabbitmq web面板的变成15670。

2.代码请求rabbitmq的端口变成5673

3.启动

[root@node-003 local]# haproxy -f /etc/haproxy/haproxy.cfg

访问 192.168.56.112:8090/stats  /   192.168.56.113:8090/stats

访问 192.168.56.112:15670  /  192.168.56.113:15670/

二:安装Keepalive

1.yum -y install keepalived
chkconfig --add keepalived #设置开机启动,可以不用设置

2.修改/etc/keepalived/keepalived.conf配置文件(主机和备机稍有不同,已经在配置文件中声明,请详细阅读

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   # vrrp_strict    # 一定要注释掉,否则无法启动keepalived
   vrrp_garp_interval 0
   vrrp_gna_interval 0}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
}

vrrp_instance HAPROXY_HA {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP(设置非抢占模式主被机都需要设置成BACKUP)
# 备用节点时,设置为:
state BACKUP
#state MASTER
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface eth1
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 90
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文
# 可配置多个子节点,需要在下列加上IP
# 主节点时,内容为:
unicast_src_ip 192.168.56.112
 unicast_peer {
 192.168.56.113
}
# 备节点时,内容为:
#unicast_src_ip 192.168.56.111
#unicast_peer {
#192.168.1.101
#}
# 设置优先级,确保主节点的优先级高过备用节点
# 主节点时,设置为:
priority 100
# 备节点时,设置为:
#priority 80
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
nopreempt
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 12345
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.56.188  #虚拟ip配置完之后就用它访问
}
}

注意点:(这边默认网卡是eth0,查看本机是否存在ifconfig)

3.启动服务

因为是为了实现haproxy的高可用,启动时需要顺序启动:

(1) 启动两个节点的haproxy: haproxy -f /etc/haproxy/haproxy.cfg

(2) 启动keeepalived:先启动master节点,后启动BACKUP节点

# service keepalived start  //开启

# killall keepalived  //关闭

(3) 通过配置的虚拟IP(VIP)访问。(代码请求也是通过VIP+配置的5673端口访问

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------

单机多集群部署:

环境虚拟机:

CentOs7:

192.168.56.112    node-004

(部署RabbitMQ+HAProxy+Keepalive)

192.168.56.113    node-005

(部署RabbitMQHAProxy+Keepalive)

 

一:环境:

node004/node005

已经安装erlang/rabbitmq/HAProxy/Keepalive

(按照上列方法安装,配置可暂时不配置)

二:开始搭建单机多集群

  1. 进入rabbitmq服务sbin对应目录

# cd  /usr/local/rabbitmq_server-3.8.3/sbin/

①:启动第一节点 # 未指定面板启动默认15672端口

RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-001 ./rabbitmq-server

②:启动第二节点 # 指定面板启动,不然会报错.

RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit-002 rabbitmq-server -detached

③:如想继续增加节点依次操作,端口不要冲突。(node004/node005 同是这般操作)

 

 

  1. 加入集群

!!此处设置node-004虚拟机中rabbt-001为集群主节点,node-004/nodd-005其他节点加入!

①将需要加入主节点的子节点停止应用程序

# ./rabbitmqctl -n rabbit-002 stop_app 

②清除节点元数据

# ./rabbitmqctl -n rabbit-002 reset

③加入主节点node004下的rabbit001

两种情况1:node004本机下的集群加入节点。2:node005虚拟机下节点加入node004虚拟机中的主节点

// node004本机集群节点rabbit002加入rabbit001

# ./rabbitmqctl -n rabbit-002  join_cluster --ram rabbit-001

//node005虚拟机集群加入node004中rabbit001节点

# ./rabbitmqctl -n rabbit-002 join_cluster --ram rabbit-001@node-004

rabbit-001@node-004 该节点名称可在node004面板查看

④启动节点

# ./rabbitmqctl -n rabbit-002 start_app

 

⑤查看集群状态

# ./rabbitmqctl cluster_status -n rabbit-001

# ./rabbitmqctl cluster_status -n rabbit-001@node-004  //005中查看004集群

 

3.配置HAProxy

node004/node005 配置信息。注意IP与端口号

4.配置Keepalive

node004/node005 配置信息。注意IP与端口号

与多机部署集群配置文件相同。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值