1.检查c安装环境
查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5
gcc -v
# 升级gcc到5.3及以上,如下:
yum -y install gcc
升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
这样退出shell重新打开就是新版的gcc了
2.下载redis6 redis下载
$ wget http://download.redis.io/releases/redis-6.0.5.tar.gz
$ tar xzf redis-6.0.5.tar.gz
$ cd redis-6.0.5
$ make install PREFIX=/home/vagrant/redis6379
注:make install PREFIX=/home/vagrant/redis6379是把redis编译安装到这个目录,方便维护
执行make install后生成
3.复制redis-6.0.5下的redis.conf到当前/home/vagrant/redis6379/bin目录下
cp redis.conf ../redis6379/bin/
4.启动redis服务端和客户端
在/home/vagrant/redis6379/bin执行
#控制台启动redis服务端
[vagrant@vagrant1 bin]$ ./redis-server redis.conf
启动redis客户端
[vagrant@vagrant1 bin]$ ./redis-cli
5.redis.conf一些配置修改
bind 127.0.0.1修改为#bind 127.0.0.1,开启远程访问
daemonize no修改为daemonize yes,在后台运行
关闭密码访问保护,不关闭使用redis manage工具连接可能出现报错情况
protected-mode yes 修改为protected-mode no
-----------------------------------------------------------------------------------------------------------------------------
简单的主从复制
我们可以通过slaveof
命令,或者通过配置slaveof
选项,来使当前的服务器(slave)复制指定服务器(master)的内容,被复制的服务器称为主服务器(master),对主服务器进行复制操作的为从服务器(slave)
主服务器master可以进行读写操作,当主服务器的数据发生变化,master会发出命令流来保持对salve的更新,而从服务器slave通常是只读的(可以通过slave-read-only
指定),在主从复制模式下,即便master宕机了,slave是不能变为主服务器进行写操作的
一个master可以有多个slave,即一主多从;而slave也可以接受其他slave的连接,形成“主从链”层叠状结构(cascading-like structure),自 Redis 4.0 起,所有的sub-slave也会从master收到完全一样的复制流。如下图
主从复制的好处:
使用和配置主从复制是比较简单的,在从服务器slave的配置文件中设置slaveof
选项,或者直接使用slaveof
命令
这里我使用3台虚拟机来搭建一下,主服务器的ip为192.168.249.20
,两个从服务器的ip分别为192.168.249.21
和192.168.249.21
,端口号都为6379
,具体的配置如下
主服务器并不需要额外多配置什么,这里我们先把三台服务器的都需要改的地方列一下
# 设置为后台运行
daemonize yes
# 保存pid的文件,如果是在一台机器搭建主从,需要区分一下
pidfile /var/run/redis_6379.pid
# 绑定的主机地址,这里注释掉,开放ip连接
#bind 127.0.0.1
# 指定日志文件
logfile "6379.log"
在从服务器中添加配置slaveof
选项,在5.0版本中使用了replicaof
代替了slaveof
(https://github.com/antirez/redis/issues/5335),slaveof
还可以继续使用,不过建议使用replicaof
。如果是使用命令行来复制的话,重启之后会无效
# replicaof
replicaof 192.168.249.20 6379
配置好redis.conf
之后,我们分别启动3台服务器,可以用户命令info replication
查看复制信息
192.168.249.20:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.249.22,port=6379,state=online,offset=700,lag=0
slave1:ip=192.168.249.21,port=6379,state=online,offset=700,lag=0
master_replid:b80a4720c0001efb62940f5ad6abaf9cdaf7a813
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:700
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:700
192.168.249.21:6379> info replication
# Replication
role:slave
master_host:192.168.249.20
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:854
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b80a4720c0001efb62940f5ad6abaf9cdaf7a813
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:854
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57
repl_backlog_histlen:798
192.168.249.22:6379> info replication
# Replication
role:slave
master_host:192.168.249.20
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:854
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b80a4720c0001efb62940f5ad6abaf9cdaf7a813
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:854
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:854
接下来我们可以在主服务器中写入数据,然后可以在其他的从服务器中读取数据
192.168.249.20:6379> set test 'Hello World'
OK
192.168.249.21:6379> get test
"Hello World"
192.168.249.22:6379> get test
"Hello World"
然后我们试着在从服务器中写入数据,会提示不能在只读的从服务器中写入数据
192.168.249.21:6379> set test2 hello
(error) READONLY You can't write against a read only replica.
如果我们需要slave对master的复制进行验证,可以在master中配置
requirepass
选项设置密码那么需要在从服务器中使用该密码,可以使用命令
config set masterauth
,或者在配置文件中设置masterauth