zookeeper,kafka,redisクラスタ環境構築

15590 ワード

高同時環境構築
zookeeperクラスタ,kafkaクラスタ,redisクラスタの構築
zookeeperクラスタ
ダウンロードzookeeper
ダウンロード先:https://www.apache.org/dyn/closer.cgi/zookeeper/適切なミラーアドレスを選択し、zookeeperバージョンを選択します.3.4.10の例でダウンロードに成功した後、コマンドを実行し、解凍を完了します.
tar -xvf zookeeper-3.4.10.tar.gz

zookeeper構成
Zookeeperはクラスタモードを推奨し、奇数台のインスタンス配置を推奨します(zookeeperの特性:クラスタに半分以上のマシンが正常に動作している限り、クラスタ全体が対外的に利用可能であり、クラスタ配置2 nまたは2 n-1個のzookeeperインスタンスに対して、インスタンスダウンタイムの許容度は同じであり、いずれもn-1です.したがって、より効率的でリソースを節約するために、奇数台のインスタンス配置モードを推奨します).ここでは、3台のインスタンス配置を例に挙げる(ipアドレスは172.211.133.38 172.2133.39 172.21.3.40).
まず最初のzookeeperの例を構成し、ipアドレスは172.21.133.38であり、zookeeperの下のconfディレクトリに入り、zooを構成する.cfgファイル.構成情報は次のとおりです.
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/xw/zookeeper-3.4.10/data/data
dataLogDir=/home/xw/zookeeper-3.4.10/data/log

# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=172.21.133.38:2889:3889
server.2=172.21.133.39:2889:3889
server.3=172.21.133.40:2889:3889

