复制压缩包到Ubuntu服务器,并解压缩
tar -xzvf redis-7.0.5.tar.gz
安装gcc
因为第一次执行make命令编译redis时报错了,所以需要先安装gcc环境
# 安装gccsudo apt-get install gcc
执行编译命令
cd redis-7.0.5
make
执行安装命令
安装过程可能会报pkg-config: not found
# 解决pkg-config: not found错误
sudo apt-get install pkg-config
# 将redis安装到/usr/local/redis
make install PREFIX=/usr/local/redis
添加环境变量
编辑/etc/profile
文件
vi /etc/profile
最后一行添加环境变量
export PATH=$PATH:/usr/local/redis/bin
使系统变量生效
source /etc/profile
添加配置文件
cd /usr/local/redis
mkdir conf
将解压redis压缩包后文件夹里的redis.conf拷贝到conf文件夹下
配置远程主机连接redis
# 默认配置:bind 127.0.0.1,只允许host主机访问redis服务
bind 192.168.110.97
# 默认配置:protected-mode yes。保护模式开启后,不允许其他host的客户端连接。
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured.
protected-mode no
# 配置redis启动时已后台方式运行
daemonize yes
启动主节点
redis-server /usr/local/redis/conf/redis.conf
查看主从复制关系
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:d4bf4a9f7a62576d53ca4ab37a661b0e0a8e15b6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
主从复制也就是主从模式,当用户向master节点写入数据时,redis同步机制将数据同步到slave节点。配置主从复制后,master节点提供读写服务,slave节点只提供读服务,如果在slave节点上执行写命令,会提示报错READONLY You can't write against a read only replica.
主从模式特点:
当启动一个slave节点后,会向master节点发送一个sync命令,请求同步连接。不管slave与master是第一次连接还是重新连接,master节点都会启动一个后台进程,将数据快照保存到文件中,同时master节点会将记录所有修改数据的命令并将其缓存在数据文件中。
后台进程完成缓存操作后,master将数据文件发送给slave,slave将数据文件保存到硬盘上,然后将其加载到内存中,接着master就会把所有修改数据的命令发送给slave。
创建从节点slave1和slave2的配置文件redis-6380.conf,redis-6381.conf
redis-6380.conf
port 6380
bind 192.168.110.97
protected-mode no
daemonize yes
# replicaof
replicaof 192.168.110.97 6379
redis-6381.conf
port 6381
bind 192.168.110.97
protected-mode no
daemonize yes
# replicaof
replicaof 192.168.110.97 6379
启动slave1和slave2
redis-server /usr/local/redis/conf/redis-6380.conf
redis-server /usr/local/redis/conf/redis-6381.conf
查看主从复制关系
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.110.97,port=6380,state=online,offset=14,lag=1
slave1:ip=192.168.110.97,port=6381,state=wait_bgsave,offset=0,lag=0
master_failover_state:no-failover
master_replid:78358da5a228467f0de1278fea4685ad81b21216
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
测试主节点宕机
# Replication
role:slave
master_host:192.168.110.97
master_port:6379
# 主节点连接状态为down
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:17094
slave_repl_offset:17094
master_link_down_since_seconds:62
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:78358da5a228467f0de1278fea4685ad81b21216
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:17094
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:14687
repl_backlog_histlen:2408
主节点宕机后,slave节点的角色没有发生任何变化,master_link_status的值变为down,意味着slave节点只能提供读服务,无法承担起master节点的写任务,因此整个redis系统将无法正常运行。
如果master节点宕机后,slave节点能够主动变成master节点,那么上述问题就解决啦。