本文内容

  • 背景
  • ES集群中第一个master节点
  • ES slave节点

迁移到:http://www.bdata-cap.com/newsinfo/1712679.html

本文总结 Elasticsearch(以下简称ES)搭建集群的经验。以 Elasticsearch-rtf-2.2.1 版本为例。

我搭过三个集群:研究ELK时搭了一个;测试环境搭了一个;生产环境搭了一个。回想起来,搭建这三个集群时遇到的问题都不一样(我这么说,主要针对集群中节点发现,以及master问题,而不是es启动不起来或报错等问题)~

  • 研究ELK时,搭建ES集群倒是很顺利,原因很简单,先从一台机器开始的;
  • 可是测试环境搭建集群时,遭遇新加入节点一直不能发现 master 节点,或是集群节点出现都选举自己为 master 这两个情况,因为,节点都是陆续启动的,配置不当,是会出问题;
  • 等到在生产环境搭建集群时,遭遇无法选举出 master 节点的情况。ES head 和 kopf 两个插件都不可用,因为,既然集群没有选举出 master 节点,显然,整个集群是用不了的。而前面的情况,head 和 kopf 插件还是能用的,但能用,意义也不大~

总结起来,搭建集群,应该注意两个问题。首先,当然是 Elasticsearch.yml 配置是否正确;再就是你的操作方式。比如节点启动步骤等。

因为,如果搭建一个集群,那么必须保证集群有一个 master 节点,一般来说,第一个启动的节点,一定是 master。然后,分别启动其他节点,这些节点就会找到 master 节点,而 master 节点,也会发现这些节点。

  • 因此,配置集群中的第一个master节点,务必简单(简单到什么程度,后面再说),先启动它,它会立刻成为 master 节点。之后,再配置其他节点,最好直接告诉它们,可能的 master 节点是什么,然后启动他们,它们就会发现 master,而 master 节点,也会发现新加入的节点。
  • 否则,如果第一个启动的节点,配置过于复杂(条件苛刻),造成它不能成为 master 节点,那么,整个集群会失败。

稍后,你再配置节点时,可以采用更高级、复杂点的配置,就不会有什么问题了~

所以,我才强调,ES 集群中第一个 master 节点的配置务必简单,以后再调整。

背景


假设,我们想搭建这样一个名为 myfirstcluster 的ES集群,它有两个节点:

节点 主机名 是否为 master
192.168.1.2 es-01
192.168.1.3 es-02

ES集群中第一个master节点


