前言
Redis
是一个高性能的key-value
数据库,现时越来越多企业与应用使用Redis
作为缓存服务器。楼主是一枚JAVA
后端程序员,也算是半个运维工程师了。在Linux
服务器上搭建Redis
,怎么可以不会呢?下面楼主就带着大家从0开始,依次搭建:Redis
单机服务器 -> Redis
主从复制 ->Redis-Sentinel高可用
。逐步搭建出高可用的Redis缓存服务器。
搭建Redis
1. 下载并解压
首先从Redis
官网下载Redis
并解压,楼主使用的版本是4.0.2。依次执行如下命令:
cd /opt
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zcvf redis-4.0.2.tar.gz
如果没有安装`gcc`依赖包,则安装对应依赖包
yum install -y gcc-c++ tcl
2. 编译并安装
下载并解压完毕后,则对源码包进行编译安装,楼主的Redis
安装路径为/usr/local/redis
,同学们可以自行修改语句:make install PREFIX=你想要安装的路径
cd /opt/redis-4.0.2
make install PREFIX=/usr/local
复制Redis
相关命令到/usr/sbin
目录下,这样就可以直接执行这些命令,不用写全路径
cd /usr/local/redis/bin
sudo cp redis-* /usr/sbin
3. 建立Redis配置文件
安装完成之后将 Redis
配置文件拷贝到系统配置目录/etc/
下,redis.conf
是 Redis
的配置文件,redis.conf
在 Redis
源码目录,port
默认 6379。
cp /usr/local/redis-4.0.2/redis.conf /etc/
Redis
配置文件主要参数解析参考
daemonize no #redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)
pidfile /var/run/redis.pid #指定redis进程的PID文件存放位置
port 6379 #redis进程的端口号
bind 127.0.0.1 #绑定的主机地址
timeout 300 #客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
loglevel verbose #redis日志级别,可用的级别有debug.verbose.notice.warning
logfile stdout #log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
databases 16 #设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
save <seconds><changes> #指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件;
rdbcompression yes #指定存储至本地数据库时是否压缩文件,默认为yes即启用存储;
dbfilename dump.db #指定本地数据库文件名
dir ./ #指定本地数据问就按存放位置;
slaveof <masterip><masterport> #指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
masterauth <master-password> #当master设置了密码保护时,slave服务连接master的密码;
requirepass footbared #设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
maxclients 128 #设置同一时间最大客户连接数,默认无限制;redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxmemory<bytes> #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename appendonly.aof #指定跟新日志文件名默认为appendonly.aof
appendfsync everysec #指定更新日志的条件,有三个可选参数no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
由于Redis
默认是前端启动,必须保持在当前的窗口中,如果使用ctrl + c
退出,那么Redis
也就退出,不建议使用。
vi /etc/redis.conf
修改Redis
配置文件把旧值daemonize no
改为 新值daemonize yes
Redis
默认只允许本机访问,可是有时候我们也需要 Redis 被远程访问。
vi /etc/redis.conf
找到 bind 那行配置,默认是: # bind 127.0.0.1
去掉#
注释并改为: bind 0.0.0.0
此设置会变成允许所有远程访问。如果想指定限制访问,可设置对应的IP。
找到logfile
那行配置,默认是:logfile ""
,改为logfile /var/log/redis_6379.log
vi /etc/redis.conf
找到默认是被注释的这一行:# requirepass foobared
去掉注释,把 foobared
改为你想要设置的密码,比如我打算设置为:123456
,所以我改为:requirepass "123456"
修改之后重启下服务
有了密码之后,进入客户端,就得这样访问:redis-cli -h 127.0.0.1 -p 6379 -a 123456
4. Redis常用操作
4.1 启动/usr/local/redis/bin/redis-server /etc/redis.conf
```
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
```
ps -ef | grep redis
redis-cli
redis-cli shutdown
echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >/etc/rc.local
添加规则:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
保存规则:service iptables save
重启 iptables:service iptables restart
5. 将Redis注册为系统服务
在/etc/init.d目录下添加Redis服务的启动,暂停和重启脚本:
vi /etc/init.d/redis
脚本内容如下: