rabbitMQ+haproxy+keepalived部署手册环境介绍
共有172.16.86.45、172.16.86.46两台RabbitMQ Server,互为主备;
同时两台机器安装Haporxy,每个Haproxy承担2台机器的负载均衡;
两台Harpoxy采用Keepalived互为主备,VIP是172.16.86.203。
安装MQ产品
两台机器相同操作
1)新建用户
[root@DFJK-TEST-16 ~]# useradd -m -d app/rabbitmq rabbitmq
[root@DFJK-TEST-16 ~]# passwd rabbitmq
密码:rabbitmq
2)安装路径
/app/rabbitmq
3)依赖包安装
[root@DFJK-TEST-16 tools]# cd app/tools/
[root@DFJK-TEST-16 tools]# ll
total 17960
-rw-r--r-- 1 root root 18388008 Feb 25 2016 erlang-17.4-1.el6.x86_64.rpm
[root@DFJK-TEST-16 tools]# yum install erlang-17.4-1.el6.x86_64.rpm –y
依赖openssl
4)安装MQ
[rabbitmq@DFJK-TEST-16 soft]$ pwd
/app/rabbitmq/soft
[rabbitmq@DFJK-TEST-16 soft]$ ll
total 4096
-rw-r--r-- 1 rabbitmq rabbitmq 4191686 Feb 25 2016 rabbitmq-server-generic-unix-3.5.4.tar.gz
[rabbitmq@DFJK-TEST-16 soft]$ tar zxvf rabbitmq-server-generic-unix-3.5.4.tar.gz -C /app/rabbitmq/
5)解决5672端口占用
[root@DFJK-TEST-16 ~]# lsof -i :5672
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qpidd 2161 qpidd 10u IPv4 11981 0t0 TCP *:amqp (LISTEN)
[root@DFJK-TEST-16 ~]# chkconfig --list|grep qpidd
qpidd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@DFJK-TEST-16 ~]# chkconfig --level 2345 qpidd off
[root@DFJK-TEST-16 ~]# chkconfig --list|grep qpidd
qpidd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@DFJK-TEST-16 ~]# ps -ef |grep qpidd
qpidd 2161 1 0 2017 ? 00:25:44 usr/sbin/qpidd --data-dir var/lib/qpidd --daemon
root 27628 27206 0 16:07 pts/0 00:00:00 grep qpidd
[root@DFJK-TEST-16 ~]# kill -9 2161
[root@DFJK-TEST-16 ~]# lsof -i :5672
6)启动并配置rabbitmq控制台
[rabbitmq@DFJK-TEST-16 sbin]$ cd ~/rabbitmq_server-3.5.4/sbin/
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmq-server &
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmq-plugins enable rabbitmq_management
7)添加用户并授权(确保rabbitmq在启动状态)
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl add_user rabbit c0@mct3ch#r@bbit
Creating user "rabbit" ...
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl set_user_tags rabbit administrator
Setting tags for user "rabbit" to [administrator] ...
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl set_permissions -p rabbit ".*" ".*" ".*"
Setting permissions for user "rabbit" in vhost "/" ...
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl list_users
Listing users ...
guest [administrator]
rabbit [administrator]
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl delete_user guest
Deleting user "guest" ...
[rabbitmq@DFJK-TEST-16 sbin]$ ./rabbitmqctl list_users
Listing users ...
rabbit [administrator]
备注:
输入http://ip:15672可以登录管理界面,默认账户guest/guest只能使用http://localhost:15672登录,要想远程登录,需要添加一个新的用户:
# rabbitmqctl add_user admin 1234
#用户设置为administrator才能远程访问
#rabbitmqctl set_user_tags admin administrator
#rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" //该命令使用户admin具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
查看所有用户#rabbitmqctl list_users
因为RabbitMQ的集群是通过Erlang的集群来实现的,所以,要求两台机器的COOKIE文件
/app/rabbitmq/.erlang.COOKIE 文件内容一致。
将45的文件内容覆盖46文件内容。
[rabbitmq@DFJK-TEST-16 ~]$ cat .erlang.COOKIE
LVSZMXVXYAMFLUFBYBEC
[rabbitmq@DFJK-TEST-17 ~]$ ls .erlang.COOKIE -l
-r-------- 1 rabbitmq rabbitmq 20 May 22 00:00 .erlang.COOKIE
[rabbitmq@DFJK-TEST-17 ~]$ chmod 600 .erlang.COOKIE
[rabbitmq@DFJK-TEST-17 ~]$ ll .erlang.COOKIE
-rw------- 1 rabbitmq rabbitmq 20 May 22 00:00 .erlang.COOKIE
[rabbitmq@DFJK-TEST-17 ~]$ vi .erlang.COOKIE
[rabbitmq@DFJK-TEST-17 ~]$ cat .erlang.COOKIE
LVSZMXVXYAMFLUFBYBEC
由于RabbitMQ在启动Booker时会检查该文件的权限,必须为400,否则会报错,所以要修改文件的权限
[rabbitmq@DFJK-TEST-17 ~]$ chmod 400 .erlang.COOKIE
[rabbitmq@DFJK-TEST-17 ~]$ ll .erlang.COOKIE
-r-------- 1 rabbitmq rabbitmq 21 May 22 16:30 .erlang.COOKIE
Haproxy
1)安装
[root@DFJK-TEST-16 ~]# yum install haproxy -y
修改/etc/haproxy/haproxy.cfg,在文件后面添加以下内容:
[root@DFJK-TEST-17 ~]# vi etc/haproxy/haproxy.cfg
#配置TCP模式
mode tcp
option tcplog
#简单的轮询
balance roundrobin
#rabbitmq集群节点配置
server rabbit1 172.16.86.45:5672 check inter 5000 rise 2 fall 2
server rabbit2 172.16.86.46:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen private_monitoring :8100
mode http
option httplog
stats enable
#设置haproxy监控地址为http://localhost:8100/stats
stats uri stats
stats refresh 30s
#添加用户名密码认证
stats auth admin:1234
2)启动
# haproxy -f haproxy.cfg
3)重启动
# service haproxy restart
配置详解:
##############全局配置########################
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy #改变当前工作目录
stats socket /run/haproxy/admin.sock mode 660 level admin #创建监控所用的套接字目录
stats timeout 30s #超时时间
user haproxy #默认用户
group haproxy #默认用户组
daemon #创建一个守护进程
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
#################默认配置#####################
defaults
log global
mode http #默认的模式 tcp|http|health 可选,tcp是4层,http是7层,health至返回OK
option httplog #http日志模式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
# 或者监控系统为了探测该 服务是否存活可用时,需要定期的连接或者获取某
# 一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
# 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用
# 该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
timeout connect 5000 #连接超时时间
timeout client 50000 #客户端连接超时时间
timeout server 50000 #服务端连接超时时间
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
####################################################################
listen http_front
bind 0.0.0.0:1080 #监听端口
mode http
stats refresh 30s #统计页面自动刷新时间
stats uri /haproxy?stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
#stats hide-version #隐藏统计页面上HAProxy的版本信息
###############我把RabbitMQ的管理界面也放在HAProxy后面了#################
listen rabbitmq_admin
bind 0.0.0.0:8004
server node1 192.168.56.111:15672
server node2 192.168.56.112:15672
server node3 192.168.56.113:15672
####################################################################
listen rabbitmq_cluster
bind 0.0.0.0:5672
option tcplog
mode tcp
timeout client 3h
timeout server 3h
option clitcpka
balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
#balance url_param userid
#balance url_param session_id check_post 64
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-COOKIE
#balance leastconn
#balance source //ip
server node1 192.168.56.111:5672 check inter 5s rise 2 fall 3 #check inter 2000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
server node2 192.168.56.112:5672 check inter 5s rise 2 fall 3
server node3 192.168.56.113:5672 check inter 5s rise 2 fall 3