erlang+rabbitmq+haproxy

Erlang+Rabbitmq+Haproxy

erlang安装

安装

sudo yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto -y

cd /u02

mkdir source-package

cd /u02/source-package

wget http://www.erlang.org/downloads/otp_src_22.0.tar.gz

tar -xzvf otp_src_22.0.tar.gz

cd otp_src_22.0/

./configure --prefix=/u02/erlang

make && make install

cd /u02/erlang/

配置Erlang环境变量

vi /etc/profile文件,增加下面的环境变量:
   
export PATH=$PATH:/u02/erlang/bin

source  /etc/profile

rabbitmq安装

安装

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.7.15/rabbitmq-server-generic-unix-3.7.15.tar.xz

xz -d rabbitmq-server-generic-unix-3.7.15.tar.xz

tar -xvf rabbitmq-server-generic-unix-3.7.15.tar -C /u02

cd /u02

ln -s rabbitmq_server-3.7.15/  rabbitmq

配置

配置erl的路径

vim /u02/rabbitmq/sbin/rabbitmq-defaults

### next line will be updated when generating a standalone release
ERL_DIR=/u02/erlang/bin/

配置环境变量

vi /etc/profile文件,增加下面的环境变量:

export PATH=$PATH:/u02/rabbitmq_server-3.7.15/sbin

source  /etc/profile

启动

启动:     
  ./sbin/rabbitmq-server -detached
  
  查看状态: 
  ./sbin/rabbitmqctl status

端口

5672
15672

启用管理界面

rabbitmq-plugins enable rabbitmq_management

vhost及用户管理

1. 列举所有虚拟主机
rabbitmqctl list_vhosts
添加虚拟主机
rabbitmqctl add_vhost <vhost_name>
删除虚拟主机
rabbitmqctl delete_vhost <vhost_name>
添加用户
rabbitmqctl add_user <username> <password>
设置用户标签
rabbitmqctl set_user_tags <username> <tag> 

设置这个才能在页面上登录,tag可以为administrator, monitoring, management
设置权限
rabbitmqctl set_permissions [-p <vhost>] <user> <conf> <write> <read>
权限配置包括:
   配置(队列和交换机的创建和删除)、
   写(发布消息)、
   读(有关消息的任何操作,包括清除这个队列)
conf:一个正则表达式match哪些配置资源能够被该用户访问。
write:一个正则表达式match哪些配置资源能够被该用户读。
read:一个正则表达式match哪些配置资源能够被该用户访问
权限配置是针对于vhost进行配置的,如果有多个vhost,如果某个用户需要相同的配置就要配置多次。
".":匹配任何队列和交换器,"checks-.":只匹配checks-开头的队列和交换器,"":不匹配队列和交换器
示例
rabbitmqctl add_user gj gj

rabbitmqctl set_user_tags gj administrator

rabbitmqctl add_vhost /vhost/XXX/gj/

rabbitmqctl set_permissions -p /vhost/XXX/gj/ gj ".*" ".*" ".*"

集群搭建

复制.erlang.cookie

将其中一台.erlang.cookie 复制到其他机器
1.找到.erlang.cookie 所在位置

 1、进入目录: cd /u02/rabbitmq


 2、后台启动:  ./sbin/rabbitmq-server -detached

 3、查看日志 vim ./vim var/log/rabbitmq/xxxxx.log 
     此行日志指明cookie的位置  home dir       : /home/tkiot

 4、cat  .erlang.cookie 
    查看内容,如【RONVVDVRYXFLCEFMLXGG】
    
2. 将.erlang.cookie 内容复制到其他节点的同样位置【$homeDir】
    #先关闭服务:  ./sbin/rabbitmqctl stop
    #进入cookie目录:    cd $homeDir   
    #增加写权限:    sudo chmod u+w .erlang.cookie
    #修改内容为XXX:  sudo echo 'RONVVDVRYXFLCEFMLXGG' > .erlang.cookie
    #移除写权限:    sudo chmod u-w .erlang.cookie
    #再次后台启动:  ./sbin/rabbitmq-server -detached

启动集群节点

1.第一个节点启动

rabbitmq-server -detached

查看节点状态,查找节点名称【rabbit@tkiot-mongodb1】
 rabbitmqctl status

2.其他节点加入集群

rabbitmq-server -detached
rabbitmqctl  stop_app
rabbitmqctl  reset

#加入集群节点【rabbit@tkiot-mongodb1】
#指定--ram则作为内存节点,否则为磁盘节点 disc
rabbitmqctl  join_cluster  rabbit@tkiot-mongodb1
#rabbitmqctl  join_cluster --ram rabbit@tkiot-mongodb1
rabbitmqctl  start_app
ps:一个集群中至少有一个disc节点

3、 三台机器上查看集群状态

rabbitmqctl cluster_status

RabbitMQ 集群之镜像同步

如果做集群,那么集群是成功了,但是queue是如何存放的呢?消息又是怎么同步呢。
默认的,也就是什么也不配置,直接在某个节点中添加一个queue,那么它仅仅是属于这个节点的。其它节点有的只是它的影子。所以像断线重连、操作恢复是无法做到的,实验证明确实是这样的。声明queue的节点关闭那么是无法再进行发布消息与消费的。这自然失去了集群的意义.

