首先要先在虚拟机上下载并安装redis数据库:
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
解压redis的压缩包:
tar -zxvf redis-3.0.7.tar.gz
进入到redis的文件目录在里面执行编译:
[root@sanmao local]# cd redis/
[root@sanmao redis]# make
编译完后可以用检查版本的命令要验证是否安装成功:在这里要说一下你要想不在redis的指定目录下运行redis客户端和服务端就要把redis-server ,redis-cli 拷贝到 /usr/bin目录中
cp ./src/redis-server /usr/bin/
[root@sanmao ~]# redis-cli -v
redis-cli 4.0.1
安装完成后就要启动了,redis默认有三种启动方式1.redis -server 2加上端口号 redis -server --port 6379 3.用配置文件启动 redis -server /usr/local/redis/redis.conf
用配置文件启动需要修改/usr/local/redis/redis.conf文件中的一些配置:1.你要修改redis.conf文件,在里面找到GENERAL这块把里面第一行daemonize no修改成yes;
因为redis默认是不用守护进程启动的,你需要把redis 改成守护进程启动它会自动在var/run/redis中生成一个 pid文件,来予以监控。
2.redis数据库默认是没有密码的, 但是为了防止其它网段随意的访问redis数据库,需要给 redis数据库设置密码有两种方法:1).修改redis.conf中 的security这块把requirepass前面的注释删掉 并在后 面 写上你要设置的密码;
在连接redis的客户端:
前期工作做完了,接下来进入正题 先说redis第一种复制机制一主两从(我是用一台虚拟机配置的,但是工作中一般最少都是三台物理机)既然要在一台物理机上搭建那就要区别端口把redis.conf文件分别拷贝三份到/usr/local/myredis(这个文件夹自己创建的) 下分别为redis6379.conf,redis6381,redis6382.conf;
主配置文件需要修改的不多,就是添加个日志文件
从配置文件需要修改端口,pid文件,日志文件,还有你主配置文件要是设置了密码也要给从配置文件做身份验证,不然主服务器是拒绝从服务器访问和同步数据的
从服务器6382也照以上修改然后保存退出,接下来去挨个启动主从服务器的服务端和客户端
[root@sanmao ~]# redis-server /usr/local/myredis/redis6379.conf
[root@sanmao ~]# redis-cli -p 6379 -a 666666
127.0.0.1:6379>
[root@sanmao ~]# redis-server /usr/local/myredis/redis6381.conf
[root@sanmao ~]# redis-cli -p 6381 -a 666666
127.0.0.1:63811>
[root@sanmao ~]# redis-server /usr/local/myredis/redis6382.conf
[root@sanmao ~]# redis-cli -p 6382 -a 666666
127.0.0.1:6382>
现在输入第一个命令查看redis各服务器的状态:inforeplication (信息的复制)
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:4d46e21c113721dc53676ec54dd63a423628ad27
master_replid2:af9557709223a2718ec8b5d7255ef835ff35b8d4
master_repl_offset:210740
second_repl_offset:210741
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:209327
repl_backlog_histlen:1414
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:0
master_replid:472235d303bf723827b36b766ddaa41a8141ecc9
master_replid2:af9557709223a2718ec8b5d7255ef835ff35b8d4
master_repl_offset:210712
second_repl_offset:210713
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:209327
repl_backlog_histlen:1386
127.0.0.1:6382> info replication
# Replication
role:master
connected_slaves:0
master_replid:af9557709223a2718ec8b5d7255ef835ff35b8d4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210740
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
刚才设置了6379为主服务器,往里面输入键值:
127.0.0.1:6379> set m1 12
OK
127.0.0.1:6379> set m2 15
OK
127.0.0.1:6379> set m3 18
OK
127.0.0.1:6379> keys *
1) "m2"
2) "m1"
3) "m3"
再去从服务器同步连接主服务器已实现主从复制的执行的命令是:slaveof 从服务名 ip (要是一台机器配置就是localhost,要是多台就改成本机的ip),后面跟的是要以哪个redis服务器的端口为主服务器
127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6381>
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:210896
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4d46e21c113721dc53676ec54dd63a423628ad27
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210896
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:210869
repl_backlog_histlen:28
最后就可以验证到底有没有搭建成功呢,在6379主服务器上在输入几个键值再从服务器上要是能够获取到说明就是配置成功了
127.0.0.1:6379> set m5 28
OK
127.0.0.1:6379> set m6 32
OK
127.0.0.1:6381> get m5
"28"
127.0.0.1:6382> get m6
"32"
这是主服务器最终的状态:
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=211551,lag=0
slave1:ip=127.0.0.1,port=6382,state=online,offset=211551,lag=1
master_replid:4d46e21c113721dc53676ec54dd63a423628ad27
master_replid2:af9557709223a2718ec8b5d7255ef835ff35b8d4
master_repl_offset:211551
second_repl_offset:210741
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:209327
repl_backlog_histlen:2225
那之前输入的键值能不能在从服务器上获取呢 ,答案是能的因为不管从服务器是从那块开始接手的,都会把主服务器里的数据整个同步一遍,之后就是增量的变化了;