Routing

RabbitMQ 集群安装

一、linux环境准备
1)erlang
2)配置所需的hostname,步骤详见,“附录一”
   保证(1)master机器能用hostname ping通slave机器;
       (2)slave机器能用hostname ping通master机器。

二、RabbitMQ下载,及环境配置
1)获得安装包
下载地址:http://www.rabbitmq.com/download.html
下载.tar.gz文件,到指定目录,例如:/software/rabbitmqinaction
解压
$ tar -xzvf ***.tar.gz
$ cd rabbitmq_server-2.7.1/

2)设置文件结构
$mkdir -p /var/log/rabbitmq
$mkdir -p /var/lib/rabbitmq/mnesia/rabbit

3)启动
$ rabbitmq_server-2.7.1/sbin/rabbitmq-server

没有error的话就说明正常启动了。

如果有NXDOMAIN error,请查看附录二,NXDOMAIN错误解决办法。

4)erlang集群
关键:erlang集群需要设置同样的cookie

在master机器上
master$ find / -name .erlang.cookie
查看 .erlang.cookie里面的cookie值,复制cookie值备用。

在salve01机器上
slave01$ chmod 700 .erlang.cookie
slave01$ echo -n "master机器上.erlang.cookie的值" > /root/.erlang.cookie
slave01$ chmod 400 .erlang.cookie

salve02,salve03...同上。

5)RabbitMQ集群,文档详见:http://www.rabbitmq.com/clustering.html
停服务,将刚才启动的rabbitMQ停掉。

第一步:三台机器分别下载,并解压
1) rabbitmq-server-generic-unix-2.8.2.tar.gz 下载到 /opt,并解压,进入rabbitmq_server-2.8.2

第二步:三台机器设置hosts
如下
10.10.10.210
/ets/hosts
10.10.10.211 cent6-211
10.10.10.212 cent6-212

10.10.10.211
/ets/hosts
10.10.10.210 cent6-210
10.10.10.212 cent6-212

10.10.10.212
/ets/hosts
10.10.10.210 cent6-210
10.10.10.211 cent6-211

第三步:启动
在10.10.10.210上,进入目录/opt/rabbitmq_server-2.8.2
1) sbin/rabbitmq-server,此时在/root/下生成 .erlang.cookie文件
2)将/root/.erlang.cookie文件scp到211,212,并在三台机器上讲此文件设置为chmod 400权限
3) 210上停止,刚才启动的rabbit

第四步:集群
在10.10.10.210上
sbin/rabbitmq-server -detached

在10.10.10.211上
sbin/rabbitmq-server -detached
sbin/rabbitmqctl stop_app
sbin/rabbitmqctl reset
sbin/rabbitmqctl cluster rabbit@cent6-210 rabbit@cent6-211
sbin/rabbitmqctl start_app
sbin/rabbitmqctl status
sbin/rabbitmqctl cluster_status

在10.10.10.212上
sbin/rabbitmq-server -detached
sbin/rabbitmqctl stop_app
sbin/rabbitmqctl reset
sbin/rabbitmqctl cluster rabbit@cent6-210 rabbit@cent6-212
sbin/rabbitmqctl start_app
sbin/rabbitmqctl status
sbin/rabbitmqctl cluster_status

至此启动完毕


附录一,配置主机hostname
1)vim /etc/sysconfig/network
修改
HOSTNAME=master

2)vim /etc/hosts
修改
127.0.0.1 master

3)liunx命令行输入
hostname master
更改hostname

4)liunx命令行输入
hostname,如果出现master,则说明设置成功。

附录一,参考
http://community.webfaction.com/questions/2366/can-i-use-rabbit-mq-on-the-shared-servers
http://serverfault.com/questions/225795/error-when-installing-rabbitmq-server-on-ubuntu-10-10

附录二,NXDOMAIN错误解决办法
以master为例

1) 根据附录一,设置好hostname,并使用$hostname,结果为master。
2) $vim  rabbitmq解压目录/sbin/rabbitmq-env

增加
NODENAME=rabbit@master
NODE_IP_ADDRESS=127.0.0.1

保存退出。

