redis-3.2.0编译安装(单个实例)
#参考链接:http://www.cnblogs.com/langtianya/p/5189234.html
提示:2.x版本的redis不支持集群模式
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
yum -y install wget lrzsz tree openssl openssl-devel zlib zlib-devel pcre pcre-devel make gcc gcc-c++ libevent libevent-devel ncurses ncurses-devel
redis安装后,不需要安装tcl8.5也是可以使用的,但是要使用Redis的测试用例也就是tests目录下面用的是tcl脚本,就需要安装tcl8.5 或更高版本
cd /usr/local/src
wget -P cd /usr/local/src https://nchc.dl.sourceforge.net/project/tcl/Tcl/8.6.6/tcl8.6.6-src.tar.gz
tar xf tcl8.6.6-src.tar.gz
cd /usr/local/src/tcl8.6.6/unix
./configure --prefix=/usr/local/tcl8.6.6 --enable-64bit
make -j 2 && make install
添加环境变量
echo "export PATH=/usr/local//tcl8.6.6/bin:$PATH" >>/etc/profil
source /etc/profile
运行tclsh检测安装结果:
[root@Allen2 unix]# tclsh
%
表示成功 如果出现command not found 可以重新编译或者yum -y install tcl
如果已经下载redis那上传到/usr/local/src
如果没有下载 那么如下:
cd /usr/local/src
wget -P /usr/local/src http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xf redis-3.2.0.tar.gz
cd redis-3.2.0
make PREFIX=/usr/local/redis install #指定安装路径
这样安装完以后,在/usr/local/redis下面有一个/bin目录,里面有5个redis命令脚本
报错:
make时如果遇到zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory错误,用
make MALLOC=libc && make install #重新安装
#更改配置文件保证安全性
mkdir -p /usr/local/redis/{etc,logs}
#拷贝配置文件
cp /usr/local/src/redis-3.2.0/redis.conf /usr/local/redis/etc/redis.conf
cp /usr/local/src/redis-3.2.0/sentinel.conf /usr/local/redis/etc/sentinel.conf
#备份配置文件
cp /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.bak
cp /usr/local/redis/etc/sentinel.conf /usr/local/redis/etc/sentinel.conf.bak
#拷贝一些命令启动文件
cp /usr/local/redis/bin/* /usr/bin/ 或者是到/usr/sbin下
#更改配置文件
vim /usr/local/redis/etc/redis.conf
bind 192.168.1.106 #这个bind意思是绑定ip 一般生产线我们写成内网的ip 防止外网ip暴露 或者0.0.0.0允许所有,然后阿里云后台做端口限制
注意:如果这里没有允许0.0.0.0 执行redis-cli -h 127.0.0.1 -p 6379 这样可能本地都登陆不上的
port 6379 #默认端口6379 (线上可以参考别的服务器上的端口)
#设置密码,提供远程登录(可以不设置,看具体需求):
打开redis.conf文件(一般是我们启动redis时候指定的那个文件了)
vim /usr/local/redis/etc/redis.conf
requirepass 123456 #找到requirepass 取消注释 密码改成123456
更改配置文件:
timeout 30
daemonize yes
pidfile /usr/local/redis/logs/redis.pid #这个根据自己需求和个人习惯
logfile /usr/local/redis/logs/redis.log #需要mkdir一下这个目录
dir /usr/local/redis
#指定配置文件方式启动redis(一般公司生产线采用这样的方法启动):
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
然后启动:
nohup /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf > /dev/null 2>&1 &
写到/etc/rc.local里面,让他开机自启:
echo "/usr/bin/nohup /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf > /dev/null 2>&1 &" >>/etc/rc.local
在bin下的可执行程序:
redis-server: redis服务器
redis-cli: 命令行客户端
redis-benchmark: redis的性能测试工具
redis-check-aof: AOF文件修复工具
redis-check-dump: RDB文件检测工具
redis.conf : redis的配置文件
sentinel.conf:redis哨兵的配置文件
这两个文件在redis包解压目录下
采用默认配置文件方式启动redis(一般不这样启动):
/usr/local/redis/bin/redis-server
我们可以把/usr/local/redis/bin下面的命令拷贝到/usr/bin下面 这样就可以直接使用命令不需要进去redis安装目录了
如果需要安装多个实例的redis在一个服务器上,可以拷贝redis.conf 更改里面的配置文件 监听端口 日志文件 数据文件等路径改成不一样的 然后用redis-server指定配置文件启动即可
主从redis设置:
# slaveof
slaveof 192.168.20.126 6379 #指定主的ip和端口
如果master设置了验证密码,还需配置masterauth
# masterauth
主redis设置密码是:
requirepass 123456 #设置连接密码为123456
然后在master执行set age 24
在slave执行get age,看是否能得到24,如果能够得到值则说明配置成功
可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化
master配置文件中的save就是:
#save 900 1
#save 300 10
#save 60 10000
注释掉上面三个save就行了
拥有主从服务器的好处(从服务器是只读的,可以一主多从)
1. 主服务器进行读写时,会转移到从读,减轻服务器压力
2. 热备份 主从都可以设置密码,也可以密码不一致
关闭redis客户端:
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
如果做了redis主从,并且redis-master设置了连接密码:
在redis-master上 连接:
[root@Allen redis]# redis-cli -p 6379
127.0.0.1:6379> info replication
NOAUTH Authentication required.
127.0.0.1:6379> exit
我们会看到你报错,就是提示你 需要认证
[root@Allen redis]# redis-cli -p 6379 -a 123456 #用-a参数指定 设置的密码登录
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.20.126,port=7379,state=online,offset=351,lag=0
master_repl_offset:351
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:350
127.0.0.1:6379>
红色的代表redis-slave 有一个从redis已经连上,ip是: 192.168.20.126 端口是: 7379 状态:online 在线
在redis-slave上,远程连接redis-master:
[root@Allen2 logs]# redis-cli -h 192.168.20.125 -p 6379 #redis-master的ip 端口
192.168.20.125:6379> info replication
NOAUTH Authentication required. #没有用-a指定连接密码,同样提示需要认证
192.168.20.125:6379>
[root@Allen2 logs]# redis-cli -h 192.168.20.125 -p 6379 -a 123456 #-a指定远程的密码
192.168.20.125:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.20.126,port=7379,state=online,offset=729,lag=1
master_repl_offset:729
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:728
192.168.20.125:6379>
登录redis-slave:
[root@Allen2 logs]# redis-cli -p 7379
127.0.0.1:7379> info replication
# Replication
role:slave #redis-slave
master_host:192.168.20.125 #redis-master的ip
master_port:6379 #redis-master的端口
master_link_status:up #redis-master的状态
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:1023
slave_priority:100 #redis-slave的优先级
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:7379>
验证主从同步:
redis-master:192.168.20.125
redis-slave:192.168.20.126
登录redis-master:
[root@Allen redis]# redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1:6379>
127.0.0.1:6379> set name allen
OK
127.0.0.1:6379> get name
"allen"
登录redis-slave:
[root@Allen2 redis]# redis-cli -h 127.0.0.1 -p 7379
127.0.0.1:7379> get name
"allen"
看到主从已经同步
默认 redis主从是分离的:
登录redis-slave:
[root@Allen2 redis]# redis-cli -h 127.0.0.1 -p 7379
127.0.0.1:7379> set name abc
(error) READONLY You can't write against a read only slave.
127.0.0.1:7379>
可以看到 redis-slave 不能使用set 提示只能读,不能写
主从切换:
停止主redis:
[root@Allen redis]#redis-cli -h 127.0.0.1 -p 6379 shutdown #如果这个命令没用,那就kill -9 杀死redis进程
[root@Allen redis]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown #由于我们设置了验证密码,所以我们登陆或者杀死进程需要使用-a指定验证密码,并且在shutdown的时候-a指定密码一定要在shutdown前面,否则不会生效
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
将从redis设置成主redis:
[root@Allen2 redis]# redis-cli -p 7379 slaveof NO ONE
OK
测试主从redis是否切换:
[root@Allen2 redis]# redis-cli -p 7379
127.0.0.1:7379> set name kkk
OK
127.0.0.1:7379> get name
"kkk"
127.0.0.1:7379>
当原来的主redis恢复了以后,要将他切换回去:
1)将现在的主redis的数据进行保存
[root@Allen2 redis]# redis-cli -p 7379
127.0.0.1:7379> set name kkk
OK
127.0.0.1:7379> get name
"kkk"
127.0.0.1:7379> set name 123
OK
127.0.0.1:7379> get name
"123"
127.0.0.1:7379> save
OK
127.0.0.1:7379> get name
"123"
127.0.0.1:7379> exit
2)将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录
如果数据量大的话就用tar打包然后传过去到原先的主redis的根目录。这里的根目录是/usr/local/redis 目录。以为这是我的安装目录,我配置文件里面dump.rdb也在这个目录下,因为我启动redis就在这个目录下启动的。如果我们的redis-master上dump.rdb不是这个名字,那么我们拷贝过来后,要mv改成原来redis-master的rdb文件的名字,我这里直接scp了
[root@Allen2 redis]# scp dump.rdb 192.168.20.125:/usr/local/redis
The authenticity of host '192.168.20.125 (192.168.20.125)' can't be established.
RSA key fingerprint is 2c:cd:a9:58:f0:32:79:66:a2:48:ab:de:a8:59:7a:d9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.20.125' (RSA) to the list of known hosts.
[email protected]'s password:
dump.rdb
3)启动原来的主redis
[root@Allen redis]# redis-server ./redis6379.conf
[root@Allen redis]# ps -ef | grep redis
root 8176 1 0 22:52 ? 00:00:00 redis-server 0.0.0.0:6379
root 8180 7760 0 22:52 pts/0 00:00:00 grep redis
4)在现在的主redis中切换
[root@Allen redis]# redis-cli -h 192.168.20.126 -p 7379 slaveof 192.168.20.125 6379
OK
注意:redis-cli -h 192.168.20.126 -p 7379 指定从redis,slaveof 后面 是原先主redis的ip和端口192.168.20.125 6379
[root@Allen redis]# redis-cli -p 6379
127.0.0.1:6379> info
NOAUTH Authentication required.
127.0.0.1:6379> exit
[root@Allen redis]# redis-cli -p 6379 -a 123456
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.20.126,port=7379,state=online,offset=29,lag=1
master_repl_offset:29
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:28
127.0.0.1:6379>