所以default模式一般是不会进行使用的,我们的选择是 镜像节点.
queue mirror 也就是说,也就是 会有一个 master 对应零个或多个 slave.
也可以说成主从复制,每个节点都有着相同的数据,某个节点挂掉了,另一个可以立即顶上
有三种同步的方式,一般来说  all 是我们的最佳选择
all 所有的节点都将被同步
exactly 指定个数的节点被同步
nodes 指定的名称的节点被同步
set_operator_policy (设置或者覆盖一个operator的策略)
list_operator_policies (查看所有的operator的策略)
clear_operator_policy(清除一个operator的策略 )
set_policy (设置或者覆盖一个策略)
list_policies (列出所有的策略不包括operator策略)
clear_policy (清除一个策略)

policy策略设置

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
        all: 表示在集群中所有的节点上进行镜像
        exactly: 表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
        nodes: 表示在指定的节点上进行镜像,节点名称通过ha-params指定
    ha-params: ha-mode模式需要用到的参数
    ha-sync-mode: 进行队列中消息的同步方式,有效值为automatic和manual
priority: 可选参数,policy的优先级

以下示例声明名为ha-all的策略,它与名称以”ha”开头的队列相匹配,并将镜像配置到集群中的所有节点:

rabbitmqctl set_policy ha-all "^ha" '{"ha-mode":"all"}'

策略的名称以”two”开始的队列镜像到群集中的任意两个节点,并进行自动同步:

rabbitmqctl set_policy ha-two "^two." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

以”node”开头的队列镜像到集群中的特定节点的策略:

rabbitmqctl set_policy ha-nodes "^nodes." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'

队列镜像到群集中的任意两个节点,并进行自动同步:

rabbitmqctl set_policy -p /vhost/XXX/gj/ ha-two "^" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

HaProxy

ha配置blog

https://blog.csdn.net/genglei1022/article/details/83374188
https://blog.csdn.net/qq_28710983/article/details/82194404

ha安装

wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.14.tar.gz
tar -xzvf haproxy-1.8.14.tar.gz

cd haproxy-1.8.16/

make TARGET=linux31 PREFIX=/u02/haproxy

make install PREFIX=/u02/haproxy

mkdir /u02/haproxy/conf

touch /u02/haproxy/conf/haproxy.cfg
这里需要使用uname -r查看系统版本centos6.X需要使用TARGET=linux26  centos7.x使用linux31 
#查询系统内核版本,内核为【3.10.0-862.el7.x86_64】,所以TARGET=linux31 
uname -r   
> 3.10.0-862.el7.x86_64

ha配置

global
    log 127.0.0.1 local0 info
    log-tag haproxy
    maxconn 4096
    #user haproxy
    #group haproxy
    daemon
    pidfile /u02/haproxy/conf/haproxy.pid
    #stats socket /u02/haproxy/conf/haproxy.sock mode 600 level admin
    stats timeout 2m
defaults
    log global
    mode http
    timeout connect 5s   
    timeout server 5s
    timeout client 30s
    option dontlognull
    option http-server-close
    option redispatch 
listen admin_stats
    bind 0.0.0.0:25673
    mode http
    log 127.0.0.1 local3 err
    stats refresh 60s
    stats uri /haproxy/stats
    stats realm welcom lgoin\ Haproxy
    stats auth admin:admin
    stats hide-version
    stats admin if TRUE
listen rabbitmq_cluster
    bind  0.0.0.0:5673
    mode tcp
    timeout server 168h
    balance roundrobin
    server rabbitnode1 XX.XX.XX.35:5672 check inter 1000 rise 2 fall 3 weight 1
    server rabbitnode2 XX.XX.XX.36:5672 check inter 1000 rise 2 fall 3 weight 1
    server rabbitnode3 XX.XX.XX.37:5672 check inter 1000 rise 2 fall 3 weight 1
#把RabbitMQ的管理界面也放在HAProxy后面了
listen rabbitmq_admin 
    bind  0.0.0.0:15673
    mode http
    timeout server 168h
    balance roundrobin
    server rabbitnode1 XX.XX.XX.35:15672 check inter 1000 rise 2 fall 3 weight 1
    server rabbitnode2 XX.XX.XX.36:15672 check inter 1000 rise 2 fall 3 weight 1
    server rabbitnode3 XX.XX.XX.37:15672 check inter 1000 rise 2 fall 3 weight 1

启动haproxy

sbin/haproxy -f conf/haproxy.cfg

ps:多次执行上述启动命令会运行多个实例

端口及访问

访问haproxy监听
http://XX.XX.XX.35:25673/haproxy/stats
admin/admin
访问rabbitmq管理员页面
ha代理
http://XX.XX.XX.35:15673
rabbit自带
http://XX.XX.XX.35:15672
rabbit的conntctionFactory配置
spring:  
  rabbitmq:
    addresses: XX.XX.XX.35:5673,XX.XX.XX.35:5673,XX.XX.XX.35:5673    
    #addresses: XX.XX.XX.35:5672,XX.XX.XX.35:5672,XX.XX.XX.35:5672    
    username: gj
    password: gj
    virtual-host: /vhost/XXX/gj/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值