NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。
一、源码安装
redis1安装redis
#解压源码包
[root@redis1 ~]# tar zxf redis-7.4.0.tar.gz
[root@redis1 ~]# ls
anaconda-ks.cfg redis-7.4.0 redis-7.4.0.tar.gz
#安装编译工具
[root@redis1 ~]# cd redis-7.4.0/
[root@redis1 redis-7.4.0]# dnf install make gcc -y
[root@redis1 redis-7.4.0]# wget https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/os/Packages/i/initscripts-10.11.6-1.el9.x86_64.rpm /mnt
[root@redis1 redis-7.4.0]# yum localinstall initscripts-10.11.6-1.el9.x86_64.rpm -y
#执行编译命令
[root@redis1 redis-7.4.0]# make
[root@redis1 redis-7.4.0]# make install
#启动redis
[root@redis1 redis-7.4.0]# cd utils/
[root@redis1 utils]# ./install_server.sh
#解决报错问题
[root@redis1 utils]# vim install_server.sh
[root@redis1 utils]# ./install_server.sh
#配置redis
[root@redis1 utils]# vim /etc/redis/6379.conf
[root@redis1 utils]# /etc/init.d/redis_6379 restart
#查看信息
[root@redis1 utils]# redis-cli
127.0.0.1:6379>
redis2、redis3安装redis
#将文件同步到redis2、redis3
[root@redis1 ~]# scp -r redis-7.4.0 root@172.25.254.20:/root
[root@redis1 ~]# rsync -al /usr/local/bin/* root@172.25.254.20:/usr/local/bin
#下载相关依赖
[root@redis2 redis-7.4.0]# yum install initscripts -y
[root@redis2 utils]# ./install_server.sh
#启动redis服务
[root@redis2 utils]# redis-cli
二、redis基本操作示例
#查看配置
127.0.0.1:6379> config get *
#选择数据库
127.0.0.1:6379> select 1
127.0.0.1:6379[1]> get name
(nil)
#清空当前数据库
127.0.0.1:6379[1]> flashdb
#清空所有数据库
127.0.0.1:6379[1]> flashall
#移动key
127.0.0.1:6379> move name 1
#删除
127.0.0.1:6379[1]> del name
#改名
127.0.0.1:6379[1]> rename name id
#设置过期时间
127.0.0.1:6379> set name du ex 10000
#设置持久化
127.0.0.1:6379> persist name
#查询
127.0.0.1:6379> keys *
#判断是否存在
127.0.0.1:6379> exists name
三、redis主从复制
1.修改各节点的配置文件
以redis1为例
[root@redis1 ~]# vim /etc/redis/6379.conf
[root@redis1 ~]# /etc/init.d/redis_6379 restart
2.配置slave节点
以redis2为例
[root@redis2 ~]# vim /etc/redis/6379.conf
[root@redis2 ~]# /etc/init.d/redis_6379 restart
3.测试效果
#在mastser节点
[root@redis1 ~]# redis-cli
127.0.0.1:6379> set name du
OK
#在slave节点查看
[root@redis2 ~]# redis-cli
127.0.0.1:6379> get name
"du"
三、Redis的哨兵(高可用)
1.master节点配置
[root@redis1 ~]# cd redis-7.4.0/
[root@redis1 redis-7.4.0]# cp sentinel.conf /etc/redis/
[root@redis1 redis-7.4.0]# vim /etc/redis/sentinel.conf
#复制配置文件到其他节点
[root@redis1 redis-7.4.0]# scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/
[root@redis1 redis-7.4.0]# scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/
2 启动服务
[root@redis1 redis-7.4.0]# redis-sentinel /etc/redis/sentinel.conf
当master未出故障时
当master出现故障,master节点从redis1变成redis3
[root@redis1 ~]# redis-cli
127.0.0.1:6379> shutdown
not connected>
四、Redis Cluster(无中心化设计)
#删除redis1、redis2、redis3中的redis
[root@redis2 redis-7.4.0]# dnf install make
[root@redis2 redis-7.4.0]# dnf install gcc -y
[root@redis2 redis-7.4.0]# make uninstall
另外添加三台主机redis10、redis20、redis30
[root@redis1 ~]# yum install redis -y
[root@redis1 ~]# vim /etc/redis/redis.conf
[root@redis1 ~]# systemctl enable --now redis
[root@redis1 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>
[root@redis1 ~]# for i in 20 30 110 120 130
> do
> scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf
> done
以redis1为例
[root@redis1 ~]# systemctl enable --now redis
1、创建redis-cluster
[root@redis1 ~]# redis-cli --cluster create -a 123456 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.110:6379 172.25.254.120:6379 172.25.254.130:6379 --cluster-replicas 1
#检测redis集群状态
[root@redis1 ~]# redis-cli -a 123456 --cluster info 172.25.254.10:6379
[root@redis1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379
#写入数据
127.0.0.1:6379> set key1 value1
(error) MOVED 9189 172.25.254.20:6379
被分配到20的hash槽位上
[root@redis2 ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set key1 value1
OK
2、集群扩容
另外添加两台主机redis50、redis150
[root@redis50 ~]# dnf install redis -y
[root@redis150 ~]# dnf install redis -y
[root@redis2 ~]# scp /etc/redis/redis.conf root@172.25.254.50:/etc/redis/redis.conf
[root@redis2 ~]# scp /etc/redis/redis.conf root@172.25.254.150:/etc/redis/redis.conf
[root@redis50 ~]# systemctl start redis
[root@redis150 ~]# systemctl start redis
#将redis50加入到redis20所在的集群中
[root@redis2 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.50:6379 172.25.254.20:6379
#分配槽位
[root@redis2 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379
#添加slave
[root@redis2 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.150:6379 172.25.254.20:6379 --cluster-slave --cluster-master-id 912c2013bae0f8d2be6de7a79c95eefd8317a527
3、cluster集群维护
添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相 反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如 果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。
#移除要下线主机的哈希槽位
[root@redis2 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379
#删除master
[root@redis2 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.50:6379 912c2013bae0f8d2be6de7a79c95eefd8317a527