背景

  1. 两台Linux虚拟机
  2. redis5.0.5

前言

  1. 搭建一主一从二哨兵模式
  2. Linux系统必须安装有gcc
  3. 关闭防火墙让telnet可通端口 service iptables stop,需要root用户

写给自己

  1. 虚拟机-网络适配器设置为适配器-桥接模式(自动检测)
  2. 根据所连接wifi的子网掩码、路由器进行网络配置,ip地址为wifi的ipv4地址同网段,最后一位不同;通过vim /etc/sysconfig/network-scripts/ifcfg-ens33修改后即可上网,相互间也可ping通

步骤

redis安装

  1. 下载的redis安装包是 redis-5.0.5.tar.gz
  2. 上传到安装的环境,放到/home/xxx/redis路径下。
  3. 解压缩 tar xzf redis-5.0.5.tar.gz
    cd redis-5.0.5/
    开始执行安装命令:
    make
    若对安装的有疑问,在make之后再执行make test。
    分别备份一下redis.conf 和 sentinel.conf 执行命令
    cp redis.conf redis.conf.bak
    cp sentinel.conf sentinel.conf.bak

若make报如下错:
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/redis-5.0.5/src'
make: *** [all] Error 2
则是没有安装linux系统的gcc环境,执行命令
yum install gcc

若报以下错:
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/redis-5.0.5/src'
make: *** [all] Error 2
则是jemalloc重载了linux下的ANSI C的malloc和free函数,解决办法,执行命令
make MALLOC=libc

linux系统配置

  1. 修改linux单进程最大文件连接数(linux系统最大连接数会影响redis最大连接数maxiclients)
    修改 /etc/security/limits.conf 末尾添加如下内容:
xxx soft nofile 100000
xxx hard nofile 100000
xxx soft nproc 100000
xxx hard nproc 100000
xxx soft memlock unlimited
xxx hard memlock unlimited

说明: xxx表示只针对xxx用户生效,*表示针对所有用户生效

  1. 增加软连接
ln -s /home/xxx/redis-5.0.5/src/redis-cli /usr/bin/redis-cli
ln -s /home/xxx/redis-5.0.5/src/redis-server /usr/bin/redis-server
ln -s /home/xxx/redis-5.0.5/src/redis-sentinel /usr/bin/redis-sentinel

说明:/home/xxx/redis-5.0.5/为redis安装目录

Redis server启动

在第二步make完redis的安装后,需要对主从配置进行修改。

master的redis.conf

打开redis.conf,master修改配置文件如下:

#bind 127.0.0.1
protected-mode no
daemonize yes
logfile "/home/logs/redis.log"
replicaof master-ip 6379 (仅slave配置,master注释掉此项)
masterauth !QAZxsw2
requirepass !QAZxsw2

**以下根据需要设置,如果只为了学习可不设置**
repl-diskless-sync yes (在磁盘速度缓慢,网速快的情况下推荐yes)
repl-backlog-size 5mb

maxclients 10000
maxmemory 10GB
maxmemory-policy volatile-lru
maxmemory-samples 5

appendonly yes

activedefrag yes (开启主动磁盘碎片整理)
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower 20
active-defrag-threshold-upper 80
active-defrag-cycle-min 5
active-defrag-cycle-max 75
active-defrag-max-scan-fields 1000

slave的redis.conf

若是单机部署,则不需要执行此步骤,若是多台机器安装,请执行完以下步骤

#bind 127.0.0.1
protected-mode no
daemonize yes
logfile "/home/logs/redis.log"
replicaof master-ip 6379 (仅slave配置,master注释掉此项)
masterauth !QAZxsw2
requirepass !QAZxsw2

**以下根据需要设置,如果只为了学习可不设置**
repl-diskless-sync yes (在磁盘速度缓慢,网速快的情况下推荐yes)
repl-backlog-size 5mb

maxclients 10000
maxmemory 10GB
maxmemory-policy volatile-lru
maxmemory-samples 5

appendonly yes

activedefrag yes (开启主动磁盘碎片整理)
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower 20
active-defrag-threshold-upper 80
active-defrag-cycle-min 5
active-defrag-cycle-max 75
active-defrag-max-scan-fields 1000

以上配置是启动主从模式的基本修改参数,其他的参数可以在以后的应用中修改。
分别启动主从的server ./src/redis-server redis.conf
启动后,可以进redis-cli中,auth+密码,info replication,查看是否主从连接

哨兵配置及启动

打开哨兵的配置文件 sentinel.conf,master和slave的配置文件一样,修改如下:

protected-mode no
daemonize yes
logfile "/home/logs/redis-sentinel.log"
sentinel monitor mymaster master-ip 6379  2
sentinel auth-pass mymaster !QAZxsw2

说明:
!QAZxsw2 为redis密码,主从需保持一致
master-ip 是你指定的master的ip地址
哨兵配置完后 ./src/redis-sentinel sentinel.conf 才会启动

配置监控数据(测试环境可不执行此步)

tar -xzf redis_exporter-v0.25.0.linux-amd64.tar
cd redis_exporter-v0.25.0.linux-amd64
启动命令为:
nohup ./redis_exporter -redis.password xxxank@test &
暴露的端口是9121

测试

主服务器kill掉或shutdown后,从服务器自动变为master
日志文件在 /home/logs/redis-sentinel.log

原master重启 ./src/redis-server redis.conf 后变为从,可反复切换

Q.E.D.


To see the world as it is and to love it.