最简单的 ES master 节点配置如下。该配置文件,是一个完整的 ES 配置文件,所以很长。我顺便翻译成了中文。

  1. 1: # ======================== Elasticsearch Configuration =========================

  1. 2: #

  1. 3: # 注意: Elasticsearch 大多数设置都有默认值.

  1. 4: # 在你着手调整和优化配置之前,确保你明白你期望什么,得到什么结果

  1. 5: #

  1. 6: # 配置一个节点的主要方式就是通过该文件. 该模板列出了大多数重要的设置.

  1. 7: #

  1. 8: # 更多配置选项参见如下链接:

  1. 9: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>

  1. 10: #

  1. 11: # ---------------------------------- 集群 -----------------------------------

  1. 12: #

  1. 13: # 集群名称:

  1. 14: #

  1. 15: cluster.name: mycluster

  1. 16: #

  1. 17: # ------------------------------------ 节点 ------------------------------------

  1. 18: #

  1. 19: # 节点名称:

  1. 20: #

  1. 21: node.name: es-01

  1. 22: node.master: true

  1. 23: node.data: true

  1. 24: #

  1. 25: # 为节点添加自定义属性,如机架:

  1. 26: #

  1. 27: # node.rack: r1

  1. 28: #

  1. 29: # ----------------------------------- 路径 ------------------------------------

  1. 30: #

  1. 31: # 存放数据的目录 (多个目录用逗号分隔):

  1. 32: #

  1. 33: # path.data: /path/to/data

  1. 34: #

  1. 35: # 日志文件目录:

  1. 36: #

  1. 37: # path.logs: /path/to/logs

  1. 38: #

  1. 39: # ----------------------------------- 内存 -----------------------------------

  1. 40: #

  1. 41: # 启动时锁定内存:

  1. 42: #

  1. 43: # bootstrap.mlockall: true

  1. 44: #

  1. 45: # 确保设置了 `ES_HEAP_SIZE` 环境变量, 大小为系统内存的一半,

  1. 46: # 该值为线程可以使用的最大内存

  1. 47: #

  1. 48: # 当系统正在交换内存时, Elasticsearch 执行性能会很差.

  1. 49: #

  1. 50: # ---------------------------------- 网络 -----------------------------------

  1. 51: #

  1. 52: # 设置绑定地址到指定IP (IPv4 or IPv6):

  1. 53: #

  1. 54: network.host: 192.168.1.2

  1. 55: #

  1. 56: # 设置自定义 HTTP 端口:

  1. 57: http.port: 9200

  1. 58: # 集群内部通信端口:

  1. 59: tcp.port: 9300

  1. 60: #

  1. 61: # 更多信息, 参见如下链接:

  1. 62: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>

  1. 63: #

  1. 64: # --------------------------------- 节点发现 ----------------------------------

  1. 65: #

  1. 66: # 当新节点加入时,传递一个主机的初始化列表以完成节点发现:

  1. 67: # 默认主机列表为 ["127.0.0.1", "[::1]"]

  1. 68: #

  1. 69: discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300"]

  1. 70: #

  1. 71: # 通过配置大多数节点阻止脑裂现象 (数量: 节点总数量 / 2 + 1):

  1. 72: #

  1. 73: # discovery.zen.minimum_master_nodes: 2

  1. 74: #

  1. 75: # 更多信息, 参见如下链接:

  1. 76: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>

  1. 77: #

  1. 78: # ---------------------------------- 网关 -----------------------------------

  1. 79: #

  1. 80: # 当整个集群重新启动后, 只有 N 个节点启动了, 集群才会恢复,否则将阻塞:

  1. 81: #

  1. 82: # gateway.recover_after_nodes: 2

  1. 83: #

  1. 84: # 更多信息, 参见如下链接:

  1. 85: # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>

  1. 86: #

  1. 87: # ---------------------------------- 其他 -----------------------------------

  1. 88: #

  1. 89: # 禁止在一个系统上启动多个节点:

  1. 90: #

  1. 91: # node.max_local_storage_nodes: 1

  1. 92: #

  1. 93: # 当删除 index 是必需显式名称:

  1. 94: #

  1. 95: # action.destructive_requires_name: true

  1. 96: 

  1. 97: index:

  1. 98: analysis:

  1. 99: tokenizer:

  1. 100: my_pinyin:

  1. 101: type: pinyin

  1. 102: first_letter: prefix

  1. 103: padding_char: ''

  1. 104: pinyin_first_letter:

  1. 105: type: pinyin

  1. 106: first_letter: only

  1. 107: mmseg_maxword:

  1. 108: type: mmseg

  1. 109: seg_type: max_word

  1. 110: mmseg_complex:

  1. 111: type: mmseg

  1. 112: seg_type: complex

  1. 113: mmseg_simple:

  1. 114: type: mmseg

  1. 115: seg_type: simple

  1. 116: semicolon_spliter:

  1. 117: type: pattern

  1. 118: pattern: ";"

  1. 119: pct_spliter:

  1. 120: type: pattern

  1. 121: pattern: "[%]+"

  1. 122: ngram_1_to_2:

  1. 123: type: nGram

  1. 124: min_gram: 1

  1. 125: max_gram: 2

  1. 126: ngram_1_to_3:

  1. 127: type: nGram

  1. 128: min_gram: 1

  1. 129: max_gram: 3

  1. 130: filter:

  1. 131: ngram_min_3:

  1. 132: max_gram: 10

  1. 133: min_gram: 3

  1. 134: type: nGram

  1. 135: ngram_min_2:

  1. 136: max_gram: 10

  1. 137: min_gram: 2

  1. 138: type: nGram

  1. 139: ngram_min_1:

  1. 140: max_gram: 10

  1. 141: min_gram: 1

  1. 142: type: nGram

  1. 143: min2_length:

  1. 144: min: 2

  1. 145: max: 4

  1. 146: type: length

  1. 147: min3_length:

  1. 148: min: 3

  1. 149: max: 4

  1. 150: type: length

  1. 151: pinyin_first_letter:

  1. 152: type: pinyin

  1. 153: first_letter: only

  1. 154: analyzer:

  1. 155: lowercase_keyword:

  1. 156: type: custom

  1. 157: filter:

  1. 158: - lowercase

  1. 159: tokenizer: standard

  1. 160: lowercase_keyword_ngram_min_size1:

  1. 161: type: custom

  1. 162: filter:

  1. 163: - lowercase

  1. 164: - stop

  1. 165: - trim

  1. 166: - unique

  1. 167: tokenizer: nGram

  1. 168: lowercase_keyword_ngram_min_size2:

  1. 169: type: custom

  1. 170: filter:

  1. 171: - lowercase

  1. 172: - min2_length

  1. 173: - stop

  1. 174: - trim

  1. 175: - unique

  1. 176: tokenizer: nGram

  1. 177: lowercase_keyword_ngram_min_size3:

  1. 178: type: custom

  1. 179: filter:

  1. 180: - lowercase

  1. 181: - min3_length

  1. 182: - stop

  1. 183: - trim

  1. 184: - unique

  1. 185: tokenizer: ngram_1_to_3

  1. 186: lowercase_keyword_ngram:

  1. 187: type: custom

  1. 188: filter:

  1. 189: - lowercase

  1. 190: - stop

  1. 191: - trim

  1. 192: - unique

  1. 193: tokenizer: ngram_1_to_3

  1. 194: lowercase_keyword_without_standard:

  1. 195: type: custom

  1. 196: filter:

  1. 197: - lowercase

  1. 198: tokenizer: keyword

  1. 199: lowercase_whitespace:

  1. 200: type: custom

  1. 201: filter:

  1. 202: - lowercase

  1. 203: tokenizer: whitespace

  1. 204: ik:

  1. 205: alias:

  1. 206: - ik_analyzer

  1. 207: type: ik

  1. 208: ik_max_word:

  1. 209: type: ik

  1. 210: use_smart: true

  1. 211: ik_smart:

  1. 212: type: ik

  1. 213: use_smart: true

  1. 214: mmseg:

  1. 215: alias:

  1. 216: - mmseg_analyzer

  1. 217: type: mmseg

  1. 218: mmseg_maxword:

  1. 219: type: custom

  1. 220: filter:

  1. 221: - lowercase

  1. 222: tokenizer: mmseg_maxword

  1. 223: mmseg_complex:

  1. 224: type: custom

  1. 225: filter:

  1. 226: - lowercase

  1. 227: tokenizer: mmseg_complex

  1. 228: mmseg_simple:

  1. 229: type: custom

  1. 230: filter:

  1. 231: - lowercase

  1. 232: tokenizer: mmseg_simple

  1. 233: comma_spliter:

  1. 234: type: pattern

  1. 235: pattern: "[,|\\s]+"

  1. 236: pct_spliter:

  1. 237: type: pattern

  1. 238: pattern: "[%]+"

  1. 239: custom_snowball_analyzer:

  1. 240: type: snowball

  1. 241: language: English

  1. 242: simple_english_analyzer:

  1. 243: type: custom

  1. 244: tokenizer: whitespace

  1. 245: filter:

  1. 246: - standard

  1. 247: - lowercase

  1. 248: - snowball

  1. 249: edge_ngram:

  1. 250: type: custom

  1. 251: tokenizer: edgeNGram

  1. 252: filter:

  1. 253: - lowercase

  1. 254: pinyin_ngram_analyzer:

  1. 255: type: custom

  1. 256: tokenizer: my_pinyin

  1. 257: filter:

  1. 258: - lowercase

  1. 259: - nGram

  1. 260: - trim

  1. 261: - unique

  1. 262: pinyin_first_letter_analyzer:

  1. 263: type: custom

  1. 264: tokenizer: pinyin_first_letter

  1. 265: filter:

  1. 266: - standard

  1. 267: - lowercase

  1. 268: pinyin_first_letter_keyword_analyzer:

  1. 269: alias:

  1. 270: - pinyin_first_letter_analyzer_keyword

  1. 271: type: custom

  1. 272: tokenizer: keyword

  1. 273: filter:

  1. 274: - pinyin_first_letter

  1. 275: - lowercase

  1. 276: path_analyzer: #used for tokenize :/something/something/else

  1. 277: type: custom

  1. 278: tokenizer: path_hierarchy

  1. 279: 

  1. 280: #index.analysis.analyzer.default.type: mmseg

  1. 281: index.analysis.analyzer.default.type: ik

  1. 282: 

  1. 283: # rtf.filter.redis.host: 127.0.0.1

  1. 284: # rtf.filter.redis.port: 6379

