zoukankan      html  css  js  c++  java
  • Redis安装配置文档(主从)

    ## Redis安装
    1. 下载Redis,这里我们使用Redis-2.8.24,文件名为:`redis-2.8.24.tar.gz`,放到Linux目录`/usr/local/src`下。
    2. 安装Redis之前我们需要先安装Redis的依赖程序tcl和gcc,如果不安装在执行make编译的时候就会报错,命令:`yum install -y tcl gcc`
    3. 下面就开始编译安装Redis:
    ```
    $ cd /usr/local/src
    $ tar zxvf redis-2.8.24.tar.gz -C /usr/local
    $ cd /usr/local/
    $ mv redis-2.8.24 redis
    $ cd redis
    $ make
    $ make test
    $ make install
    $ mkdir /etc/redis
    $ cp redis.conf /etc/redis/
    ```

    4. 执行初始化脚本s
    ```
    cd redis/utils
    ./install_server.sh
    ```
    执行以后会让你确认几个配置,直接回车即可,成功以后提示信息如下:
    ```
    Selected config:
    Port : 6379
    Config file : /etc/redis/6379.conf
    Log file : /var/log/redis_6379.log
    Data dir : /var/lib/redis/6379
    Executable : /usr/local/bin/redis-server
    Cli Executable : /usr/local/bin/redis-cli
    Is this ok? Then press ENTER to go on or Ctrl-C to abort.
    Copied /tmp/6379.conf => /etc/init.d/redis_6379
    Installing service...
    Successfully added to chkconfig!
    Successfully added to runlevels 345!
    /var/run/redis_6379.pid exists, process is already running or crashed
    Installation successful!
    ```

    5. 初始化脚本以后,redis会自动启动,如果没有启动,可以手动启动redis:
    ```
    启动:/etc/init.d/redis_6379 start
    关闭:/etc/init.d/redis_6379 stop
    或者
    启动:systemctl start redis_6379
    关闭:systemctl stop redis_6379
    查看状态:systemctl status redis_6379
    ```

    6. 使用客户端操作一下redis吧。
    ```
    redis-cli
    >set name hello
    OK
    >get name
    "hello"
    ```

    7. 这时我们在本机上可以直接连接,但是如果需要远程连接的话,必须要在防火墙上开通redis的监听端口,这里是6379端口,下面编辑防火墙配置文件,开放6379端口。
    ```
    vim /etc/sysconfig/iptables
    systemctl restart iptables
    ```

    ## Redis主从配置
    ### 配置主从
    Redis主从配置只需要修改Redis的配置文件,下面我们来看一下主和从的配置:
    1. 主配置
    ```
    masterauth hokai #主库认证密码
    requirepass hokai #客户端连接密码
    注释bind 127.0.0.1
    ```

    2. 从配置
    其他与主配置一样,只不过是将slaveof指定主服务器的IP地址和端口
    ```
    slaveof 192.168.99.111 6379
    ```

    3. 重启主和从的redis服务,测试redis主从配置
    因为我们设置了密码,所以在对redis操作的时候,需要验证一下密码。
    另外,从服务器对主服务器是只读的,所有从服务器是不能修改信息的。

    - 主服务器
    ```
    [root@redis01 ~]# redis-cli
    127.0.0.1:6379> AUTH hokai
    OK
    127.0.0.1:6379> set test 111
    OK
    ```

    - 从服务器
    ```
    [root@redis02 ~]# redis-cli
    127.0.0.1:6379> AUTH hokai
    OK
    127.0.0.1:6379> get test
    "111"
    127.0.0.1:6379> set test 222
    (error) READONLY You can't write against a read only slave.
    ```

    ### 注意事项
    #### 主从复制原理
    当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
    当 Master 挂掉,Slave 正时, Slave接管服务,同时关闭主从复制功能;
    当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
    然后依次循环。
    需要注意的是,这样做需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
    Redis的复制功能是非常简单易用的,配置为主从复制功能之后允许Redis的slave服务器复制出与master完全一致的服务器。
    #### 在master节点关闭持久化功能时,复制的安全性
    当在设置中开启Redis复制功能时,强烈建议的做法是在master节点中开启持久化功能,或者绝对不可能发生的是:因为延迟问题,将Redis实例被配置为避免自动重启。
    为了更好的理解为什么将关闭持久化功能的master节点配置为自动重启是非常危险的,我们看看下面在数据从master节点与其对应的所有slave节点移除时发生的失败类型:

    假设A节点是master节点,B,C节点是其对应的副本。
    A发生崩溃时,(配置为自动重启),重新启动了进程。然而因为持久化功能是关闭的,所以重启之后,该节点内的数据为空。
    节点B,C将会从A进行复制,这时A中的数据集是空的,因此,这时,B,C将会彻底删除他们之前备份的数据。

    为了高可用性,引入了Redis的哨兵(sentinel),关闭了master节点上的持久化,并且两者都配置为自动重启,这种做法也是非常危险的。举个例子:master节点可能非常快的就完成了重启,以至于sentienl都没有感知到失败的发生,接下来就会发生和上面例子一样的结果。
    在任何时间,数据的安全都是非常重要的,因此,在使用复制功能时,master节点如果没有持久化功能,自动重启的功能是必须被禁止的。

    ## 安装报错信息解决
    #### 1、不能编译,没有GCC 编译工具
    cc -c -std=c99 -pedantic -O2 -Wall -W -g -rdynamic -ggdb adlist.c
    make: cc:命令未找到
    make: *** [adlist.o] 错误 127

    **解决方法:安装gcc**
    命令如下:yum install gcc

    #### 2、make时可能会报如下错误:
    collect2: ld returned 1 exit status
    make[1]: [redis-server] Error 1
    make[1]: Leaving directory `/usr/local/redis/src'
    make: [all] Error 2

    解决办法:
    编辑src/.make-settings里的OPT,改为OPT=-O2 -march=i686

    #### 3、make时还可能会报如下错误:
    cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
    cc: error: ../deps/lua/src/liblua.a: No such file or directory
    cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
    make: [redis-server] Error 1

    分别进入redis下的deps下的hiredis、lua 运行make
    注意:jemalloc下可能要先运行./configure,然后make
    回到src目录运行 make

    结果还是报cc: error: ../deps/lua/src/liblua.a: No such file or directory

    这下子我把redis的解压包 删除掉 rm -rf redis
    重新解压,进入redis make 还真没报错了。

    **院内HIP 的redis 初始化数据,在redis-cli 中执行下面命令:**

    ```
    set hiip:empi:pageheader '[{"name":"empiId","chsName":"empiid","type":"String","order":1},{"name":"idNo","chsName":"身份证号","type":"String","order":1},{"name":"name","chsName":"居民姓名","type":"String","order":1},{"name":"genderName","chsName":"性别","type":"String","order":1},{"name":"birthDate","chsName":"出生日期","type":"String","order":1},{"name":"maritalStatusName","chsName":"婚姻状况","type":"String","order":1},{"name":"nationalityName","chsName":"民族","type":"String","order":1}]'
    ```

  • 相关阅读:
    C
    C
    如何收集项目日志统一发送到kafka中?
    Jmeter压测快速体验
    实时收集Storm日志到ELK集群
    Neo4j的查询语法笔记(二)
    Logstash2.3.4趟坑之集成Redis哨兵模式
    Spring-Boot中如何使用多线程处理任务
    使用SpringBoot1.4.0的一个坑
    手动从零使用ELK构建一套搜索服务
  • 原文地址:https://www.cnblogs.com/davidchen211/p/10081196.html
Copyright © 2011-2022 走看看