精华内容
下载资源
问答
  • 多台机器zookeeper集群搭建

    千次阅读 2021-12-11 14:48:05
    @TOC多台机器zookeeper集群搭建 #docker安装跳过,可以参考博主之前的帖子 3台机器 1 10.0.0.7 2 10.0.0.8 3 10.0.0.9 ** 1 docker-compose.yml ** version: ‘2.3’ services: zk1: image: zookeeper:3.5 container...

    @TOC多台机器zookeeper集群搭建

    #docker安装跳过,可以参考博主之前的帖子

    3台机器
    1 10.0.0.7
    2 10.0.0.8
    3 10.0.0.9

    **

    1 docker-compose.yml

    **
    version: ‘2.3’
    services:
    zk1:
    image: zookeeper:3.5
    container_name: zk1
    environment:
    - TZ=“Asia/Shanghai”
    - ZOO_MY_ID=“1”
    volumes:
    - /data/zk/data:/data
    - /data/zk/data/log:/data/log
    - /data/zk/conf:/conf
    ports:
    - 2181:2181
    - 2888:2888
    - 3888:3888
    networks:
    - zk-network
    # network_mode: “host”

    networks:
    zk-network:
    driver: bridge

    2 zookeeper配置文件

    ,已10.0.0.7为例
    本机/data/zk/conf目录下
    vim zoo.cfg
    clientPort=2181
    dataDir=/data
    dataLogDir=/data/log
    tickTime=2000
    initLimit=5
    syncLimit=2
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=0
    maxClientCnxns=60
    server.1=0.0.0.0:2888:3888;2181 #也可以填写zk1,具体看网络方式
    server.2=10.0.0.8:2888:3888;2181
    server.3=10.0.0.9:2888:3888;2181

    3 log4j.properties

    zookeeper.root.logger=INFO, CONSOLE

    zookeeper.console.threshold=INFO

    zookeeper.log.dir=.
    zookeeper.log.file=zookeeper.log
    zookeeper.log.threshold=INFO
    zookeeper.log.maxfilesize=256MB
    zookeeper.log.maxbackupindex=20

    zookeeper.tracelog.dir=${zookeeper.log.dir}
    zookeeper.tracelog.file=zookeeper_trace.log

    log4j.rootLogger= z o o k e e p e r . r o o t . l o g g e r l o g 4 j . a p p e n d e r . C O N S O L E = o r g . a p a c h e . l o g 4 j . C o n s o l e A p p e n d e r l o g 4 j . a p p e n d e r . C O N S O L E . T h r e s h o l d = {zookeeper.root.logger} log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold= zookeeper.root.loggerlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold={zookeeper.console.threshold}
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

    log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
    log4j.appender.ROLLINGFILE.Threshold= z o o k e e p e r . l o g . t h r e s h o l d l o g 4 j . a p p e n d e r . R O L L I N G F I L E . F i l e = {zookeeper.log.threshold} log4j.appender.ROLLINGFILE.File= zookeeper.log.thresholdlog4j.appender.ROLLINGFILE.File={zookeeper.log.dir}/ z o o k e e p e r . l o g . f i l e l o g 4 j . a p p e n d e r . R O L L I N G F I L E . M a x F i l e S i z e = {zookeeper.log.file} log4j.appender.ROLLINGFILE.MaxFileSize= zookeeper.log.filelog4j.appender.ROLLINGFILE.MaxFileSize={zookeeper.log.maxfilesize}
    log4j.appender.ROLLINGFILE.MaxBackupIndex=${zookeeper.log.maxbackupindex}
    log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

    log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
    log4j.appender.TRACEFILE.Threshold=TRACE
    log4j.appender.TRACEFILE.File= z o o k e e p e r . t r a c e l o g . d i r / {zookeeper.tracelog.dir}/ zookeeper.tracelog.dir/{zookeeper.tracelog.file}

    log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout

    log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n

    zookeeper.auditlog.file=zookeeper_audit.log
    zookeeper.auditlog.threshold=INFO
    audit.logger=INFO, RFAAUDIT
    log4j.logger.org.apache.zookeeper.audit.Log4jAuditLogger= a u d i t . l o g g e r l o g 4 j . a d d i t i v i t y . o r g . a p a c h e . z o o k e e p e r . a u d i t . L o g 4 j A u d i t L o g g e r = f a l s e l o g 4 j . a p p e n d e r . R F A A U D I T = o r g . a p a c h e . l o g 4 j . R o l l i n g F i l e A p p e n d e r l o g 4 j . a p p e n d e r . R F A A U D I T . F i l e = {audit.logger} log4j.additivity.org.apache.zookeeper.audit.Log4jAuditLogger=false log4j.appender.RFAAUDIT=org.apache.log4j.RollingFileAppender log4j.appender.RFAAUDIT.File= audit.loggerlog4j.additivity.org.apache.zookeeper.audit.Log4jAuditLogger=falselog4j.appender.RFAAUDIT=org.apache.log4j.RollingFileAppenderlog4j.appender.RFAAUDIT.File={zookeeper.log.dir}/ z o o k e e p e r . a u d i t l o g . f i l e l o g 4 j . a p p e n d e r . R F A A U D I T . l a y o u t = o r g . a p a c h e . l o g 4 j . P a t t e r n L a y o u t l o g 4 j . a p p e n d e r . R F A A U D I T . l a y o u t . C o n v e r s i o n P a t t e r n = l o g 4 j . a p p e n d e r . R F A A U D I T . T h r e s h o l d = {zookeeper.auditlog.file} log4j.appender.RFAAUDIT.layout=org.apache.log4j.PatternLayout log4j.appender.RFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n log4j.appender.RFAAUDIT.Threshold= zookeeper.auditlog.filelog4j.appender.RFAAUDIT.layout=org.apache.log4j.PatternLayoutlog4j.appender.RFAAUDIT.layout.ConversionPattern=log4j.appender.RFAAUDIT.Threshold={zookeeper.auditlog.threshold}

    log4j.appender.RFAAUDIT.MaxFileSize=10MB
    log4j.appender.RFAAUDIT.MaxBackupIndex=10

    **

    4 /data/zk/data 目录写写文件myid,写入ZOO_MY_ID

    **
    [root@localhost data]# cat myid
    1

    **

    5 其他两台服务器,参考此配置

    **,注意修改容器ID和myid
    正常启动后
    $ docker exec -it zk1 bash
    进去容器命令行
    root@427153444eba:/apache-zookeeper-3.5.9-bin# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    查看zk运行状态

    见上图,即配置成功,3台服务器,允许宕机1台。

    展开全文
  • 先配置静态IP2台机器mysql密码一样,最好在同一局域网内,最好在mysql刚安装时就配置好,后面有数据了不好同步。本文实现了2台机器mysql数据同步成功;配置my.cnf先关闭防火墙serviceiptablesstatus2台机器除了...

    先配置静态IP

    2台机器mysql密码一样,最好在同一局域网内,最好在mysql刚安装时就配置好,后面有数据了不好同步。

    本文实现了2台机器mysql数据同步成功;

    配置my.cnf

    先关闭防火墙

    service iptables status

    2台机器除了server-id不同之外,配置项基本一样(把a改为b)。

    vim /etc/my.cnf

    在[mysqld]部分添加如下:

    #add log-bin=master-a-bin server-id=1 relay-log=master-a-relay-bin log_slave_updates=1sync_binlog=1#add

    配置项说明

    两台MySQL均要开启binlog日志功能

    log-bin  //[必须]启用二进制日志

    server-id=1       //[必须]默认是1,一般取IP最后一段

    两台MySQL的server-ID不能一样,需将其中一台修改为2

    log_slave_updates表示slave将复制事件写进自己的二进制日志

    sync_binlog=1。每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

    修改配置后重启mysqld

    service mysqld restart

    其它配置项:待查

    binlog-do-db =new_test (要记录的数据库,多个可换行多次设置)

    replicate-do-db =new_test (要复制的数据库,多个可换行过个设置)

    binlog-ignore-db=mysql //不对mysql库进行日志记录操作 如下意思雷同

    binlog-ignore-db=test

    binlog-ignore-db=information_schema

    binlog-ignore-db=performance_schema

    replicate-ignore-db=test  //不对test进行复制操作 如下意思雷同

    replicate-ignore-db=mysql

    replicate-ignore-db=information_schema

    replicate-ignore-db=performance_schema

    bing-address=0.0.0.0  //意思是允许所有 机器 服务器安全起见可设置为指定的服务器IP地址

    主从复制的时候时间必须要保持一致

    iptables  -I  INPUT  -p  tcp  --dport  3306  -j ACCEP

    1.主服务器A(123.1.1.123)创建用户并清空日志

    mysql -uroot -p

    grant replication slave on*.*to'root'@'%'identified by'pwd';flush privileges;

    为了安全,最好将“%”改为具体的IP地址(如123.1.1.124),使该帐户只能在指定的从服务器上使用。

    flush tables with read lock;备份数据前先锁表,保证数据一致性show binary logs;reset master; show binary logs; unlock tables;

    记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。

    从服务器B清空日志

    show binary logs;reset master; show binary logs;

    从服务器通过change master to命令修改设置

    change master to master_host='123.1.1.123',master_user='root', master_password='pwd',master_port=3306, master_log_file='master-a-bin.000001',master_log_pos=106;以上全部复制后修改并粘贴 showslave status \G;

    在输出的信息中:

    Slave_IO_Running: No Slave_SQL_Running: No

    需要使其值为Yes

    start slave; show slave status \G;错误:Last_IO_Error: error connecting to master 'root@123.1.1.123:3306'

    mysql -h 10.24.54.18 -ureplication -p

    ERROR 1130 (HY000): Host '123.103.58.124' is not allowed to connect to this MySQL server

    ERROR 1045 (28000): Access denied for user 'root'@'123.103.58.124' (using password: YES)

    最后发现是密码不对。

    2.设置从服务器B

    在“从机”B上设置复制帐号

    grant replication slave on *.* to 'root'@'%' identified by 'pwd';flush privileges;

    清空“从机”日志:

    show binary logs;reset master; show binary logs;

    在原主服务器A上通过change master to命令修改设置,可以全部复制并粘贴:

    change master to master_host='123.103.*.124',master_user='root', master_password='pwd', master_port=3306, master_log_file='master-b-bin.000001', master_log_pos=106;

    show slave status \G;

    看看

    Slave_IO_Running: No Slave_SQL_Running: No

    需要使其值为Yes

    start slave; show slave status \G;

    应该有

    Slave_IO_Running: Yes Slave_SQL_Running: Yes

    设置完后重启:service mysqld restart

    =============================完==================

    如果数据不匹配

    reset slave;

    测试

    show databases; create database a1; use a1; create table t1(id int auto_increment primary key,name varchar(30)); insert into t1(name) values('appBox1');

    可以发现数据库已同步,但2台皆可写。

    下一节将实现读写分离。

    经测试,如果设置之前有数据不会同步,只能同步之后的

    show variables like 'server_id';

    其它:

    RESET MASTER

    删除所有index file 中记录的所有binlog 文件,将日志索引文件清空,创建一个新的日志文件,这个命令通常仅仅用于第一次用于搭建主从关系的时的主库,

    reset slave 将使slave 忘记主从复制关系的位置信息。该语句将被用于干净的启动, 它删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件。

    使用reset slave之前必须使用stop slave 命令将复制进程停止。

    展开全文
  • Redis三主三从集群搭建(三台机器

    千次阅读 2021-01-30 13:20:23
    dir /opt/servers/redis-5.0.8/redisdata16380 4、启动 先在每台机器上启动 cd /opt/servers/redis-5.0.8/src/ redis-server ../16379/redis.conf redis-server ../16380/redis.conf 5、查看集群状态是否正常 [root@...

    介绍

    redis三种模式

    一、主从模式

            Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构。下图为一主两从结构。
    在这里插入图片描述

    怎样实现主从复制?
    1.从服务器初始化时进行全量同步
    2.初始化完成后执行增量同步
    优点:实现数据备份,做到读写分离
    缺点:当主节点发生故障掉线时,需要人工进行:故障转移

    二、哨兵模式

            可以说是主从复制的升级版本,增加了一个新的角色。由一个或多个哨兵实例组成的哨兵系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

    在这里插入图片描述
    Server1掉线后
    在这里插入图片描述
    之后:
    在这里插入图片描述

    优点: 如果Master 异常,则会进行Master-slave 转换,自动实现故障转移。将其中一个Slave作为Master,之前的Master重新上线后作为Slave、

    缺点: 如果是从节点下线了,哨兵是不会对其进行故障转移的,连接从节点的客户端也无法获取到新的可用从节点

    三、 集群模式

            任何两个节点之间都是相互连通的。客户端可以与0任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。一般集群建议搭建三主三从架构,三主提供服务,三从提供备份功能。每一个节点都存有这个集群所有主节点以及从节点的信息
    在这里插入图片描述

    掉线判断:
            过程是集群中所有master参与,如果半数以上master节点与某个master节点通信超时(cluster-node-timeout),认为该master节点挂掉.

    什么时候整个集群不可用(cluster_state:fail)?
    (1)如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,
    (2)如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

    优点:
            有效的解决了redis在分布式方面的需求遇到单机内存。并发和流量瓶颈等问题时,可采用集群方案达到负载均衡的目的。可实现动态扩容。自动故障转移

    缺点: 架构新,实践较少


    今天这里为大家讲解的是集群模式(也称为三主三从模式)
    先介绍一下,我们的服务器信息(3台服务器,cpu,内存、数据盘等不作要求)

    192.168.100.21master
    192.168.100.22slaves1
    192.168.100.22slaves2

    一、上传解压先在每台机器上部署单机redis

    1、上传
    在这里插入图片描述
    在这里插入图片描述
    2、解压

    [root@master servers]# pwd
    /opt/servers
    [root@master servers]# tar -zxvf redis-5.0.8.tar.gz -C  /opt/servers/
    

    在这里插入图片描述
    3、安装redis的相关依赖
    这里三台机器都需要安装

    [root@slaves2 ~]# yum -y install gcc-c++  tcl
    

    4、进入redis编译

    [root@master servers]# cd redis-5.0.8/
    [root@master redis-5.0.8]# make && make install
    

    在这里插入图片描述
    5、修改redis配置文件
    创建日志文件
    cd /opt/servers/redis-5.0.8/
    mkdir -p /opt/servers/redis-5.0.8/logs
    mkdir -p /opt/servers/redis-5.0.8/redisdata
    编辑
    vim redis.conf

    #设置ip
    bind 本机ip
    #设置让redis开启后可以在后台运行,除非kill -9,如果设置为no,exit后redis就关闭
    daemonize yes
    #保存redis的pid,这是默认路径,可自行修改
    pidfile /var/run/redis_6379.pid
    #保存日志文件
    logfile "/opt/servers/redis-5.0.8/logs/redis.log"
    #本地数据库存放路径
    dir /opt/servers/redis-5.0.8/redisdata
    
    #密码设置 
    #主节点密码设置
    #requirepass 1234abcD   配置集群这里先不要设置密码
    

    6、启动

    [root@node01 redis-5.0.8]# cd /opt/servers/redis-5.0.8/src/ 
    [root@node01 src]# redis-server ../redis.conf 
    ps -ef | grep redis
    

    在这里插入图片描述

    二、开始将单机模式变成三主三从集群

    1、每台创建其中两实例对应的配置文件、日志文件及数据文件的存放目录

    mkdir –p /opt/servers/redis-5.0.8/16379
    mkdir –p /opt/servers/redis-5.0.8/16380
    mkdir –p /opt/servers/redis-5.0.8/log
    mkdir –p /opt/servers/redis-5.0.8/redisdata16379
    mkdir –p /opt/servers/redis-5.0.8/redisdata16380
    

    2、拷贝配置文件
    将redis.conf分别拷贝到16379、16380中

    cp /opt/servers/redis-5.0.8/redis.conf /opt/servers/redis-5.0.8/16379
    
    

    3、修改配置文件
    vim /opt/servers/redis-5.0.8/16379/redis.conf

    #设置ip
    bind 本机ip
    #开启集群模式
    cluster-enabled yes
    #设置集群模式config文件(是集群自动创建,用于记录集群节点信息以及持久化参数) 
    cluster-config-file nodes-16379.conf
    #设置让redis开启后可以在后台运行,除非kill -9,如果设置为no,exit后redis就关闭
    daemonize yes
    #设置端口
    port 16379
    #保存redis的pid,这是默认路径,可自行修改
    pidfile /var/run/redis_16379.pid
    #保存日志文件
    logfile "/opt/servers/redis-5.0.8/logs/redis-16379.log"
    #本地数据库存放路径
    dir /opt/servers/redis-5.0.8/redisdata16379
    

    cp /opt/servers/redis-5.0.8/16379/redis.conf /opt/servers/redis-5.0.8/16380/
    vim /opt/servers/redis-5.0.8/1638/redis.conf

    #设置集群模式config文件(是集群自动创建,用于记录集群节点信息以及持久化参数) 
    cluster-config-file nodes-16380.conf
    #设置端口
    port 16380
    #保存redis的pid,这是默认路径,可自行修改
    pidfile /var/run/redis_16380id
    #保存日志文件
    logfile "/opt/servers/redis-5.0.8/logs/redis-16380og"
    #本地数据库存放路径
    dir /opt/servers/redis-5.0.8/redisdata16380
    

    4、启动
    先在每台机器上启动

    cd /opt/servers/redis-5.0.8/src/
    redis-server ../16379/redis.conf
    redis-server ../16380/redis.conf
    

    5、查看集群状态是否正常

    [root@master redis-5.0.8]# ps -ef | grep redis
    root      17676      1  0 21:51 ?        00:00:00 src/redis-server master:16379 [cluster]
    root      17685      1  0 21:51 ?        00:00:00 src/redis-server master:16380 [cluster]
    root      17729   9823  0 21:52 pts/0    00:00:00 grep --color=auto redis
    
    

    在这里插入图片描述
    这里大家注意一下:
    如果使用5.0版本以上的redis创建集群的命令就有所不同了,原因是因为redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言。
    6、这里我先为大家直接讲一下redis5.0版本的,后面在为大家扩展5.0以下redis版本,创建集群的方式。

    [root@master redis-5.0.8]# src/redis-cli --cluster create 192.168.100.21:16379  192.168.100.21:16380 192.168.100.22:16379 192.168.100.22:16380 192.168.100.23:16379 192.168.100.23:16380   --cluster-replicas 1
    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 192.168.100.22:16380 to 192.168.100.21:16379
    Adding replica 192.168.100.23:16380 to 192.168.100.22:16379
    Adding replica 192.168.100.21:16380 to 192.168.100.23:16379
    M: 2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379
       slots:[0-5460] (5461 slots) master
    S: 6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380
       replicates 646a498c7b3406395a62e1df2dc418fc834d257e
    M: 8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379
       slots:[5461-10922] (5462 slots) master
    S: 2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380
       replicates 2cda3eec9cb484a7d91103e998c3a5e3e6791961
    M: 646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379
       slots:[10923-16383] (5461 slots) master
    S: 88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380
       replicates 8057cb6e27f0baeb9306c475e99cbb0272c3c946
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join
    .........
    >>> Performing Cluster Check (using node 192.168.100.21:16379)
    M: 2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: 2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380
       slots: (0 slots) slave
       replicates 2cda3eec9cb484a7d91103e998c3a5e3e6791961
    S: 88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380
       slots: (0 slots) slave
       replicates 8057cb6e27f0baeb9306c475e99cbb0272c3c946
    M: 8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: 6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380
       slots: (0 slots) slave
       replicates 646a498c7b3406395a62e1df2dc418fc834d257e
    M: 646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    

    在这里插入图片描述
    7、登入,并且设置主从的密码

    [root@master redis-5.0.8]# src/redis-cli -h master -p 16379 -c
    master:16379> config set masterauth 1234abcD
    OK
    master:16379> config set requirepass  1234abcD
    OK
    
    master:16379> auth '1234abcD'
    OK
    master:16379> CONFIG rewrite
    OK
    master:16379> set name 123
    -> Redirected to slot [5798] located at 192.168.100.22:16379
    OK
    192.168.100.22:16379> keys *
    1) "name"
    192.168.100.22:16379> 
    master:16379> auth '1234abcD'
    OK
    #重写配置
    master:16379> CONFIG rewrite
    OK
    master:16379> set name 123
    -> Redirected to slot [5798] located at 192.168.100.22:16379
    OK
    192.168.100.22:16379> keys *
    1) "name"
    #查看集群的详细信息
    192.168.100.22:16379> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:3
    cluster_stats_messages_ping_sent:1584
    cluster_stats_messages_pong_sent:1488
    cluster_stats_messages_meet_sent:5
    cluster_stats_messages_sent:3077
    cluster_stats_messages_ping_received:1487
    cluster_stats_messages_pong_received:1589
    cluster_stats_messages_meet_received:1
    cluster_stats_messages_received:3077
    192.168.100.22:16379> 
    #查看主从之间的关系
    192.168.100.22:16379> cluster nodes
    88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380@26380 slave 8057cb6e27f0baeb9306c475e99cbb0272c3c946 0 1611981803000 6 connected
    8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379@26379 myself,master - 0 1611981804000 3 connected 5461-10922
    2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380@26380 slave 2cda3eec9cb484a7d91103e998c3a5e3e6791961 0 1611981805000 4 connected
    646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379@26379 master - 0 1611981805965 5 connected 10923-16383
    2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379@26379 master - 0 1611981804000 1 connected 0-5460
    6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380@26380 slave 646a498c7b3406395a62e1df2dc418fc834d257e 0 1611981805000 5 connected
    
    

    在这里插入图片描述

    扩展:

    当如果你们使用redis的5.0版本以下的后可能会出现这个错误:
    (error) CLUSTERDOWN Hash slot not served

    1、准备redis-trib.rb的运行环境
    相关连接:https://blog.csdn.net/weixin_45697341/article/details/102736907

    wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
    yum -y install zlib-devel
    tar xvf ruby-2.5.1.tar.gz
    cd ruby-2.5.1/
    ./configure -prefix=/usr/local/ruby
    make
    make install
    cd /usr/local/ruby/
    cp bin/ruby /usr/local/bin
    cp bin/gem /usr/local/bin
    

    2、安装redis-trib依赖

    wget http://rubygems.org/downloads/redis-3.3.0.gem
    gem install -l redis-3.3.0.gem
    

    3、构建集群
    ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

    在这里插入图片描述
    10、验证集群
    通过客户端命令连接上,通过集群命令看一下状态和节点信息等

    [root@master src]# ./redis-cli -h 192.168.100.21 -p 16379 -c
    192.168.100.21:16379> auth '密码'
    OK
    
    192.168.100.21:16379> clster info
    192.168.100.21:16379> cluster info
    cluster_state:fail
    cluster_slots_assigned:0
    cluster_slots_ok:0
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:1
    cluster_size:0
    cluster_current_epoch:0
    cluster_my_epoch:0
    cluster_stats_messages_sent:0
    cluster_stats_messages_received:0
    
    

    在这里插入图片描述

    展开全文
  • 最后还是通过三台机器实现了linux下的mysql集群,这边首先要感谢众多网络上提供帮助教程,虽然有些没有经过实践无法真正达到效果,但是这次给MGM项目的这个开头还是不错。书归正传,这边用的是vmware workstation来...

    最后还是通过三台机器实现了linux下的mysql集群,这边首先要感谢众多网络上提供帮助教程,虽然有些没有经过实践无法真正达到效果,但是这次给MGM项目的这个开头还是不错。

    书归正传,这边用的是vmware workstation来实现的,先装三台linux centos的服务器,最好参考百度知道里面的安装普通database的服务器方法,当中自己来实现交换分区和boot分区还有主分区的划分,这样更好的学习linux的命令和一些常用的操作。接下来和网上的做法差不多,这边关键是my.cnf的配置方法,最后我才发觉这个是我的问题,而且权限表的配置也很重要chown最好对mysql组下的mysql对这个安装路径(/usr/local/mysql/)路径的所有权限进行赋值。

    操作系统:

    Centos6.0 release 64位

    软件包:

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz

    数据库管理节点: 10.10.10.201

    数据库数据节点: 10.10.10.202,10.10.10.203

    数据库sql节点: 10.10.10.202,10.10.10.203

    我这里数据节点和sql节点用相同的2台机器承担.

    1.管理节点的安装

    #groupadd mysql

    #useradd mysql -g mysql

    #mv

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz /usr/local/

    #cd /usr/local/

    #tar zxvf

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz

    #rm -f

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz

    #mv

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64mysql

    #chown -R mysql:mysql mysql

    #cd mysql

    #scripts/mysql_install_db --user=mysql

    2.管理节点的配置

    #mkdir /var/lib/mysql-cluster

    #cd /var/lib/mysql-cluster

    #vi config.ini

    //这里需要手动添加如下内容

    [ndbd default]   NoOfReplicas=2   DataMemory=80M   IndexMemory=18M

    //这里有很多参数,大家可以自己找下相关资料

    [ndb_mgmd]   Id=1   Hostname=10.10.10.201           //管理节点IP  datadir=/usr/local/mysql/logs

    [ndbd]   Id=2   Hostname=10.10.10.202             //数据节点IP      datadir=/usr/local/mysql/data/

    //数据节点的数据目录,这里要与数据节点的配置文件my.cnf(其实这边要但是my。cnf里面不用指定也行)

    的数据指定相同

    [ndbd]   Id=3   Hostname=10.10.10.203            //数据节点IP      datadir=/usr/local/mysql/data/

    [MYSQLD]   [MYSQLD]

    3.安装和配置数据节点

    这里2台机器数据节点安装是相同的.

    #groupadd mysql

    #useradd mysql -g mysql

    #mv

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz /usr/local/

    #cd /usr/local/

    #tar zxvf

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz

    #rm -f

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz

    #mv

    mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64 mysql

    #chown -R mysql:mysql mysql

    #cd mysql

    #scripts/mysql_install_db --user=mysql

    #cp support-files/my-medium.cnf /etc/my.cnf

    #cp support-files/mysql.server /etc/init.d/mysqld

    #vi /etc/my.cnf

    //这里需要手动添加如下的内容

    [client]

    port =3307

    [mysqld]

    port = 3307

    ndbcluster

    ndb-connectstring=10.10.10.201

    bind-address = 10.10.10.202

    [mysql_cluster]

    ndb-connectstring=10.10.10.201

    这边特别要说的额是设置成3307是必须的,我尝试了很多方法,在ndbd开启后3306就被占用了,

    可以使用

    netstat -anp | grep "3306" 来找到pid,用kill pid号反而会导致ndbd的集群出问题,所以这里只能指定binding-address和port

    4.启动相关服务

    在管理节点启动相关服务:

    #/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

    #netstat -lntpu

    tcp        0      0 0.0.0.0:1186            0.0.0.0:*

    LISTEN   22907/ndb_mgmd

    看到1186端口开放了说明启动是正常的.

    在数据节点启动相关服务:

    #/usr/local/mysql/bin/ndbd --initial

    #netstat -lntpu

    tcp        0      0 10.10.1.65:32975            0.0.0.0:*                    LISTEN      1901/ndbd

    tcp        0      0 10.10.1.65:32976            0.0.0.0:*                   LISTEN      1901/ndbd

    tcp        0      0 10.10.1.65:32977            0.0.0.0:*                   LISTEN      1901/ndbd

    #service mysqld start

    #netstat -lntpu

    tcp        0      0 :::3306                     :::*                        LISTEN      2258/mysqld

    可以看到相关的ndbd服务以及mysql已经启动ok了.

    5.功能测试

    到管理节点查看下相关服务状态

    # ndb_mgm

    ndb_mgm> show

    Connected to Management Server at: localhost:1186

    Cluster Configuration

    ---------------------

    [ndbd(NDB)]     2 node(s)

    id=2    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)

    id=3    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)

    [ndb_mgmd(MGM)] 1 node(s)

    id=1    @10.10.1.151  (mysql-5.1.37 ndb-7.0.8)

    [mysqld(API)]   2 node(s)

    id=4    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8)

    id=5    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8)

    可以看到这里的数据节点、管理节点、sql节点都是正常的.

    现在我们在其中一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步

    # /usr/local/mysql/bin/mysql -u root -p

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | mysql              |

    | ndb_2_fs           |

    | test               |

    +--------------------+

    mysql> create database aa;

    mysql> use aa

    mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB;

    //这里必须指定数据库表的引擎为NDB,否则同

    步失败

    mysql> INSERT INTO ctest2 () VALUES (1);

    mysql> SELECT * FROM ctest2;

    +------+

    | i    |

    +------+

    |    1 |

    +------+

    现在到另外一个数据节点查看下aa数据库是否同步过来了.

    #/usr/local/mysql/bin/mysql -u root -p

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | aa                 |

    | bb                 |

    | mysql              |

    | ndb_3_fs           |

    | test               |

    +--------------------+

    mysql> use aa

    mysql> select * from ctest2;

    +------+

    | i    |

    +------+

    |    1 |

    +------+

    从上面可以看到数据已经同步了,mysql集群环境已经搭建完成.

    这边同样要感谢下面页面的提供帮助:

    http://blog.chinaunix.net/uid-23412974-id-2425362.html

    http://wenku.baidu.com/link?url=BweBSV3m0ut73gnmRWj5M3w88YTanyxi_K7tvkqpWMdrfaf54xSdVfPolj0HbhdH9hmf85UO_OjXEuWsYlIBRgND0-WgZ9RW1qBE1weoLOq

    让我知道不光是chrown来设置权限表来解决问题,还需要绑定其他端口和ip,还有重要问题还需要跑到/usr/local/mysql/data找错误日志来排查。

    展开全文
  • zookeeper作为非常流行的分布式应用程序协调服务管理开源框架,最初是由雅虎研究院研发,能够作为注册中心、集群Leader选举、分布锁……等等应用,今天我主要记录关于如何在单台机器上模拟zookeeper集群创建。...
  • docker版本RabbitMQ集群 ...集群增加节点(172.22.1.94)3.1 启动增加节点(172.22.1.94)3.2 配置添加的节点(172.22.1.94)3.3 集群其他机器添加 hosts文件映射 (172.22.1.68、172.22.1.88)3.移除节点(示例:172.22.
  • weblogic在部署单台物理的节点服务器(受管服务器)集群时候,只要根据提示下一步下一步都能完成。最近帮测试部部署一个...nodermanager在2台机器上都可以使用的办法:第一步,在主管理服务器console上域的安全页设...
  • 前言:本文章这次主要是基于docker在多台服务器下搭建的普通集群环境,镜像集群以及集群搭建后通过nginx负载和keepalived实现HA会另出一篇文章进行详细介绍。 一:准备工作 集群所需要的虚拟机环境(根据自身的集群需要...
  • docker搭建redis-cluster集群,多机器redis-cluster搭建机器列表免密登录(可不做)编写配置文件创建文件夹命令创建镜像命令创建操控其他机器的命令将上述文件传到各个文件创建redis容器创建集群 redis-cluster搭建 ...
  • Kafka集群个Broker组成,每个Broker对应一个Kafka实例;Zookeeper负责管理Kafka集群的Leader选举以及Consumer Group发生变化的时候进行reblance操作 搭建kafka集群 使用三台服务器部署zookeeper、kafka服务,...
  • 1、背景:原有的hadoop集群搭建在三台虚拟机上,版本为3.1.1 2、失败过程:打算在同一套虚拟机上安装一套hadoop-3.2.2,配置好相关配置文件之后, 格式化namenode,终端打印信息询问是否要重新格式化namenode,对应...
  • 正常情况下修改nacos启动端口 修改nacos/config/application.properties文件;将此处端口改为你想要的端口即可 ### Default web server port: server.port=8848 ...因为nacos内嵌derby数据库,集群环境需要配置统
  • 多台机器集群搭建 先搭建zk集群 再搭建kafka集群 搭好要测试哦!!! 参考文献: 注意: 1、单台机器上又部署zk,又部署kafka,比较吃内存,一开始可能还好,能启动起来,但是内存不够的话,后面可能用着用着kafka...
  • 首先我们需要在每主机都安装 docker 和 docker-compose 二、配置每个节点的redis容器 创建用于存放redis配置文件的文件夹 mkdir /home/redis cd /home/redis 创建docker-compose.yml vim docker-compose.yml ...
  • 服务器搭建redis集群1、俩服务器分别新建目录:usr/local/redis-cluster2、下载源码并解压编译(使用redis版本5.0.4)3、tar xzf redis-5.0.4.tar.gz4、cd redis-5.0.45、make & make install测试编译:发现...
  • 要配置一个Cluster集群,至少得需要配置1个MGM(管理结点)+1个SQL结点+2 Data 结点MGM可以和SQL结点共用一台机器,数据结点单独占一台服务器。这样最少也需要3台服务器。有时候这样会觉得很麻烦,如果是学习阶段,可...
  • 这篇文章旨在介绍如何安装配置基于2服务器的MySQL集群。并且实现任意一服务器出现问题或宕机时MySQL依然能够继续运行。注意!虽然这是基于2服务器的MySQL集群,但也必须有额外的第三服务器作为管理节点,但...
  • 前期准备 l 两linux虚拟机(本文使用redhat5,ip分别为 ip1、ip2) l jdk环境(本文使用jdk1.6,网上很配置方法,本文省略) l hadoop安装包(本文使用hadoop1.0.4) 。apache+tomcat就可以了在大型网络中,服务器群集...
  • /bin/bash # 执行jps命令查询每服务器上的节点状态 echo ======================集群节点状态==================== for i in master node1 node2 do echo ====================== $i ==================== ssh $i ...
  • Zookeeper集群搭建---在一台机器上的集群1、zookeeper集群中的角色分类2、zookeeper集群搭建2.1、创建存放四个节点数据的文件夹2.2、创建每个节点的唯一id---serverid2.3、创建每个节点的配置文件并作修改2.4、修改...
  • 服务器集群

    2021-07-29 06:05:57
    集群可以利用个计算机进行并行计算从而获得很高的计算速度,也可以用个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。中文名服务器集群外文名Server cluster特点很高的计算速度学科计算机学...
  • (2)在次启动过程中的,理论上/home/es/mount/data或是master目录是不需要清空的,但是如果次重新组建es集群或是说data节点加入过集群,然后再重新部署了新的集群则需要清空里面的数据,主要涉及到data目录...
  • 3台机器搭建集群环境遇到问题比较,主要问题如下:(1)防火墙问题,3台机器的防火墙都需要关闭。我在测试过程中刚开始是完全没有考虑到这个问题,后来发现这个问题,也只是把管理节点的防火墙关闭,结果是悲剧的。...
  • 只有在 ZK 节点挂的太,只剩一半或不到一半节点能工作,集群才失效。 如: 3 个节点的 cluster 可以挂掉一个节点(leader 可以得到 2 票 > 1.5) 2 个节点的 cluster 就不能挂掉任何一个节点了(leader 可以...
  • Docker在多机器上搭建ES集群,各节点无法互通问题1.检查esnetwork.*配置2.按上面配置了,但是各节点不能形成集群,每个节点都作为master节点? 1.检查esnetwork.*配置 network.bind_host值可以设置为0.0.0.0(表示...
  • 如果您的所有节点都有相同的主机名,请使用–with-node-id选项为每个节点添加一个随机后缀,或者为您添加到集群的每个节点设计一个独特的名称,用–node-name或$K3S_NODE_NAME传递。 操作系统 K3s 应该可以运行在...
  • mysql用来开发中小型项目还是挺好用的,从节约成本的方面来考虑的确是个不错的选择,但是开发并发了...但是有关mysql集群的配置还是比较繁琐,好多人弄不出来就放弃了,可怕的是网上很资料都是转载别人的,都没有...
  • Zookeeper 集群部署的那些事儿

    多人点赞 2021-10-13 10:21:49
    ZooKeeper集群技巧知多少,今天带你了解~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 249,324
精华内容 99,729
关键字:

多台机器集群