启动RabbitMQ
master$ rabbitmq-server -detached

不再报错。

附录二,参考http://serverfault.com/questions/225795/error-when-installing-rabbitmq-server-on-ubuntu-10-10
<think>我们被要求查看Elasticsearch中与分片路由相关的参数配置。根据用户提供的引用,特别是引用[2]和引用[4],我们可以知道几个重要的路由参数。 引用[2]提到了`_routing.required`,这是一个索引级别的设置,要求在对文档进行索引、获取、更新或删除操作时必须提供路由值。 引用[4]提到了`index.routing_partition_size`参数,它用于将具有相同路由值的文档分布到多个分片上,以防止数据倾斜。 因此,我们需要查看的配置参数包括: 1. `_routing.required`:是否强制要求使用路由。 2. `index.routing_partition_size`:路由分区大小。 此外,我们可能还需要查看索引的分片数量(`number_of_shards`)和副本数量(`number_of_replicas`),因为它们也会影响路由。 在Elasticsearch中,我们可以通过以下方式查看索引的设置: - 使用`GET /{index_name}/_settings` API来查看索引的设置,其中会包含路由相关的参数。 但是,需要注意的是,`_routing`相关的设置是在映射(mapping)中定义的,所以我们也需要查看索引的映射。 因此,我们可以分两步: 1. 查看索引的设置(settings)以获取`index.routing_partition_size`等参数。 2. 查看索引的映射(mapping)以获取`_routing.required`参数。 具体操作: 1. 查看索引的设置: ```bash GET /{index_name}/_settings ``` 2. 查看索引的映射: ```bash GET /{index_name}/_mapping ``` 在映射中,我们可以在索引的顶级设置中看到`_routing`配置。 另外,如果用户想要查看集群中所有索引的这些设置,可以使用: ```bash GET /_all/_settings GET /_all/_mapping ``` 但是,请注意,由于数据量可能很大,我们可以指定具体的索引名。 示例: 假设我们有一个名为`my_index`的索引,我们可以这样查看: 1. 查看设置: ```bash GET /my_index/_settings ``` 在返回的结果中,我们关注`index.routing_partition_size`(如果设置了的话)。 2. 查看映射: ```bash GET /my_index/_mapping ``` 在映射的顶层,我们可能会看到类似这样的设置: ```json { "my_index": { "mappings": { "_routing": { "required": true }, ... // 字段映射 } } } ``` 另外,引用[3]提到了一个慢日志的配置,但这不是路由相关的,所以我们可以忽略。 因此,总结回答: 要查看Elasticsearch中与路由相关的参数配置,主要关注两个部分:索引设置(settings)和索引映射(mapping)。在索引设置中查看`index.routing_partition_size`参数,在索引映射中查看`_routing.required`参数。 操作步骤: 1. 使用`GET /{index_name}/_settings`查看设置,寻找`index.routing_partition_size`。 2. 使用`GET /{index_name}/_mapping`查看映射,寻找`_routing`配置,特别是`required`属性。 注意:如果索引很多,可以指定具体的索引名,或者使用通配符。 下面给出一个具体的例子: 假设我们有一个索引`my_index`,我们执行: **步骤1:获取设置** ```bash GET /my_index/_settings ``` 返回示例(注意:实际返回可能不包含路由分区大小,因为默认不设置): ```json { "my_index": { "settings": { "index": { "number_of_shards": "5", "number_of_replicas": "1", "routing_partition_size": "2", // 这就是我们要的参数 ... // 其他设置 } } } } ``` **步骤2:获取映射** ```bash GET /my_index/_mapping ``` 返回示例: ```json { "my_index": { "mappings": { "_routing": { "required": true }, "properties": { ... // 字段映射 } } } } ``` 如果`_routing.required`没有设置,那么在映射中可能不会出现`_routing`部分。 另外,需要注意的是,在Elasticsearch 7.x及以上版本中,映射类型被逐步移除,所以返回的映射结构可能略有不同,但`_routing`设置仍然在索引的顶级映射中。 因此,我们可以通过这两个API调用来获取路由相关的参数配置。 如果用户想要查看集群中所有索引的路由设置,可以使用`_all`代替具体的索引名,但要注意返回的数据量可能很大。 最后,如果用户想要查看默认的路由行为(即不使用自定义路由),那么默认情况下,路由是根据文档ID的哈希值来分配分片的,公式为: $$ \text{shard\_num} = (\text{hash}(\text{\_id}) \% \text{num\_primary\_shards}) $$ 而如果使用了路由(即指定了`routing`参数),则公式为: $$ \text{shard\_num} = (\text{hash}(\text{\_routing}) \% \text{num\_primary\_shards}) $$ 当同时设置了`index.routing_partition_size`时,公式变为(引用[4]): $$ \text{shard\_num} = (\text{hash}(\text{\_routing}) + \text{hash}(\text{\_id}) \% \text{routing\_partition\_size}) \% \text{num\_primary\_shards} $$ 这些公式在文档中没有直接以配置参数的形式存在,但它们是路由的核心机制。 所以,我们的回答就是指导用户如何通过API获取路由相关的配置参数。 相关问题: 1. 如何设置Elasticsearch索引的路由参数? 2. 使用自定义路由时如何避免数据分布不均? 3. 在Elasticsearch中,如何查看索引的分片数量? 4. 如何修改现有索引的路由设置? 5. 为什么在删除文档时必须指定路由? 注意:修改路由设置通常需要在创建索引时设置,或者使用索引模板。对于已有的索引,某些设置(如分片数量、路由分区大小)不能修改,而`_routing.required`可以在关闭索引后通过更新映射来修改(但需要谨慎操作)。 因此,我们生成的相关问题如上。</think>### Elasticsearch 路由参数配置查看指南 在Elasticsearch中,与分片路由相关的核心配置参数可通过以下方式查看: #### 1. **索引级路由参数** ```bash # 查看特定索引的路由配置 GET /your_index/_settings?include_defaults=true&filter_path=**.routing* ``` **关键参数解析**: - `index.routing_partition_size` 路由分区大小(引用[4]),决定相同路由值的文档分布范围: $$ \text{shard_num} = (\text{hash}(\_routing) + \text{hash}(\_id) \% \text{routing\_partition\_size}) \% \text{num\_primary\_shards} $$ 默认值:`1`(仅分配到单个分片) - `_routing.required` 是否强制要求操作时指定路由(引用[2]),返回示例: ```json { "your_index": { "settings": { "index": { "_routing": { "required": true // 强制使用路由参数 } } } } } ``` #### 2. **映射级路由设置** ```bash # 查看索引的映射路由配置 GET /your_index/_mapping?filter_path=**.routing ``` **返回结果示例**: ```json { "your_index": { "mappings": { "_routing": { "required": true // 映射层路由强制标识 } } } } ``` #### 3. **集群级路由控制** ```bash # 查看集群路由分配策略 GET /_cluster/settings?include_defaults=true&filter_path=*.cluster.routing* ``` **关键参数**: - `cluster.routing.allocation.enable`:分片分配开关(`all/none/primaries`) - `cluster.routing.rebalance.enable`:分片再平衡开关 --- ### 路由配置的最佳实践建议 1. **避免数据倾斜**(引用[4]) 当使用自定义路由时,通过调整`routing_partition_size`使文档分散到多个分片: ```bash PUT /your_index/_settings { "index.routing_partition_size": 3 // 扩展文档分布范围 } ``` 2. **强制路由验证**(引用[2]) 生产环境建议启用路由强制检查: ```json PUT /your_index { "mappings": { "_routing": { "required": true } // 防止路由遗漏 } } ``` 3. **路由与别名结合** 通过别名实现路由透明化(引用[2]): ```json POST /_aliases { "actions": [{ "add": { "index": "your_index", "alias": "search_alias", "routing": "auto" } }] } ``` --- ### 验证路由效果 ```bash # 查看文档实际路由位置 GET /your_index/_search?explain=true { "query": { "match_all": {} }, "size": 1 } ``` 在返回结果的`_explanation`中查看: ```json "shard": "[your_index][2]", // 实际分配的分片编号 "routing": "user123" // 使用的路由值 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值