说明:

  • 第15行,指定集群名称 myfirstcluster;
  • 第21行,指定节点名称,最好写主机名;
  • 第22和23行,指定该是否可能为master节点,以及是否为数据节点。ES的所说master节点,其实弱化了很多,仅仅就是为了节点发现和选举master节点而已,它甚至都可以不用来保存数据。

因此,看你的规划,完全可以让一个 master 节点,不保存任何数据;

  • 第54行,指定节点IP地址,192.168.1.2;
  • 第57行,指定HTTP端口,比如,head、kopf插件等插件,都使用该端口。事实上,你可以指定从 92开头的任何端口;
  • 第59行,指定集群内部通信的端口,比如,节点发现都使用该端口。事实上,你可以指定93开头的任何端口,该行也可以写成“transport.tcp.port: 9300”;

这7行配置,在我看来,针对集群中第一个master节点,必须配置正确的。其他配置,可以暂时不用。

其中,第57行和第59行,实际上,一台物理机,是可以运行多个 ES,只需要指定不同的配置文件即可。

  • 第69行,指定节点初始化列表,因为该节点是集群第一台机器,并且要当 master,所以写”127.0.0.1:9300”,端口号,就是你在第59行指定的端口。相关资料显示,也可以不指定端口,那是不是会93开头的所有端口扫描一下呢?;
  • 从97行开始,是配置ES的分词。

