角色 | IP地址 | 端口号 | redis的安装目录 | redis的配置文件位置 | 哨兵的配置文件位置 |
---|---|---|---|---|---|
主库 | 192.168.234.158 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
从库一 | 192.168.234.159 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
从库二 | 192.168.234.160 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
说明:redis的安装,默认的安装位置都是/usr/local/bin/目录下,但是刚安装完redis时的redis的redis.conf和哨兵的配置文件sentinel.conf都是在你解压的redis的目录下;
如图所示;
手动的把两个配置文件拷贝到/usr/local/bin/目录下,这样做可以方便的管理配置文件
如下图所示,这里的文件比较少
命令:yum install gcc gcc-c++
确认是否安装成功
命令:gcc -v
上传redis-5.0.5.tar.gz的安装包到soft文件夹下
我用的是rz的上传方式,如果你的rz命令不好用,看我的安装命令或者利用其它上传工具
安装rz的命令:yum -y install lrzsz
解压这个安装包到当前的目录下
解压命令:tar -zxvf redis-5.0.5.tar.gz
解压成功后,显示如下,生成了一个redis-5.0.5文件夹
然后进入这个目录下,直接编译即可
命令:make
其实上面的这些步骤就可以了,redis就成功安装了,你可以试着启动一下,在当前目录下执行下面的这个命令
启动redis的命令:redis-server
验证redis是否正常启动
命令:ps -ef|grep redis
克隆的步骤
1.关闭当前的机器,在机器名上右键选择管理,在选择克隆
如图所示;
点击下一步;
点击下一步,这里默认的是选择创建链接克隆,但是我们要创建完整的克隆
选择完整克隆后,选择下一步,填写你要起的虚拟机的名称和你要安装虚拟机的位置
主机器的配置文件修改如下 | 配置文件解释 |
---|---|
#bind 127.0.0.1 | 这一行注释掉就可以了,才能实现不同机器间的通信 |
daemonize no 改成 yes | 意思是后台运行 |
logfile “/usr/local/src/redis-5.0.5/log/server.log” | 这一行是配置redis的日志文件 |
masterauth “123456” | 配置密码为123456 |
requirepass “123456” | 配置密码为123456 |
从机器的配置文件修改如下 | 配置文件解释 |
---|---|
#bind 127.0.0.1 | 这一行注释掉就可以了,才能实现不同机器间的通信 |
daemonize no 改成 yes | 意思是后台运行 |
logfile “/usr/local/src/redis-5.0.5/log/server.log” | 这一行是配置redis的日志文件 |
masterauth “123456” | 配置密码为123456 |
requirepass “123456” | 配置密码为123456 |
slaveof 192.168.234.158 6379 | 依赖的主机IP和端口号 |
redis.conf的配置文件已经改好了,可以拷贝到/usr/local/bin/目录下
然后以配置文件的方式启动三个节点的redis的服务端
命令:redis-server redis.conf
192.168.234.158 的机器(主),在usr/local/bin/下直接以加载配置文件的方式启动
同样的方式,启动192.168.234.159 的机器(从),192.168.234.160 的机器(从)
然后用客户端连接
命令:redis-cli -c -h 127.0.0.1 -p 6379
-c的意思是以集群的方式启动,-h是连接哪个服务端,-p是连接哪个端口
在158的机器上启动连接159的客户端
命令:redis-cli -c -h 192.168.234.159 -p 6379
因为我们设置的密码,所以登录时需要输入密码
命令:auth + 你设置的密码
在159的机器上启动连接160的客户端
命令:redis-cli -c -h 192.168.234.160 -p 6379
因为我们设置的密码,所以登录时需要输入密码
命令:auth + 你设置的密码
在160的机器上启动连接158的客户端
命令:redis-cli -c -h 192.168.234.158 -p 6379
因为我们设置的密码,所以登录时需要输入密码
命令:auth + 你设置的密码
输入命令role可以查看当前机器的角色,输入命令info replication可以看到详细的信息
说明:我现在的主是160,是因为我把主机器杀掉了(158被我干掉了),从新选择的主
在158的机器上输入role,可以查看当前的角色是从机器,现在是连接的159的服务端,现在代表159的机器是从机器
说明:role: 代表当前连接的服务端是主还是从
master_host:192.168.234.160 代表当前的主机器是160
master_link_status:up 代表主机器是启动着的
connected_slaves:0 代表当前连接这个机器的从机器,因为当前的机器是从机器,所以这个数字为0
在159的机器上输入role,可以查看当前的角色是从机器,现在是连接的160的服务端,现在代表160的机器是主机器
说明:role:master 代表当前连接的服务端是主机器
connected_slaves:2 代表当前连接这个机器的从机器,因为当前的机器是主机器,所以这个数字为2
首先,先查看redis中的数据
命令:keys *
设置一个key,value,因为当前的机器是从机器,所以不让写
在159的机器上设置一个key,value,159的机器连接的是160的服务端,代表主机器
然后去158的机器和160的机器上去查看,redis中是否有数据
158上有数据了,测试通过
160上也有数据了,测试通过
现在把主干掉,看下有什么效果
在158上设置一个key,暂时是设置不了的
在160上设置一个key,暂时是设置不了的
注意:
1、如果没有把slaveof 参数配置到参数文件中,从库重启后需要重新slaveof;即从库会变成主库(没有配置slaveof参数文件)
2、在主从搭建完成后,后面添加的从库slaveof后,会自动把数据从主库同步过来,生产上会有一定的性能影响。
3、从机只有读的权限,主机才能够写操作。当主机器挂掉后,我们发现,集群已经不行了,所以下面引入哨兵模式
下面演示手动的解决上面问题
Master 挂掉slave变master(反客为主)
在160的机器上,手动的执行这个操作,这时是连接的158的服务器
命令:slaveof no one
然后再查看这个角色信息,已经变成主机器了
Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;如果修复好的master重新启动后,原master变成slave。
哨兵的配置文件我已经拷贝到/usr/local/bin/目录下
修改三台机器的哨兵的配置文件如下;
protected-mode no 把这行打开,让三个哨兵可以通信
sentinel monitor mymaster 192.168.234.158 6379 2 这里配置的都是主机器的IP地址
sentinel auth-pass mymaster 123456 这里是配置集群的密码
然后启动三台机器的哨兵;在/usr/local/bin/目录下,执行命令
命令:redis-server sentinel.conf
现在让主机器挂掉,看集群的状态,158的机器已经变成主了,159的机器是它的从机器
看159机器上的详细信息,159是从机器了,显示的主是158,主机器的状态是活跃的
在158(主)上插入一条记录,看集群的通信状态
在159上查看这条记录是否存在
160的机器已经挂掉了,让我们重启启动下,看是否能实现数据的通信,如下图所示,可以实现通信