• elasticsearch和redis集群搭建文档(手动分配slave节点)-电商系统


    电商系统部署文档

    下周就彻底离职了,工作还没着落,悲催

    写在前面

    系统优化参数

    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    net.ipv4.tcp_max_tw_buckets = 60000
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_rmem = 4096 87380 4194304
    net.ipv4.tcp_wmem = 4096 16384 4194304
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.core.netdev_max_backlog = 500000
    net.core.somaxconn = 262144
    net.ipv4.tcp_max_orphans = 3276800
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 262144
    net.ipv4.tcp_timestamps = 1
    net.ipv4.tcp_synack_retries = 1
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_tw_recycle = 0
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    net.ipv4.tcp_fin_timeout = 1
    net.ipv4.tcp_keepalive_time = 1200
    net.ipv4.tcp_keepalive_probes=5 
    net.ipv4.tcp_keepalive_intvl=15 
    net.ipv4.ip_local_port_range = 1024 65535
    vm.swappiness = 0
    vm.max_map_count=262144
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.core.somaxconn = 32767
    vm.overcommit_memory=1
    
    echo never > /sys/kernel/mm/transparent_hugepage/enabled,并把这句话加入到/etc/rc.local中
    

    1、elasticsearch部署

    1.1 下载所需文件(3台机器都需要)

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm
    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.0/elasticsearch-analysis-ik-5.5.0.zip
    

    1.2 安装es和ik分词软件(3台机器都需要)

    yum install elasticsearch-5.5.0.rpm -y
    
    #安装完es后,把ik分词软件elasticsearch-analysis-ik-5.5.0.zip拷贝至/usr/share/elasticsearch/plugins目录,然后执行下面命令
    
    cd /usr/share/elasticsearch/plugins
    unzip elasticsearch-analysis-ik-5.5.0.zip -d ik && rm -f elasticsearch-analysis-ik-5.5.0.zip
    

    1.3 配置es

    如果是yum安装的java的话,就不需要设置,如果是自定义安装的java就需要设置,不然的话,es会报找不到java的错误

    下面是原文件/etc/sysconfig/elasticsearch

    ################################
    # Elasticsearch
    ################################
    
    # Elasticsearch home directory
    #ES_HOME=/usr/share/elasticsearch
    
    # Elasticsearch Java path
    #修改此处
    JAVA_HOME=/usr/local/java/jdk1.8.0_152
    
    # Elasticsearch configuration directory
    CONF_DIR=/etc/elasticsearch
    
    # Elasticsearch data directory
    #DATA_DIR=/var/lib/elasticsearch
    
    # Elasticsearch logs directory
    #LOG_DIR=/var/log/elasticsearch
    
    # Elasticsearch PID directory
    #PID_DIR=/var/run/elasticsearch
    
    # Additional Java OPTS
    #ES_JAVA_OPTS=
    
    # Configure restart on package upgrade (true, every other setting will lead to not restarting)
    #RESTART_ON_UPGRADE=true
    
    ################################
    # Elasticsearch service
    ################################
    
    # SysV init.d
    #
    # When executing the init script, this user will be used to run the elasticsearch service.
    # The default value is 'elasticsearch' and is declared in the init.d file.
    # Note that this setting is only used by the init script. If changed, make sure that
    # the configured user can read and write into the data, work, plugins and log directories.
    # For systemd service, the user is usually configured in file /usr/lib/systemd/system/elasticsearch.service
    #ES_USER=elasticsearch
    #ES_GROUP=elasticsearch
    
    # The number of seconds to wait before checking if Elasticsearch started successfully as a daemon process
    ES_STARTUP_SLEEP_TIME=5
    
    ################################
    # System properties
    ################################
    
    # Specifies the maximum file descriptor number that can be opened by this process
    # When using Systemd, this setting is ignored and the LimitNOFILE defined in
    # /usr/lib/systemd/system/elasticsearch.service takes precedence
    #MAX_OPEN_FILES=65536
    
    # The maximum number of bytes of memory that may be locked into RAM
    # Set to "unlimited" if you use the 'bootstrap.memory_lock: true' option
    # in elasticsearch.yml.
    # When using Systemd, the LimitMEMLOCK property must be set
    # in /usr/lib/systemd/system/elasticsearch.service
    #MAX_LOCKED_MEMORY=unlimited
    
    # Maximum number of VMA (Virtual Memory Areas) a process can own
    # When using Systemd, this setting is ignored and the 'vm.max_map_count'
    # property is set at boot time in /usr/lib/sysctl.d/elasticsearch.conf
    #MAX_MAP_COUNT=262144
    

    jvm配置

    /etc/elasticsearch/jvm.options,修改下面所示:因为这3台机器还装了redis集群,所以分配为16G内存

    -Xms16g
    -Xmx16g
    

    elasticsearch.yml配置

    在该文件下面增加下面的配置即可,另外2台服务器修改node.name和network.host这2个字段

    其中需要提前创建/data/elasticsearch,/var/log/elasticsearch目录,并授予elasticsearch.elasticsearch权限 chown -R elasticsearch.elasticsearch /data/elasticsearch && chown -R elasticsearch.elasticsearch /var/log/elasticsearch

    ## 157增加
    
    path.data: /data/elasticsearch
    path.logs: /var/log/elasticsearch
    cluster.name: shop-system
    node.name: ser5-167.tech-idc.net
    node.master: true
    node.data: true
    network.host: 10.80.5.167
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["10.80.5.167", "10.80.5.168","10.80.5.169"]
    discovery.zen.minimum_master_nodes: 2
    
    ## 158增加
    
    path.data: /data/elasticsearch
    path.logs: /var/log/elasticsearch
    cluster.name: shop-system
    node.name: ser5-168.tech-idc.net
    node.master: true
    node.data: true
    network.host: 10.80.5.168
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["10.80.5.167", "10.80.5.168","10.80.5.169"]
    discovery.zen.minimum_master_nodes: 2
    
    ## 159增加
    
    path.data: /data/elasticsearch
    path.logs: /var/log/elasticsearch
    cluster.name: shop-system
    node.name: ser5-169.tech-idc.net
    node.master: true
    node.data: true
    network.host: 10.80.5.169
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["10.80.5.167", "10.80.5.168","10.80.5.169"]
    discovery.zen.minimum_master_nodes: 2
    

    1.4 重启es设置开启自启动

    systemctl start elasticsearch
    systemctl enable elasticsearch
    

    2、redis-cluster集群部署

    2.1 下载所需文件

    wget http://download.redis.io/releases/redis-3.2.11.tar.gz(所有机器下载)
    wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz (其中一台机器即可)
    

    2.2 安装redis(所有机器执行)

    tar xvf redis-3.2.11.tar.gz -C /usr/local
    cd redis-3.2.11 && make && make install 
    
    安装完后验证
    [root@ser5-167 elasticsearch]# redis-cli --version
    redis-cli 3.2.11
    

    2.3 创建目录

    端口选择设置为7379-7380

    mkdir -p /data/redis/{7379,7380}/{conf,data} #在服务器10.80.5.157创建
    mkdir -p /data/redis/{7379,7380}/{conf,data} #在服务器10.80.5.158创建
    mkdir -p /data/redis/{7379,7380}/{conf,data} #在服务器10.80.5.159创建
    
    mkdir -p /var/log/redis && mkdir -p /var/run/redis (3台服务器上执行)
    
    

    2.4 配置redis.conf

    #157 7379端口
    
    daemonize yes
    pidfile "/var/run/redis/redis-7379.pid"
    dir "/data/redis/7379/data"
    port 7379
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.167
    loglevel notice
    logfile "/var/log/redis/redis-7379.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7379.conf"
    appendonly yes
    appendfilename "appendonly-7379.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    ===================================
    
    #157 7380端口
    
    daemonize yes
    pidfile "/var/run/redis/redis-7380.pid"
    dir "/data/redis/7380/data"
    port 7380
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.167
    loglevel notice
    logfile "/var/log/redis/redis-7380.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7380.conf"
    appendonly yes
    appendfilename "appendonly-7380.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    
    ================================
    # 158 7379端口
    
    daemonize yes
    pidfile "/var/run/redis/redis-7379.pid"
    dir "/data/redis/7379/data"
    port 7379
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.168
    loglevel notice
    logfile "/var/log/redis/redis-7379.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7379.conf"
    appendonly yes
    appendfilename "appendonly-7379.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    ======================================
    
    # 158 7380端口
    daemonize yes
    pidfile "/var/run/redis/redis-7380.pid"
    dir "/data/redis/7380/data"
    port 7380
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.168
    loglevel notice
    logfile "/var/log/redis/redis-7380.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7380.conf"
    appendonly yes
    appendfilename "appendonly-7380.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    
    =========================================
    # 159 7379端口
    
    daemonize yes
    pidfile "/var/run/redis/redis-7379.pid"
    dir "/data/redis/7379/data"
    port 7379
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.169
    loglevel notice
    logfile "/var/log/redis/redis-7379.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7379.conf"
    appendonly yes
    appendfilename "appendonly-7379.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    ====================================
    
    # 159 8086端口
    
    daemonize yes
    pidfile "/var/run/redis/redis-7380.pid"
    dir "/data/redis/7380/data"
    port 7380
    tcp-backlog 511
    tcp-keepalive 60
    bind 10.80.5.169
    loglevel notice
    logfile "/var/log/redis/redis-7380.log"
    databases 16
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file "node-7380.conf"
    appendonly yes
    appendfilename "appendonly-7380.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 80-100
    auto-aof-rewrite-min-size 64mb
    

    2.5 确认redis是否都起来了

    #157执行
    /usr/local/bin/redis-server /data/redis/7379/conf/redis.conf
    /usr/local/bin/redis-server /data/redis/7380/conf/redis.conf
    
    #158执行
    /usr/local/bin/redis-server /data/redis/7379/conf/redis.conf
    /usr/local/bin/redis-server /data/redis/7380/conf/redis.conf
    
    #159执行
    /usr/local/bin/redis-server /data/redis/7379/conf/redis.conf
    /usr/local/bin/redis-server /data/redis/7380/conf/redis.conf
    
    ps -ef|grep redis 
    

    2.6 安装ruby

    tar xvf ruby-2.3.1.tar.gz
    cd ruby-2.3.1 && ./configure --prefix=/usr/local/ruby && make && make install
    
    #编译成功后拷贝命令到/usr/local/bin/目录
    cd /usr/local/ruby/
    cp bin/ruby /usr/local/bin
    cp bin/gem /usr/local/bin
    
    #验证是否okay
    ruby --version
    
    #安装rubygem redis的依赖
    
    gem install redis
    
    #拷贝redis-trib.rb命令至/usr/local/bin
    
    cp /usr/local/reds-3.2.11/src/redis-trib.rb /usr/local/bin
    cp /usr/local/bin/gem /bin/
    

    2.7 初始化集群

    由于这是3台机器搭建的集群,需要手动配置slave节点,不然的话,可能master节点和slave节点在同一台机器上,要是那台机器宕机的话,集群失效,所以先不创建副本

    redis-trib.rb create --replicas 0 10.80.5.167:7379 10.80.5.168:7379 10.80.5.169:7379 
    

    然后再进去其中一台机器redis-cli -h 192.168.5.167 -p 7379执行cluster nodes,找到三个主的master id,master slave分配关系如下

    10.80.5.167:7379(master)  10.80.5.168:7380(slave)
    
    10.80.5.168:7379(master)  10.80.5.169:7380(slave)
    
    10.80.5.169:7379(master)  10.80.5.167:7380(slave)
    

    然后依次执行以下三条命令

    redis-trib.rb add-node --slave --master-id ea5a83279cffe4c6b7ee7532903978601ff56fd81 10.80.5.168:7380 10.80.5.167:7379
     
    redis-trib.rb add-node --slave --master-id 16efffee642caa4c3e16c137e0bdbe3b637e120dc 10.80.5.169:7380 10.80.5.168:7379
     
    redis-trib.rb add-node --slave --master-id 413eddde18e9d27dd62c69bc413c3c63eb05867b0 10.80.5.167:7380 10.80.5.169:7379
    

    2.8 坑

    至此,redis集群就搭建好了,遇到坑安装rubygem redis的依赖的时候,一开始安装的是3.3.0版本,无法初始化集群,后来直接安装最新版的就好了,gem install redis
    3台机器搭建的redis集群,redis-trib.rb自动创建集群的时候有可能master节点和slave节点在同一台机器上,所以需要手动分配,不知道有没有自动分配也能分散在不同机器上的方法
    

    3、redis集群密码设置

    方式一:修改所有Redis集群中的redis.conf文件加入:

    masterauth passwd123 
    requirepass passwd123 
    

    说明:这种方式需要重新启动各节点

    方式二:进入各个实例进行设置:

    ./redis-cli -c -p 7379 -h 10.80.5.167 
    config set masterauth passwd123 
    config set requirepass passwd123
    auth passwd123
    config rewrite 
    

    之后分别给各节点设置上密码。

    注意:各个节点密码都必须一致,否则Redirected就会失败, 推荐这种方式,这种方式会把密码写入到redis.conf里面去,且不用重启。

    用方式二修改密码,./redis-trib.rb check 10.80.5.157:7379执行时可能会报[ERR] Sorry, can't connect to node 10.80.5.157:7379,因为7379的redis.conf没找到密码配置。

    2、设置密码之后如果需要使用redis-trib.rb的各种命令
    解决办法:vim /usr/local/ruby/lib/ruby/gems/2.3.0/gems/redis-4.1.3/lib/redis/client.rb,然后修改password

    class Client
        DEFAULTS = {
          :url => lambda { ENV["REDIS_URL"] },
          :scheme => "redis",
          :host => "127.0.0.1",
          :port => 6379,
          :path => nil,
          :timeout => 5.0,
          :password => "passwd123",
          :db => 0,
          :driver => nil,
          :id => nil,
          :tcp_keepalive => 0,
          :reconnect_attempts => 1,
          :inherit_socket => false
        }
    

    注意:client.rb路径可以通过find命令查找:find / -name 'client.rb'

    参考

    https://www.cnblogs.com/linjiqin/p/7462822.html
    https://blog.csdn.net/u010533511/article/details/89390387
    
  • 相关阅读:
    关于分布式事务、两阶段提交协议、三阶提交协议(转)
    高并发下产生大量,随机,唯一的字符串,并输出到文件中
    地理空间距离计算优化_附近的人(转自美团技术博客)
    Web Deploy发布网站错误 检查授权和委派设置
    mssql查询所有上下级
    mssql语句递归查找所有下级
    挖洞技巧:任意账号密码重置
    MAC卸载java 12.0.2
    mac  安装brew时报错的问题及解决方式
    致远getshell
  • 原文地址:https://www.cnblogs.com/uglyliu/p/12675055.html
Copyright © 2020-2023  润新知