slave 节点


Slave 节点配置如下。该配置文件内容只列出了配置项,但是是完整的。

  1. 1: # ======================== Elasticsearch Configuration =========================

  1. 2: #

  1. 3: # ---------------------------------- Cluster -----------------------------------

  1. 4: #

  1. 5: # Use a descriptive name for your cluster:

  1. 6: #

  1. 7: cluster.name: myfirstcluster

  1. 8: #

  1. 9: # ------------------------------------ Node ------------------------------------

  1. 10: #

  1. 11: # Use a descriptive name for the node:

  1. 12: #

  1. 13: node.name: es-02

  1. 14: node.master: true

  1. 15: node.data: true

  1. 16: #

  1. 17: # ----------------------------------- Paths ------------------------------------

  1. 18: #

  1. 19: # Path to directory where to store the data (separate multiple locations by comma):

  1. 20: #

  1. 21: # path.data: /path/to/data

  1. 22: #

  1. 23: # Path to log files:

  1. 24: #

  1. 25: # path.logs: /path/to/logs

  1. 26: #

  1. 27: # ----------------------------------- Memory -----------------------------------

  1. 28: #

  1. 29: # ...

  1. 30: #

  1. 31: # ---------------------------------- Network -----------------------------------

  1. 32: #

  1. 33: # Set the bind address to a specific IP (IPv4 or IPv6):

  1. 34: #

  1. 35: network.host: 192.168.1.3

  1. 36: #

  1. 37: # Set a custom port for HTTP:

  1. 38: #

  1. 39: http.port: 9200

  1. 40: transport.tcp.port: 9300

  1. 41: #

  1. 42: # --------------------------------- Discovery ----------------------------------

  1. 43: #

  1. 44: # Pass an initial list of hosts to perform discovery when new node is started:

  1. 45: # The default list of hosts is ["127.0.0.1", "[::1]"]

  1. 46: #

  1. 47: discovery.zen.ping.unicast.hosts: ["192.168.1.2:9300"]

  1. 48: #

  1. 49: # ---------------------------------- Gateway -----------------------------------

  1. 50: #

  1. 51: # ...

  1. 52: #

  1. 53: # ---------------------------------- Various -----------------------------------

  1. 54: # ...

  1. 55: 

  1. 56: index:

  1. 57: analysis:

  1. 58: tokenizer:

  1. 59: my_pinyin:

  1. 60: type: pinyin

  1. 61: first_letter: prefix

  1. 62: padding_char: ''

  1. 63: pinyin_first_letter:

  1. 64: type: pinyin

  1. 65: first_letter: only

  1. 66: mmseg_maxword:

  1. 67: type: mmseg

  1. 68: seg_type: max_word

  1. 69: mmseg_complex:

  1. 70: type: mmseg

  1. 71: seg_type: complex

  1. 72: mmseg_simple:

  1. 73: type: mmseg

  1. 74: seg_type: simple

  1. 75: semicolon_spliter:

  1. 76: type: pattern

  1. 77: pattern: ";"

  1. 78: pct_spliter:

  1. 79: type: pattern

  1. 80: pattern: "[%]+"

  1. 81: ngram_1_to_2:

  1. 82: type: nGram

  1. 83: min_gram: 1

  1. 84: max_gram: 2

  1. 85: ngram_1_to_3:

  1. 86: type: nGram

  1. 87: min_gram: 1

  1. 88: max_gram: 3

  1. 89: filter:

  1. 90: ngram_min_3:

  1. 91: max_gram: 10

  1. 92: min_gram: 3

  1. 93: type: nGram

  1. 94: ngram_min_2:

  1. 95: max_gram: 10

  1. 96: min_gram: 2

  1. 97: type: nGram

  1. 98: ngram_min_1:

  1. 99: max_gram: 10

  1. 100: min_gram: 1

  1. 101: type: nGram

  1. 102: min2_length:

  1. 103: min: 2

  1. 104: max: 4

  1. 105: type: length

  1. 106: min3_length:

  1. 107: min: 3

  1. 108: max: 4

  1. 109: type: length

  1. 110: pinyin_first_letter:

  1. 111: type: pinyin

  1. 112: first_letter: only

  1. 113: analyzer:

  1. 114: lowercase_keyword:

  1. 115: type: custom

  1. 116: filter:

  1. 117: - lowercase

  1. 118: tokenizer: standard

  1. 119: lowercase_keyword_ngram_min_size1:

  1. 120: type: custom

  1. 121: filter:

  1. 122: - lowercase

  1. 123: - stop

  1. 124: - trim

  1. 125: - unique

  1. 126: tokenizer: nGram

  1. 127: lowercase_keyword_ngram_min_size2:

  1. 128: type: custom

  1. 129: filter:

  1. 130: - lowercase

  1. 131: - min2_length

  1. 132: - stop

  1. 133: - trim

  1. 134: - unique

  1. 135: tokenizer: nGram

  1. 136: lowercase_keyword_ngram_min_size3:

  1. 137: type: custom

  1. 138: filter:

  1. 139: - lowercase

  1. 140: - min3_length

  1. 141: - stop

  1. 142: - trim

  1. 143: - unique

  1. 144: tokenizer: ngram_1_to_3

  1. 145: lowercase_keyword_ngram:

  1. 146: type: custom

  1. 147: filter:

  1. 148: - lowercase

  1. 149: - stop

  1. 150: - trim

  1. 151: - unique

  1. 152: tokenizer: ngram_1_to_3

  1. 153: lowercase_keyword_without_standard:

  1. 154: type: custom

  1. 155: filter:

  1. 156: - lowercase

  1. 157: tokenizer: keyword

  1. 158: lowercase_whitespace:

  1. 159: type: custom

  1. 160: filter:

  1. 161: - lowercase

  1. 162: tokenizer: whitespace

  1. 163: ik:

  1. 164: alias:

  1. 165: - ik_analyzer

  1. 166: type: ik

  1. 167: ik_max_word:

  1. 168: type: ik

  1. 169: use_smart: false

  1. 170: ik_smart:

  1. 171: type: ik

  1. 172: use_smart: true

  1. 173: mmseg:

  1. 174: alias:

  1. 175: - mmseg_analyzer

  1. 176: type: mmseg

  1. 177: mmseg_maxword:

  1. 178: type: custom

  1. 179: filter:

  1. 180: - lowercase

  1. 181: tokenizer: mmseg_maxword

  1. 182: mmseg_complex:

  1. 183: type: custom

  1. 184: filter:

  1. 185: - lowercase

  1. 186: tokenizer: mmseg_complex

  1. 187: mmseg_simple:

  1. 188: type: custom

  1. 189: filter:

  1. 190: - lowercase

  1. 191: tokenizer: mmseg_simple

  1. 192: comma_spliter:

  1. 193: type: pattern

  1. 194: pattern: "[,|\\s]+"

  1. 195: pct_spliter:

  1. 196: type: pattern

  1. 197: pattern: "[%]+"

  1. 198: custom_snowball_analyzer:

  1. 199: type: snowball

  1. 200: language: English

  1. 201: simple_english_analyzer:

  1. 202: type: custom

  1. 203: tokenizer: whitespace

  1. 204: filter:

  1. 205: - standard

  1. 206: - lowercase

  1. 207: - snowball

  1. 208: edge_ngram:

  1. 209: type: custom

  1. 210: tokenizer: edgeNGram

  1. 211: filter:

  1. 212: - lowercase

  1. 213: pinyin_ngram_analyzer:

  1. 214: type: custom

  1. 215: tokenizer: my_pinyin

  1. 216: filter:

  1. 217: - lowercase

  1. 218: - nGram

  1. 219: - trim

  1. 220: - unique

  1. 221: pinyin_first_letter_analyzer:

  1. 222: type: custom

  1. 223: tokenizer: pinyin_first_letter

  1. 224: filter:

  1. 225: - standard

  1. 226: - lowercase

  1. 227: pinyin_first_letter_keyword_analyzer:

  1. 228: alias:

  1. 229: - pinyin_first_letter_analyzer_keyword

  1. 230: type: custom

  1. 231: tokenizer: keyword

  1. 232: filter:

  1. 233: - pinyin_first_letter

  1. 234: - lowercase

  1. 235: path_analyzer: #used for tokenize :/something/something/else

  1. 236: type: custom

  1. 237: tokenizer: path_hierarchy

  1. 238: 

  1. 239: #index.analysis.analyzer.default.type: mmseg

  1. 240: index.analysis.analyzer.default.type: ik

