一、准备 1
二、安装RabbitMQ在rabbit1,rabbit2,rabbit3 1
三、RabbitMQ集群配置 1
1、关闭所有rabbitq服务 1
2、设置hosts解析,所有rabbit节点配置相同 2
3、保证3台rabbit服务的cookie相同,把一台复制到其他两台 2
4、启动rabbit服务 2
5、创建集群,节点rabbit1,rabbit2 以RAM模式加入到rabbit3 2
6、节点rabbit移除 2
四、负载均衡配置 3
1、安装nginx 3
2、配置nginx.conf 3
一、准备
系统
描述
4个Debian / Ubuntu linux系统
分别安装在四台不同的物理机上,位于同一局域网,hostname不能相同,假设hostname分别为rabbit1,rabbit2,rabbit3,nginx
参考官方文档:
http://www.rabbitmq.com/clustering.html
http://www.rabbitmq.com/ha.html
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html
http://www.rabbitmq.com/production-checklist.html
二、安装RabbitMQ在rabbit1,rabbit2,rabbit3
参考http://www.rabbitmq.com/install-debian.html
遇到问题:
1.无法访问管理控制台http://server::15672/#/
原因:安装默认关闭后台管理,需要重启rabbitmq-plugins enable rabbitmq_management 参考:http://www.rabbitmq.com/management.html
2.无法用guest登陆
原因:基于安全考虑rabbitmq默认只能本地用guest访问,远程无法访问
解决办法:http://www.cnblogs.com/mingaixin/p/4134920.html
创建用户 赋予管理员角色(生产环境不建议开启后台)
三、RabbitMQ集群配置
1、关闭所有rabbitq服务
rabbit# rabbitmqctl stop
2、设置hosts解析,所有rabbit节点配置相同
rabbit# vi /etc/hosts
192.168.70.207 rabbit1
192.168.70.208 rabbit2
192.168.70.209 rabbit3
3、保证3台rabbit服务的cookie相同,把一台复制到其他两台
rabbit# chmod 777 /var/lib/rabbitmq/.erlang.cookie
rabbit# vi /var/lib/rabbitmq/.erlang.cookie
rabbit# chmod 400 /var/lib/rabbitmq/.erlang.cookie
4、启动rabbit服务
rabbit1$ rabbitmq-server -detached
rabbit2$ rabbitmq-server -detached
rabbit3$ rabbitmq-server -detached
5、创建集群,节点rabbit1,rabbit2 以RAM模式加入到rabbit3
rabbit1$ rabbitmqctl stop_app
rabbit1$ rabbitmqctl join_cluster --ram __rabbit@rabbit__3
rabbit1$ rabbitmqctl start_app
rabbit2$ rabbitmqctl stop_app
rabbit2$ rabbitmqctl join_cluster --ram __rabbit@rabbit__3
rabbit2$ rabbitmqctl start_app
6、节点rabbit移除
rabbit1$ rabbitmqctl stop_app
rabbit1$ rabbitmqctl reset
rabbit1$ rabbitmqctl start_app
7、高可用策略配置,配置任何一个节点
rabbitmqctl set_policy ha-all-queue "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
四、负载均衡配置
1、安装nginx
参考http://nginx.org/en/linux\_packages.html
2、配置nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream rabbitmq{
server 192.168.70.208:5672;
server 192.168.70.209:5672;
server 192.168.70.207:5672 backup;
}
server {
listen 5672;
proxy_connect_timeout 10s;
proxy_pass rabbitmq;
}
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}