パラメータの説明
  • tickTime:zookeeperで使用する基本時間単位、ミリ秒値.
  • initLimit:zookeeperクラスタには複数のserverが含まれ、そのうちの1つはleaderであり、クラスタ内の残りのserverはfollowerである.initLimitパラメータ構成初期化接続時、followerとleader間の最長同期待ち初期化時間.このときこのパラメータは10に設定、説明時間は10倍tickTime、すなわち10*2000=2000 ms=20 sに制限.
  • syncLimit:このパラメータは、Zookeeperクラスタにおけるleaderインスタンスとfollowerインスタンスとの間でメッセージ、要求、応答を送信する最大時間を構成する.このとき、このパラメータは5に設定、説明時間は5倍tickTime、すなわち10000 ms=10 sに制限.
  • dataDir:データディレクトリ.任意のディレクトリです./home/xw/zookeeper-3.4.10/data/data、すなわち現在のzookeeperインストールディレクトリの下の/data/dataディレクトリに設定します.
  • dataLogDir:logディレクトリは、同様に任意のディレクトリであってもよい.このパラメータが設定されていない場合は、dataDirと同じ設定が使用されます./home/xw/zookeeper-3.4.10/data/log、すなわち現在のzookeeperインストールディレクトリの下の/data/logディレクトリに設定します.
  • clientPort:client接続のポート番号を傍受する.クラスタモードでは、各インスタンスのclientPortが異なる必要があります.しかし、クラスタモードでは、推奨は同じであり、いずれも2181に構成される.
  • server.X=A:B:C Xは数字で、これが何番目のserverであることを示します.Aは、当該サーバが存在するIPアドレスである.Bサーバとクラスタ内のleaderがメッセージを交換するために使用するポートを構成する.Cリーダーを選択する際に使用するポートを設定します.クラスタモードを構成しているので、同じportを使用することをお勧めします.
  • myidファイル:クラスタモードとクラスタモードでは、設定したdataDirディレクトリの下にmyidファイルを作成し、対応する一意の識別番号を入力する必要があります.設定したばかりのZookeeperがクラスタの最初のテーブル、すなわちmyidの値を1に設定します.この数字はzooとしなければならない.cfgファイルのserver.Xの中のXは一つ一つ対応している.

  • 第二に、3台のzk配置
    3台のインスタンス配置(ipアドレスは172.21.133.38,172.21.133.39,172.21.133.40)が採用され、zookeeeperのインストールパスが一致し、ポートが一致しているため、プロファイルは完全に同じです.DataDirパスの下でmyidファイルを新規作成し、対応する一意の識別番号を入力します.ここで、172.211.133.38は11722.211.133.39は21722.211.133.40は3である.
    zookeeperの起動
    sh ./bin/zkServer.sh start
    

    プロセスが存在するかどうかを確認
    ps -ef  | grep $USER | grep zookeeper
    

    主従関係の表示
    sh ./bin/zkServer.sh status
    

    1台はリーダー、2台follower
    kafkaクラスタ
    kafkaをダウンロード
    ダウンロード先:http://kafka.apache.org/downloads対応するバージョンを見つけて、入ってからミラーをダウンロードしてダウンロードに成功した後、コマンドを実行して、解凍を完了します
    tar -xvf kafka_2.11-2.0.0.tgz 
    

    kafkaの起動はJava環境に依存するので、jdkをインストールし、Java環境変数を構成します.
    Java環境の設定
    Java環境が構成されていない場合は、次の手順に従います.
    vi ~/.profile
    

    ファイルを開いたら、ファイルの最後に次の項目を追加します.
    export JAVA_HOME=/usr/share/jdk1.8.0_91 
    export PATH=$JAVA_HOME/bin:$PATH 
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
    

    source~/.Profileは構成情報を有効にしてJava環境が構成に成功したかどうかを確認し、javaコマンドがサポートされているかどうかを直接入力し、サポートされている場合は構成に成功したことを示します.
    kafka構成
    kafkaはzookeeperを持参しており、ここでは上に構築したzookeeperクラスタを使用して3台のインスタンス配置を採用しており、ipアドレスは172.211.133.4172.211.133.42172.21.133.43である.第1のkafkaインスタンスを構成する、まず第1のkafkaインスタンスconfigディレクトリに入り、serverを構成する.propertiesファイル.最も重要なパラメータは次のとおりです.
    broker.id=0  
    listeners=PLAINTEXT://172.21.133.41:9092
    log.dirs=/home/xw/kafka-logs
    zookeeper.connect=172.21.133.38:2181,172.21.133.39:2181,172.21.133.40:2181
    auto.create.topics.enable=true
    

    パラメータの説明
  • broker.id:Kafkaクラスタ内の現在のbrokerを示すidで、一意の
  • を保証する必要がある
  • listeners:配備されたbroker占有ip:port
  • log.dirs:現在のbrokerのlogs格納アドレス
  • を指定
  • zookeeper.connect:Zookeeperクラスタを指定します.upkafkaはZookeeperに依存し,構成情報,消費者状態,topic情報などの内容をZookeeperノードに書き込む.
  • auto.create.topics.enable:topic
  • の作成を許可するかどうか
    2台目、3台目のkafkaインスタンスは同じ構成で、それぞれの一意のbrokerを指定する必要がある.id、listeners.インストールパスがずっと続くとlog.ダースとzookeeperconnect構成は、3つのインスタンスで同じです.
    スタートkafka
    kafkaディレクトリに入り、次のコマンドを実行します.
    sh ./bin/kafka-server-start.sh -daemon ./config/server.properties
    

    プロセスが正常かどうかを確認
    ps -ef | grep $USER | grep kafka
    

    redisクラスタ
    sentinelによって三主三備を構築し、サーバーが足りないのは同じサービスに構築されているため、ポートだけで主を区別する:172.19.151.60:6377-6379備:172.19.151.60:6380-63381
    redisのダウンロード
    ダウンロード先:http://download.redis.io/releases/該当するバージョンを選択し、ダウンロードが完了したら、解凍します.
    tar -xvf redis-5.0.3.tar.gz
    

    コンパイルしてインストールし、redisディレクトリに入り、次のコマンドを実行します.
    make && make install
    

    またはインストールディレクトリを指定します(別のディレクトリのインストールを推奨します)
    make && make install PREFIX=/usr/local/workspaces/redis/redis1-6377/
    

    別の2台のredisサーバのインストール
    make install PREFIX=/usr/local/workspaces/redis/redis2-6378/
    
    make install PREFIX=/usr/local/workspaces/redis/redis3-6379/
    

    redisのインストールディレクトリに入り、log、data、etcの3つのディレクトリを新規作成します.
    cd /usr/local/workspaces/redis/redis1-6377/
    mkdir log
    mkdir data
    mkdir etc
    

    ソースパッケージディレクトリをredis.confとsentinel.conf redisインストールディレクトリのetcフォルダにコピー
    redisを変更します.confプロファイル
    主従構成は類似しており、一般的に主redisデータは永続化されず、redisからデータ永続化が行われ、主redis構成ファイル
    #          yes/no
    daemonize yes
    pidfile "/usr/local/workspaces/redis/redis1-6377/data/redis_6377.pid"
    #  IP  
    bind 172.19.151.60
    #    
    port 6377
    timeout 0
    tcp-keepalive 0
    #       debug notice warning verbose
    loglevel notice
    #      
    logfile "/usr/local/workspaces/redis/redis1-6377/log/redis_6377.log"
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename "dump.rdb"
    dir "/usr/local/workspaces/redis/redis1-6377/data"
    #       ,                           
    masterauth "000000"
    slave-serve-stale-data yes  
    slave-read-only yes  
    repl-disable-tcp-nodelay no  
    slave-priority 98
    #  redis   
    requirepass "000000" 
    appendonly yes  
    # appendfsync always  
    appendfsync everysec  
    # appendfsync no  
    no-appendfsync-on-rewrite no  
    auto-aof-rewrite-percentage 100  
    auto-aof-rewrite-min-size 64mb  
    lua-time-limit 5000  
    slowlog-log-slower-than 10000  
    slowlog-max-len 128  
    notify-keyspace-events ""  
    hash-max-ziplist-entries 512  
    hash-max-ziplist-value 64  
    list-max-ziplist-entries 512  
    list-max-ziplist-value 64  
    set-max-intset-entries 512  
    zset-max-ziplist-entries 128  
    zset-max-ziplist-value 64  
    activerehashing yes  
    client-output-buffer-limit normal 0 0 0  
    client-output-buffer-limit slave 256mb 64mb 60  
    client-output-buffer-limit pubsub 32mb 8mb 60  
    hz 10  
    aof-rewrite-incremental-fsync yes 
    

    redisプロファイルから、プライマリredisと最後にslaveofノードが増えただけです.
    #          yes/no
    daemonize yes
    pidfile "/usr/local/workspaces/redis/redis1-6380/data/redis_6380.pid"
    #  IP  
    bind 172.19.151.60
    #    
    port 6380
    timeout 0
    tcp-keepalive 0
    #       debug notice warning verbose
    loglevel notice
    #      
    logfile "/usr/local/workspaces/redis/redis1-6380/log/redis_6380.log"
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename "dump.rdb"
    dir "/usr/local/workspaces/redis/redis1-6380/data"
    #       ,                           
    masterauth "000000"
    slave-serve-stale-data yes  
    slave-read-only yes  
    repl-disable-tcp-nodelay no  
    slave-priority 98
    #  redis   
    requirepass "000000" 
    appendonly yes  
    # appendfsync always  
    appendfsync everysec  
    # appendfsync no  
    no-appendfsync-on-rewrite no  
    auto-aof-rewrite-percentage 100  
    auto-aof-rewrite-min-size 64mb  
    lua-time-limit 5000  
    slowlog-log-slower-than 10000  
    slowlog-max-len 128  
    notify-keyspace-events ""  
    hash-max-ziplist-entries 512  
    hash-max-ziplist-value 64  
    list-max-ziplist-entries 512  
    list-max-ziplist-value 64  
    set-max-intset-entries 512  
    zset-max-ziplist-entries 128  
    zset-max-ziplist-value 64  
    activerehashing yes  
    client-output-buffer-limit normal 0 0 0  
    client-output-buffer-limit slave 256mb 64mb 60  
    client-output-buffer-limit pubsub 32mb 8mb 60  
    hz 10  
    aof-rewrite-incremental-fsync yes 
    
    #       
    slaveof 172.19.151.60 6377
    

    redisの起動
    ./redis-server ./etc/redis.conf
    

    logログディレクトリにアクセスredis起動ログ情報を表示redis-cli接続redisで情報を表示
    #172.19.151.60 redis   IP  6377     000000    
    ./redis-cli -h 172.19.151.60 -p 6377 -a 000000
    
    #  redis   info      
    info
    

    別の数台のredisを構成し、起動します.
    sentinelを変更します.confプロファイル
    3台のメインredisのsentinelを修正すればいいので、3組のmasterを配置します.
    sentinel1 172.19.151.60:26377
    #    
    port 26377
    #      
    daemonize yes
    pidfile /usr/local/workspaces/redis/redis1-6377/data/redis-sentinel.pid
    #      
    dir "/usr/local/workspaces/redis/redis1-6377/data"
    protected-mode no
    #    
    logfile "/usr/local/workspaces/redis/redis1-6377/log/sentinel.log"
    sentinel current-epoch 839
    
    ######################### mymaster1 ################################
    #sentinel monitor    
    # quorum  sentinel         sentinel   master    slave   master   
    sentinel monitor mymaster1 172.19.151.60 6377 2
    # sentinel      
    sentinel down-after-milliseconds mymaster1 30000
    #      ,  180 
    sentinel failover-timeout mymaster1 180000
    #redis     
    sentinel auth-pass mymaster1 000000
    sentinel config-epoch mymaster1 15
    sentinel leader-epoch mymaster1 839
    # #    sentinel,          master sentinel
    sentinel known-sentinel mymaster1 172.19.151.60 26378
    sentinel known-sentinel mymaster1 172.19.151.60 26379
    
    ######################### mymaster2 ################################
    sentinel monitor mymaster2 172.19.151.60 6378 2
    sentinel down-after-milliseconds mymaster2 30000
    sentinel failover-timeout mymaster2 180000
    sentinel auth-pass mymaster2 000000
    sentinel config-epoch mymaster2 15
    sentinel leader-epoch mymaster2 839
    sentinel known-sentinel mymaster2 172.19.151.60 26378
    sentinel known-sentinel mymaster2 172.19.151.60 26379
    
    ######################### mymaster3 ################################
    sentinel monitor mymaster3 172.19.151.60 6379 2
    sentinel down-after-milliseconds mymaster3 30000
    sentinel failover-timeout mymaster3 180000
    sentinel auth-pass mymaster3 000000
    sentinel config-epoch mymaster3 15
    sentinel leader-epoch mymaster3 839
    sentinel known-sentinel mymaster3 172.19.151.60 26378
    sentinel known-sentinel mymaster3 172.19.151.60 26379
    

    sentinel2 172.19.151.60:26378
    port 26378
    #      
    daemonize yes
    pidfile /usr/local/workspaces/redis/redis2-6378/data/redis-sentinel.pid
    #      
    dir "/usr/local/workspaces/redis/redis2-6378/data"
    protected-mode no
    #    
    logfile "/usr/local/workspaces/redis/redis2-6378/log/sentinel.log"
    sentinel current-epoch 839
    
    #sentinel monitor    
    # quorum  sentinel         sentinel   master    slave   master   
    sentinel monitor mymaster1 172.19.151.60 6377 2
    # sentinel      
    sentinel down-after-milliseconds mymaster1 30000
    #      ,  180 
    sentinel failover-timeout mymaster1 180000
    #redis     
    sentinel auth-pass mymaster1 000000
    sentinel config-epoch mymaster1 15
    sentinel leader-epoch mymaster1 839
    # #    sentinel,          master sentinel
    sentinel known-sentinel mymaster 172.19.151.60 26377
    sentinel known-sentinel mymaster 172.19.151.60 26379
    
    ######################### mymaster2 ################################
    sentinel monitor mymaster2 172.19.151.60 6378 2
    sentinel down-after-milliseconds mymaster2 30000
    sentinel failover-timeout mymaster2 180000
    sentinel auth-pass mymaster2 000000
    sentinel config-epoch mymaster2 15
    sentinel leader-epoch mymaster2 839
    sentinel known-sentinel mymaster2 172.19.151.60 26377
    sentinel known-sentinel mymaster2 172.19.151.60 26379
    
    ######################### mymaster3 ################################
    sentinel monitor mymaster3 172.19.151.60 6379 2
    sentinel down-after-milliseconds mymaster3 30000
    sentinel failover-timeout mymaster3 180000
    sentinel auth-pass mymaster3 000000
    sentinel config-epoch mymaster3 15
    sentinel leader-epoch mymaster3 839
    sentinel known-sentinel mymaster3 172.19.151.60 26377
    sentinel known-sentinel mymaster3 172.19.151.60 26379
    

    sentinel3 172.19.151.60:26379
    port 26379
    #      
    daemonize yes
    pidfile /usr/local/workspaces/redis/redis3-6379/data/redis-sentinel.pid
    #      
    dir "/usr/local/workspaces/redis/redis3-6379/data"
    protected-mode no
    #    
    logfile "/usr/local/workspaces/redis/redis3-6379/log/sentinel.log"
    sentinel current-epoch 839
    
    #sentinel monitor    
    # quorum  sentinel         sentinel   master    slave   master   
    sentinel monitor mymaster1 172.19.151.60 6377 2
    # sentinel      
    sentinel down-after-milliseconds mymaster1 30000
    #      ,  180 
    sentinel failover-timeout mymaster1 180000
    #redis     
    sentinel auth-pass mymaster1 000000
    sentinel config-epoch mymaster1 15
    sentinel leader-epoch mymaster1 839
    # #    sentinel,          master sentinel
    sentinel known-sentinel mymaster 172.19.151.60 26377
    sentinel known-sentinel mymaster 172.19.151.60 26378
    
    ######################### mymaster2 ################################
    sentinel monitor mymaster2 172.19.151.60 6378 2
    sentinel down-after-milliseconds mymaster2 30000
    sentinel failover-timeout mymaster2 180000
    sentinel auth-pass mymaster2 000000
    sentinel config-epoch mymaster2 15
    sentinel leader-epoch mymaster2 839
    sentinel known-sentinel mymaster2 172.19.151.60 26377
    sentinel known-sentinel mymaster2 172.19.151.60 26378
    
    ######################### mymaster3 ################################
    sentinel monitor mymaster3 172.19.151.60 6379 2
    sentinel down-after-milliseconds mymaster3 30000
    sentinel failover-timeout mymaster3 180000
    sentinel auth-pass mymaster3 000000
    sentinel config-epoch mymaster3 15
    sentinel leader-epoch mymaster3 839
    sentinel known-sentinel mymaster3 172.19.151.60 26377
    sentinel known-sentinel mymaster3 172.19.151.60 26378
    

    sentinelの起動
    1.redis-sentinelで起動し、redisディレクトリに入る
    ./redis-sentinel ./etc/sentinel.conf
    

    2.redis-serverで起動し、redisディレクトリに入る
    ./redis-server ./etc/sentinel.conf --sentinel