说明:

  • 第7行,也是指定了集群名称;
  • 第13行,指定了节点名称为 es-02(主机名)
  • 第14和15行,指定了该节点可能成为 master 节点,还可以是数据节点;
  • 第35行,指定节点IP地址为 192.168.1.3;
  • 第39行,指定http端口,你使用head、kopf等相关插件使用的端口;
  • 第40行,集群内部通信端口,用于节点发现等;

上面的配置master也是这么配置的。

  • 第47行,跟master节点配置不一样了。这里直接告诉该的节点,可能的master节点是什么。

参考资料


ELK——Elasticsearch 搭建集群经验的更多相关文章

  1. ELK——Elasticsearch 搭建集群经验

    本文内容 背景 ES集群中第一个master节点 ES slave节点 本文总结 Elasticsearch(以下简称ES)搭建集群的经验.以 Elasticsearch-rtf-2.2.1 版本为例 ...

  2. 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

    笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装e ...

  3. Elastic Stack之ElasticSearch分布式集群yum方式搭建

    Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...

  4. 关于elasticsearch安装及搭建集群时候的错误

    1,在Windows上解压后启动elasticsearch后可能cmd中会抛出java 无法初始话异常,网上查询必须用的是jdk1.8以上,可是本人用的 就是jdk1.8啊,半天解决无果,最后重新安装 ...

  5. sentinel搭建redis集群经验总结

    一.protected-mode默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis node和se ...

  6. ES 31 - 从0开始搭建Elasticsearch生产集群

    目录 1 配置环境 1.1 服务器IP映射 1.2 配置各节点的ssh免密通信 1.3 安装JDK并配置环境变量 2 部署单节点服务 3 部署集群服务 4 启动集群中的所有节点 4.2 启动各个节点中 ...

  7. elasticsearch跨集群数据迁移

    写这篇文章,主要是目前公司要把ES从2.4.1升级到最新版本7.8,不过现在是7.9了,官方的文档:https://www.elastic.co/guide/en/elasticsearch/refe ...

  8. Elastic Stack之ElasticSearch分布式集群二进制方式部署

    Elastic Stack之ElasticSearch分布式集群二进制方式部署 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道ELK其实就是Elasticsearc ...

  9. 架构之路:nginx与IIS服务器搭建集群实现负载均衡(三)

    参考网址:https://blog.csdn.net/zhanghan18333611647/article/details/50811980 [前言] 在<架构之路:nginx与IIS服务器搭 ...

