我有3台rabbitmq节点,rabbitmq版本3.6.5,linux为centos7,组成一个集群,并且使用了haproxy负载均衡策略,haproxy版本为1.7.5,haproxy配置文件如下:
# HAProxy Config for Local RabbitMQ Cluster
#/(hap.0) Logging options
global
log 127.0.0.1 local0 info
maxconn 4096
stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin
daemon
#/(hap.1) Load balancing defaults
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
#/(hap.2) Front-end IP for our consumers and producers
listen rabbitmq_local_cluster
bind 127.0.0.1:5670
timeout client 3h
timeout server 3h
#/(hap.3) Load balancing options
mode tcp
balance roundrobin
#/(hap.4) Cluster nodes HAProxy will be load balancing.
server rabbit1 10.100.73.241:5672 check inter 5000 rise 2 fall 3
server rabbit2 10.100.73.129:5672 check inter 5000 rise 2 fall 3
server rabbit3 10.100.73.216:5672 check inter 5000 rise 2 fall 3
#/(hap.5) Statistics page
listen private_monitoring
bind 10.100.73.241:8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
我用python写了一个脚本consumer.py文件,想测试集群,consumer.py连接集群部分内容如下:
if __name__ == "__main__":
AMQP_SERVER = sys.argv[1]
AMQP_PORT = int(sys.argv[2])
#/(ctc.3) Establish broker connection settings
creds_broker = pika.PlainCredentials("guest", "guest")
conn_params = pika.ConnectionParameters( AMQP_SERVER,
port=AMQP_PORT,
virtual_host="/",
credentials=creds_broker)
然后我在终端输入#python consumer.py localhost 5670 ,然后就报错ProbableAuthenticationError,意思就是登录失败
在网上查说是guest用户仅限于localhost连接,不能用于远程连接,要想用于远程连接,就必须修改rabbitmq配置文件
#cp /usr/share/doc/rabbitmq-server-3.6.2/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
#vi /etc/rabbitmq/rabbitmq.config
将%% {loopback_users, [<<"guest">>]}, 改为 {loopback_users, []},改完后重启,我按照网上说的做,结果rabbitmq启动不了,还报如下错误:
{"could not start kernel pid",application_controller,"error in config file "/etc/rabbitmq/rabbitm.config\" (296): syntax error before ']' "}
我又改回来,又可以启动了,后来又在网上搜到了另一个解决办法:
Starting with RabbitMQ 3.3 you need to create a new account to use remotely, andguest/guest
can only be used locally.
翻译过来就是从3.3版本开始远程连接只能新创建用户,guest只能本地连接,所以
远程访问rabbitmq:自己增加一个用户,步骤如下:
l1. 创建一个admin用户:sudo rabbitmqctl add_user admin 123123
l2. 设置该用户为administrator角色:sudo rabbitmqctl set_user_tags admin administrator
l3. 设置权限:sudo rabbitmqctl set_permissions -p '/' admin '.' '.' '.'
l4. 重启rabbitmq服务:sudo service rabbitmq-server restart
之后就能用admin用户远程连接rabbitmq server了。
创建完后,修改consumer.py文件,将连接信息改为如下
if __name__ == "__main__":
AMQP_SERVER = sys.argv[1]
AMQP_PORT = int(sys.argv[2])
#/(ctc.3) Establish broker connection settings
creds_broker = pika.PlainCredentials("admin", "123123")
conn_params = pika.ConnectionParameters( AMQP_SERVER,
port=AMQP_PORT,
virtual_host="/",
credentials=creds_broker)
在终端输入#python consumer.py localhost 5670
就ok了,连上了集群,通过了负载均衡测试,原来就是换一个账号,别用guest,如果你的集群是在一台机器上搭建的,即单机模式的话,guest说不定可以,我没试过