redis安装相对来说比较简单,下面为具体安装步骤。
一 安装 Redis
安装前准备
下载最新安装包
安装依赖包
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/ ,如需转载,请注明出处,否则将追究法律责任。