随机推荐

  1. 深入理解defer(上)defer基础

    深入理解 defer 分上下两篇文章,本文为上篇,主要介绍如下内容: 为什么需要 defer: defer 语法及语义: defer 使用要点: defer 语句中的函数到底是在 return 语句之 ...

  2. cisco

    配置ntp conf t ntp server 172.28.10.10 clock timezone Beijing 8 show clock 配置端口组 interface Port-channe ...

  3. MyBatis 使用 foreach 批量插入

    MyBatis 使用 foreach 批量插入 参考博文 老司机学习MyBatis之动态SQL使用foreach在MySQL中批量插入 使用MyBatis一次性插入多条数据时候可以使用 <for ...

  4. 使用表格 代替 txt文件(未完结)

    使用xlrd读取用户数据 首先创建一个xls文件 xlrd模块的简单使用 添加处理execl的接口: 使用excel生成测试报表

  5. Graph Embedding Review:Graph Neural Network(GNN)综述

    作者简介: 吴天龙  香侬科技researcher 公众号(suanfarensheng) 导言 图(graph)是一个非常常用的数据结构,现实世界中很多很多任务可以描述为图问题,比如社交网络,蛋白体 ...

  6. 利用Tengine在树莓派上跑深度学习网络

    树莓派是国内比较流行的一款卡片式计算机,但是受限于其硬件配置,用树莓派玩深度学习似乎有些艰难.最近OPENAI为嵌入式设备推出了一款AI框架Tengine,其对于配置的要求相比传统框架降低了很多,我尝 ...

  7. 【Mybatis】CDATA

    忽视内部尖括号那些东西

  8. [POJ3107]Godfather

    题目描述 Description Last years Chicago was full of gangster fights and strange murders. The chief of th ...

  9. ASP.NET Core 进程内(InProcess)托管

    ASP.NET Core 进程内(InProcess)托管 在 ASP.NET Core 中的进程内(InProcess)托管模型 什么是 Kestrel 服务器 当一个 ASP.NET Core 应 ...

  10. PKUSC2018题解

    PKUSC2018题解 真实排名 分别考虑第\(i\)个人翻倍和不翻倍的情况,组合数算一下即可,务必注意实现细节. 代码 最大前缀和 设\(sum_s\)表示集合\(\sum_{i\in s} a_i ...