ITPub博客

首页 > 数据库 > NoSQL > Redis主从搭建

Redis主从搭建

原创 NoSQL 作者:梦夕林1992 时间:2023-01-28 17:57:36 0 删除 编辑

redis安装相对来说比较简单,下面为具体安装步骤。

一  安装 Redis 

安装前准备

下载最新安装包

https://redis.io/

 

安装依赖包

yum install gcc-c++

yum install tcl

 

解压安装包

解压目录随机,没有特别要求。

tar zxf redis-5.0.5.tar.gz

 

安装Reids

在redis 解压路径下执行make ,进行安装

[root@localhost redis]# cd redis-5.0.5

[root@localhost redis-5.0.5]# make

 

执行 make test  命令,检测redis 的编译结果

[root@localhost redis-5.0.5]# make test

 

执行 make install  命令,安装redis

[root@localhost redis-5.0.5]#  make PREFIX=/redis/redis-5.0.5/redis_master install

 

安装完后,会在redis_master 目录下安装并形成bin 目录

[root@localhost redis-5.0.5]# cd redis_master /

[root@localhost redis_master]# ls

bin  

[root@localhost redis_master]# cd bin/

[root@localhost bin]# ls -rtl

total 54320

-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-server

-rwxr-xr-x. 1 root root  9202931 Jun 11 14:49 redis-benchmark

-rwxr-xr-x. 1 root root  9580032 Jun 11 14:49 redis-cli

-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-check-rdb

-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-check-aof

lrwxrwxrwx. 1 root root       12 Jun 11 14:49 redis-sentinel -> redis-server

至此,redis 安装完成。

同样步骤安装三台redis 。只是个别目录用于以后区分可以去不一样的名字。如:其他两个从的目录可以设置为redis/redis-5.0.5/redis_slave1 和redis/redis-5.0.5/redis_slave2 。


二  配置Reids

配置redis 环境变量

编辑.bash_profile 文件,添加下面内容:

export REDIS_HOME=/redis/redis-5.0.5/redis_master

export PATH=$PATH:$REDIS_HOME/bin

 

生效环境变量

source .bash_profile

 

修改 redis  配置文件

复制redis 源码包目录下的 redis.conf  到redis_master 目录下修改名字为redis_6379.conf ,当然直接修改也是可以的,但要养成备份的习惯,复制的文件名为 redis_6379.conf ,这是配置redis 的一种习惯,因为我们启动redis 服务要用的端口默认为6379 ,假如要在一台节点上启动多个服务,那么每个服务的配置文件为 redis_${port}.conf ,这样很清楚的知道每个服务使用的端口号。

[root@localhost redis_master]# cp redis.conf redis_master/redis_6379.conf

 

Redis 配置文件主要参数解析参考

#redis 进程是否以守护进程的方式运行,yes 为是,no 为否( 不以守护进程的方式运行会占用一个终端)

daemonize  no  

# 指定redis 进程的PID 文件存放位置            

pidfile /var/run/redis.pid  

#redis 进程的端口号

port 6379                   

# 绑定的主机地址

bind 127.0.0.1              

# 客户端闲置多长时间后关闭连接, 默认此参数为0 即关闭此功能

timeout  300                

#redis 日志级别, 可用的级别有debug.verbose.notice.warning

loglevel verbose            

#log 文件输出位置, 如果进程以守护进程的方式运行, 此处又将输出文件设置为stdout 的话, 就会将日志信息输出到/dev/null 里面去了

logfile stdout              

# 设置数据库的数量, 默认为0 可以使用select <dbid> 命令在连接上指定数据库id

databases 16                

# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件;

save <seconds><changes>   

# 指定存储至本地数据库时是否压缩文件, 默认为yes 即启用存储;

rdbcompression yes          

# 指定本地数据库文件名

dbfilename dump.db          

# 指定本地数据问就按存放位置;

dir ./                      

# 指定当本机为slave 服务时, 设置master 服务的IP 地址及端口, 在redis 启动的时候他会自动跟master 进行数据同步

replicaof <masterip><masterport>    

# 当master 设置了密码保护时,slave 服务连接master 的密码;

masterauth <master-password>       

