Redis安装配置文档(主从)
- 下载Redis,这里我们使用Redis-2.8.24,文件名为:
redis-2.8.24.tar.gz
,放到Linux目录/usr/local/src
下。 - 安装Redis之前我们需要先安装Redis的依赖程序tcl和gcc,如果不安装在执行make编译的时候就会报错,命令:
yum install -y tcl gcc
- 下面就开始编译安装Redis:
# 先进入到local的src目录下
> cd /usr/local/src
# 利用tar命令解压redis压缩包,同时把解压缩包放到local目录下
> tar zxvf redis-2.8.24.tar.gz -C /usr/local
> cd /usr/local/
# 修改redis目录名称
> mv redis-2.8.24 redis
> cd redis
# 利用make命令进行源码编译
> make
# make test命令可执行也可不执行,在编译源码后,系统提示最好进行测试
> make test
# 进行安装
> make install
# 创建新目录,把redis配置文件拷贝到新建的目录下
> mkdir /etc/redis
> cp redis.conf /etc/redis/
- 执行初始化脚本s
cd /usr/local/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!
- 初始化脚本以后,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
- 使用客户端操作一下redis吧。
redis-cli
>set name hello
OK
>get name
"hello"
- 这时我们在本机上可以直接连接,但是如果需要远程连接的话,必须要在防火墙上开通redis的监听端口,这里是6379端口,下面编辑防火墙配置文件,开放6379端口。
# 进入iptables文件
> vim /etc/sysconfig/iptables
# 添加这一句命令,开启6379端口号
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
# 添加完成后,重启防火墙
> systemctl restart iptables
Redis主从配置
配置主从
Redis主从配置只需要修改Redis的配置文件,下面我们来看一下主和从的配置:
- 主配置
masterauth hokai #主库认证密码
requirepass hokai #客户端连接密码
注释bind 127.0.0.1
- 从配置
其他与主配置一样,只不过是将slaveof指定主服务器的IP地址和端口
slaveof 192.168.99.111 6379
- 重启主和从的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 还真没报错了。