rabbitmq的普通集群及haproxy搭建文档
先创建好相关的yum源以便使用yum安装rabbitmq的相关依赖关系包
[root@instance-kry04jbh soft]# cat /etc/yum.repos.d/rabbitmq_erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/20/el/6 gpgcheck=1 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1 [root@instance-kry04jbh soft]# cat /etc/yum.repos.d/rabbitmq.repo [bintray-rabbitmq-server] name=bintray-rabbitmq-rpm baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/6/ gpgcheck=0 repo_gpgcheck=0 enabled=1
yum -y install erlang rabbitmq-server socat
安装的相关rabbitmq的及依赖版本为:
erlang-20.3.8.20-1.el6.x86_64.rpm
rabbitmq-server-3.7.12-1.el6.noarch.rpm
socat-1.7.2.3-1.el6.x86_64.rpm
软件安装完成以后就是要配置的时候
一、系统配置
1、准备三台服务器并且都安装以上软件
2、使用优维系统修改此两台服务器的主机名
3、在百度云服务器上设置hosts文件
[root@rabbitmq_192_168_6_42 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
192.168.6.42 rabbitmq_192_168_6_42
192.168.6.43 rabbitmq_192_168_6_43
4、安装完成软件后,以下是常用也是安装好后要执行的命令
[root@rabbitmq_192_168_6_42 ~]# rabbitmq-server -deched & --后台启动服务 [root@rabbitmq_192_168_6_42 ~]# rabbitmqctl start_app --启动服务 [root@rabbitmq_192_168_6_42 ~]# rabbitmqctl stop_app --关闭服务 [root@rabbitmq_192_168_6_42 ~]# rabbitmq-plugins enable rabbitmq_management --启动web管理插件 [root@rabbitmq_192_168_6_42 ~]# rabbitmqctl add_user admin 2018_mgame --添加用户,密码 [root@rabbitmq_192_168_6_42 ~]# rabbitmqctl set_user_tags admin administrator --设置zlh为administrator权限
5、在执行完rabbitmq-server -deched &命令后如果下面6为0,则代表需要启动web管理插件
详细的命令请查询官网
那具体rabbitmqctl 的命令详细还要看官网文档:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html
6、如果需要修改rabbitmq的数据及日志目录需要创建如下两个文件
[root@rabbitmq_192_168_6_43 rabbitmq]# pwd
/etc/rabbitmq
[root@rabbitmq_192_168_6_43 rabbitmq]# ll
total 44
-rw-r--r-- 1 root rabbitmq 23 Feb 26 17:34 enabled_plugins
-rw-r--r-- 1 root rabbitmq 33099 Feb 26 17:29 rabbitmq.config
-rw-r--r-- 1 root rabbitmq 542 Feb 26 17:27 rabbitmq-env.conf
其中rabbitmq.config文件来自于
[root@rabbitmq_192_168_6_43 ~]# find / -name *rabbitmq.config*
/usr/share/doc/rabbitmq-server-3.7.12/rabbitmq.config.example
[root@rabbitmq_192_168_6_43 ~]# cp -rp /usr/share/doc/rabbitmq-server-3.7.12/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
而rabbitmq-env.conf文件内容如下:其中根据需要设置并开启相关的设置
[root@rabbitmq_192_168_6_43 ~]# cat /etc/rabbitmq/rabbitmq-env.conf #CONFIG_FILE=/etc/rabbitmq/rabbitmq #RABBITMQ_NODE_IP_ADDRESS= //IP地址,空串bind所有地址,指定地址bind指定网络接口 #RABBITMQ_NODE_PORT= //TCP端口号,默认是5672 #RABBITMQ_NODENAME= //节点名称。默认是rabbit #CONFIG_FILE=/etc/rabbitmq/rabbitmq #MNESIA_BASE=/home/work/server/rabbitmq/mnesia #LOG_BASE=/home/work/server/rabbitmq/log #PLUGINS_DIR=/etc/rabbitmq #NODENAME=rabbit #NODE_PORT=5672 RABBITMQ_MNESIA_BASE=/home/work/server/rabbitmq/mnesia RABBITMQ_LOG_BASE=/home/work/server/rabbitmq/log
二、普通集群搭建步骤
1、说明
由于rabbitmq集群是依附于erlang的集群进行工作的,所以在上述安装erlang的集群镜像。((.erlang.cookie是erlang分布式的token文件,集群内所有的设备要持有相同的.erlang.cookie文件才允许彼此通信)
2、查找 .erlang.cookie文件
find / -name *.cookie
[root@rabbitmq_192_168_6_42 ~]# find / -name *.cookie
/var/lib/rabbitmq/.erlang.cookie
3、将查找到的.erlang.cookie文件,copy到另外一台服务器上
scp /var/lib/rabbitmq/.erlang.cookie 192.168.6.43:/var/lib/rabbitmq/
4、复制完成后,修改文件权限
chmod 600 /var/lib/rabbitmq/.erlang.cookie
5、文件复制完成后继续重启节点服务并且查看状态
[root@rabbitmq_192_168_6_43 ~]# /etc/init.d/rabbitmq-server restart
[root@rabbitmq_192_168_6_43 ~]# /etc/init.d/rabbitmq-server status
三、创建集群模式
1、设置rabbit@rabbitmq_192_168_6_42为集群主节点,在节点rabbit@rabbitmq_192_168_6_43上执行如下命令以加入集群 (其中 --ram指定内存节点类型,--disc指定磁盘节点类型) rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbitmq_192_168_6_42 rabbitmqctl start_app 2、检查集群状态 rabbitmqctl cluster_status 状态解读: 3、移除集群节点 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app 4、修改节点类型 rabbitmqctl stop_app rabbitmqctl change_cluster_node_type disc rabbitmqctl start_app 5、增加节点 停止所有节点 RabbitMQ 服务,然后使用 detached 参数独立运行,这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序 rabbitmqctl stop rabbitmq-server -detached rabbitmqctl cluster_status 6、设置账号及权限 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
四、haproxy的搭建
主要是配置文件,文件内容如下:
###########全局配置######### global log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出] log 127.0.0.1 local1 debug #定义haproxy 日志级别[error warringinfo debug] daemon #以后台形式运行harpoxy nbproc 1 #设置进程数量 maxconn 4096 #默认最大连接数,需考虑ulimit-n限制 #user haproxy #运行haproxy的用户 #group haproxy #运行haproxy的用户所在的组 #pidfile /var/run/haproxy.pid #haproxy 进程PID文件 #ulimit-n 819200 #ulimit 的数量限制 #chroot /usr/share/haproxy #chroot运行路径 #debug #haproxy 调试级别,建议只在开启单进程的时候调试 #quiet chroot /home/work/server/haproxy pidfile /home/work/server/haproxy/haproxy_rabbitmq_5672.pid user work group work #nbproc 2 daemon stats socket /home/work/server/haproxy/stats ########默认配置############ defaults log global mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK option tcplog #httplog #日志类别,采用httplog option dontlognull #不记录健康检查日志信息 retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置 #option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现 #option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #心跳检测超时 #timeout http-keep-alive10s #默认持久连接超时时间 #timeout http-request 10s #默认http请求超时时间 #timeout queue 1m #默认队列超时时间 balance roundrobin #设置默认负载均衡方式,轮询方式 #balance source #设置默认负载均衡方式,类似于nginx的ip_hash #balnace leastconn #设置默认负载均衡方式,最小连接数 ########统计页面配置######## listen stats bind 0.0.0.0:10800 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称 mode http #http的7层模式 option httplog #采用http日志格式 log 127.0.0.1 local0 err #错误日志记录 maxconn 10 #默认的最大连接数 stats refresh 30s #统计页面自动刷新时间 stats uri /stats #统计页面url stats realm XingCloud\ Haproxy #统计页面密码框上提示文本 stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名 stats auth Frank:Frank #设置监控页面的用户和密码:Frank stats hide-version #隐藏统计页面上HAProxy的版本信息 stats admin if TRUE #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本) stats enable frontend SOA_Rabbitmq_frontend bind 0.0.0.0:35672 mode tcp option clitcpka timeout client 100m maxconn 10000 default_backend SOA_Rabbitmq_Backend backend SOA_Rabbitmq_Backend mode tcp timeout queue 100m timeout server 300m option srvtcpka option redispatch fullconn 10000 balance roundrobin option tcp-check server rabbitmq_disk 192.168.6.44:5672 weight 3 maxconn 10000 check port 5672 inter 1000 rise 1 fall 2 backup server rabbitmq_ram 192.168.6.43:5672 weight 3 maxconn 10000 check port 5672 inter 1000 rise 1 fall 2
关于压力测试及haproxy的切换,请阅读 “PerfTest压测rabbitmq” 文档