# 设置redis 连接密码, 如果配置了连接密码, 客户端在连接redis 是需要通过AUTH<password> 命令提供密码, 默认关闭

requirepass footbared       

# 设置同一时间最大客户连接数, 默认无限制;redis 可以同时连接的客户端数为redis 程序可以打开的最大文件描述符, 如果设置maxclients 0 ,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回max number of clients reached 错误信息

maxclients 128  

# 指定Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的Key ,当此方法处理  后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的vm 机制,会把Key 存放内存,Value 会存放在swap 区          

maxmemory<bytes>    

# 设置内存缓存策略

5.0 新增allkeys-lfu ,volatile-lfu

建议使用volatile-ttl ,最近要过期策略   

maxmemory-policy volatile-ttl

# 指定是否在每次更新操作后进行日志记录,Redis 在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis 本身同步数据文件是按上面save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

appendonly no  

# 指定跟新日志文件名默认为appendonly.aof             

appendfilename appendonly.aof       

#aof 持久化方式,建议采用appendfsync everysec 方式,即5.0 默认的,每秒,always 数据一致性保证了,但是性能太差,no 就更不行了,不开启。指定更新日志的条件, 有三个可选参数no :表示等操作系统进行数据缓存同步到磁盘( 快),always :表示每次更新操作后手动调用fsync() 将数据写到磁盘( 慢,安全), everysec :表示每秒同步一次( 折衷,默认值);

appendfsync everysec   

# 大并发的互联网公司aof 参数设置很重要,默认是如下图: 建议把64MB 修改成GB 单位的, 高并发的互联网公司,至少3GB 以上

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

同时,由于在恢复的时候,如果持久化都是使用的aof 和rdb, 建议rdb 文件是15 分钟备份一次,太频繁影响性能。

 

编辑redis_6379.conf 文件,根据需要修改以下内容

#  服务以守护进程方式启动

daemonize yes

#  允许Redis  被远程访问

bind 0.0.0.0

#  启动服务占用的端口

port 6379

#  日志文件存放的路径

logfile /redis/redis-5.0.5/redis_master/redis_6379.log

# pid 文件存放的路径

pidfile /redis/redis-5.0.5/redis_master/redis_6379.pid

# 主库的密码(本机可以不配置)最好配置因为等下配置哨兵,如果主机挂了重启之后(等于变成了从机)不能直接连上。(主机会根据哨兵投票决定)

masterauth hzmcdba

#  持久化文件的存储路径

dir /redis-data/master/6379

# 指定本地数据库文件名

dbfilename dump-master.rdb

# 设置内存缓存策略

maxmemory-policy volatile-ttl

#aof 持久化方式

appendfsync everysec

 

依次修改其他两个从节点的配置文件。

 

服务启停

启动redis 服务

[root@localhost bin]# pwd

/redis/redis-5.0.5/redis_master/bin

[root@localhost bin]# ./redis-server /redis/redis-5.0.5/redis_master/redis_6379.conf

 

检查redis 进程,已经存在

[root@localhost redis]# ps -ef |grep redis

root     24092     1  0 15:49 ?        00:00:00 ./redis-server 0.0.0.0:6379                                   

root     24122 24102  0 15:49 pts/0    00:00:00 grep redis

 

检查日志

[root@localhost redis_master]# tail -100f redis_6379.log 

24091:C 16 Jun 2020 15:49:13.259 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24091:C 16 Jun 2020 15:49:13.259 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=24091, just started
24091:C 16 Jun 2020 15:49:13.259 # Configuration loaded
24092:M 16 Jun 2020 15:49:13.263 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 24092
  `-._    `-._  `-./  _.-'    _.-'                                  
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
 
24092:M 16 Jun 2020 15:49:13.269 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
24092:M 16 Jun 2020 15:49:13.269 # Server initialized
24092:M 16 Jun 2020 15:49:13.269 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
24092:M 16 Jun 2020 15:49:13.270 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
24092:M 16 Jun 2020 15:49:13.270 * Ready to accept connections


可以看到redis 已经正常启动

 

停止redis 服务

[root@localhost bin]# ./redis-cli shutdown

查看日志

24092:M 16 Jun 2020 16:12:14.935 # User requested shutdown...
24092:M 16 Jun 2020 16:12:14.935 * Saving the final RDB snapshot before exiting.
24092:M 16 Jun 2020 16:12:14.954 * DB saved on disk
24092:M 16 Jun 2020 16:12:14.954 * Removing the pid file.
24092:M 16 Jun 2020 16:12:14.955 # Redis is now ready to exit, bye bye...


 

设置redis 服务开机自启动

把 redis-4.0.12/utils  目录下的 redis_init_script  脚本复制为 redis_6379 ,并移动到 /etc/init.d  目录下

[root@localhost utils]# cp redis_init_script /etc/init.d/redis_6379

修改以下配置信息,使其与redis_6379.conf 保持一致: 

#!/bin/sh

# chkconfig:   2345 90 10

# description:  Redis is a persistent key-value database

# Simple Redis init.d script conceived to work on Linux systems

# as it does use of the /proc filesystem.

 

### BEGIN INIT INFO

# Provides:     redis_6379

# Default-Start:        2 3 4 5

# Default-Stop:         0 1 6

# Short-Description:    Redis data structure server

# Description:          Redis data structure server. See https://redis.io

### END INIT INFO

 

REDISPORT=6379

EXEC=/redis/redis-5.0.5/redis_master/bin/redis-server

CLIEXEC=/redis/redis-5.0.5/redis_master/bin/redis-cli

 

PIDFILE=/redis/redis-5.0.5/redis_master/redis_6379.pid

CONF="/redis/redis-5.0.5/redis_master/redis_6379.conf"

 

修改redis_6379 脚本的权限为777

chmod 777 /etc/init.d/redis_6379

 

设置redis 开机自启动

sudo chkconfig redis_6379 on

 


 

三  验证redis 是否安装成功以及是否可以开机自启动

 

#  重启服务器

[root@localhost init.d]# reboot

 

#  查询redis 服务是否启动

[root@localhost ~]# ps -ef |grep redis

root      1960     1  0 16:29 ?        00:00:00 /redis/redis-5.0.5/redis_master/bin/redis-server 0.0.0.0:6379                                   

 

#  进行一组简单的操作

[root@localhost bin]# ./redis-cli 

127.0.0.1:6379> set name tom

OK

127.0.0.1:6379> get name

"tom"

127.0.0.1:6379>

 

验证redis 安装成功且自启动配置成功。

依次配置并验证其他两个从节点。

 

 

四  主从配置

因为前面已经再其他两个节点安装好redis ,且已经将主节点的配置文件拷贝到两个从节点,所有我们直接修改两个从节点的配置文件后,起来就可以。

 

修改Slave1

[root@localhost ~]# cd /redis/redis-5.0.5/redis_slave1

[root@localhost redis_slave1]# ls -rtl

total 68

drwxr-xr-x. 2 root root  4096 Jun 16 15:36 bin

-rw-r--r--. 1 root root 61797 Jun 16 15:38 redis_6380.conf

 

[root@localhost redis_slave1]# vi redis_6380.conf

编辑redis_6380.conf 文件,根据需要修改以下内容

 

#  服务以守护进程方式启动

daemonize yes

#  允许Redis  被远程访问

bind 0.0.0.0

#  启动服务占用的端口

port 6380

#  日志文件存放的路径

logfile "/redis/redis-5.0.5/redis_slave1/redis_6380.log" 

# pid 文件存放的路径

pidfile /redis/redis-5.0.5/redis_slave1/redis_6380.pid

# 主库的密码(本机可以不配置)最好配置因为等下配置哨兵,如果主机挂了重启之后(等于变成了从机)不能直接连上。(主机会根据哨兵投票决定)

masterauth hzmcdba

#  持久化文件的存储路径

dir /redis-data/slave1/6380

# 指定本地数据库文件名

dbfilename dump-slave1.rdb

# 设置内存缓存策略

maxmemory-policy volatile-ttl

#aof 持久化方式

appendfsync everysec

# 指定当本机为slave 服务时, 设置master 服务的IP 地址及端口, 在redis 启动的时候他会自动跟master 进行数据同步

replicaof 192.168.242.70 6379

 

修改Slave2

[root@localhost ~]# cd /redis/redis-5.0.5/redis_slave2

[root@localhost redis_slave2]# ls -rtl

total 68

drwxr-xr-x. 2 root root  4096 Jun 16 15:37 bin

-rw-r--r--. 1 root root 61972 Jun 24 16:07 redis_6381.conf

 

[root@localhost redis_slave2]# vi redis_6381.conf

编辑redis_6380.conf 文件,根据需要修改以下内容

#  服务以守护进程方式启动

daemonize yes

#  允许Redis  被远程访问

bind 0.0.0.0

#  启动服务占用的端口

port 6381

#  日志文件存放的路径

logfile "/redis/redis-5.0.5/redis_slave2/redis_6381.log" 

# pid 文件存放的路径

pidfile /redis/redis-5.0.5/redis_slave2/redis_6381.pid

# 主库的密码(本机可以不配置)最好配置因为等下配置哨兵,如果主机挂了重启之后(等于变成了从机)不能直接连上。(主机会根据哨兵投票决定)

masterauth hzmcdba

#  持久化文件的存储路径

dir /redis-data/slave2/6381

# 指定本地数据库文件名

dbfilename dump-slave2.rdb

# 设置内存缓存策略

maxmemory-policy volatile-ttl

#aof 持久化方式

appendfsync everysec

# 指定当本机为slave 服务时, 设置master 服务的IP 地址及端口, 在redis 启动的时候他会自动跟master 进行数据同步

replicaof 192.168.242.70 6379

 

 

启动两个从节点

[root@localhost redis_slave1]# redis-server /redis/redis-5.0.5/redis_slave1/redis_6380.conf

[root@localhost redis_slave2]# redis-server /redis/redis-5.0.5/redis_slave2/redis_6381.conf


由于参数已经修改完了,后面修改密码:

config set requirepass "hzmcdba"


并且写入配置文件: 

例如关闭提示需要密码就说明修改成功。

同理修改下面两台服务器:

 

检查主从复制情况  

Master :

[root@localhost redis_master]# redis-cli 

127.0.0.1:6379> info replication

NOAUTH Authentication required.

127.0.0.1:6379> auth hzmcdba

OK

127.0.0.1:6379> info replication

# Replication

role: master

connected_slaves: 2

slave0:ip=192.168.242.71,port=6380,state=online,offset=84,lag=1

slave1:ip=192.168.242.72,port=6381,state=online,offset=84,lag=1

master_replid:8b90010b378c34aaf89c39a9002684363de31b40

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:84

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:84

 

 

从机1

[root@localhost redis_slave1]# redis-cli -h 192.168.242.71 -p 6380

192.168.242.71:6380> info replication

NOAUTH Authentication required.

192.168.242.71:6380> auth hzmcdba

OK

192.168.242.71:6380> info replication

# Replication

role: slave

master_host:192.168.242.70

master_port:6379

master_link_status:up

master_last_io_seconds_ago:9

master_sync_in_progress:0

slave_repl_offset:266

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:8b90010b378c34aaf89c39a9002684363de31b40

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:266

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:266

 

 

从节点2

[root@localhost redis_slave2]# redis-cli -h 192.168.242.72 -p 6381

192.168.242.72:6381> auth hzmcdba

OK

192.168.242.72:6381> info replication

# Replication

role: slave

master_host:192.168.242.70

master_port:6379

master_link_status:up

master_last_io_seconds_ago:5

master_sync_in_progress:0

slave_repl_offset:882

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:8b90010b378c34aaf89c39a9002684363de31b40

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:882

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:882

 

 

同步情况:

主节点:

127.0.0.1:6379> set k1 1

OK

127.0.0.1:6379> get k1

"1"

 

从节点1 :

192.168.242.71:6380> get k1

"1"

 

从节点2 :

192.168.242.72:6381> get k1

"1"

 

可以看到同步状态正常,当然在相应的日志中也可以看到。


 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-2933097/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Hive 3.1.2安装部署
请登录后发表评论 登录
全部评论

注册时间:2014-10-13

  • 博文量
    90
  • 访问量
    85411