本站以分享各种运维经验和运维所需要的技能为主
《python零基础入门》:python零基础入门学习
《python运维脚本》: python运维脚本实践
《shell》:shell学习
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》从问题中去学习k8s
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》运维日常
《linux》运维面试100问
一、redis多实例
1.创建多实例目录
[root@db01 ~]# mkdir /service/redis/{6380,6381}
2.配置多实例配置文件
#第一台多实例配置 [root@db01 ~]# vim /service/redis/6379/redis.conf bind 172.16.1.51 127.0.0.1 port 6379 daemonize yes pidfile /service/redis/6379/redis_6379.pid loglevel notice logfile /service/redis/6379/redis_6379.log dir /service/redis/6379 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 #第二台多实例配置 [root@db01 ~]# vim /service/redis/6380/redis.conf bind 172.16.1.51 127.0.0.1 port 6380 daemonize yes pidfile /service/redis/6380/redis_6380.pid loglevel notice logfile /service/redis/6380/redis_6380.log dir /service/redis/6380 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 #第三台多实例配置 [root@db01 ~]# vim /service/redis/6381/redis.conf bind 172.16.1.51 127.0.0.1 port 6381 daemonize yes pidfile /service/redis/6381/redis_6381.pid loglevel notice logfile /service/redis/6381/redis_6381.log dir /service/redis/6381 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000
3.启动多实例
[root@db01 ~]# redis-server /service/redis/6379/redis.conf [root@db01 ~]# redis-server /service/redis/6380/redis.conf [root@db01 ~]# redis-server /service/redis/6381/redis.conf
4.检测启动
[root@db01 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14002/redis-server tcp 0 0 172.16.1.51:6379 0.0.0.0:* LISTEN 14002/redis-server tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 15541/redis-server tcp 0 0 172.16.1.51:6380 0.0.0.0:* LISTEN 15541/redis-server tcp 0 0 127.0.0.1:6381 0.0.0.0:* LISTEN 15545/redis-server tcp 0 0 172.16.1.51:6381 0.0.0.0:* LISTEN 15545/redis-server [root@db01 ~]# ps -ef | grep redis root 14002 1 0 Aug04 ? 00:01:34 redis-server 172.16.1.51:6379 root 15541 1 0 11:50 ? 00:00:00 redis-server 172.16.1.51:6380 root 15545 1 0 11:50 ? 00:00:00 redis-server 172.16.1.51:6381
5.连接多实例
[root@db01 ~]# redis-cli -p 6379 127.0.0.1:6379> quit [root@db01 ~]# redis-cli -p 6380 127.0.0.1:6380> quit [root@db01 ~]# redis-cli -p 6381 127.0.0.1:6381> quit
二、redis主从
1.主从复制特点
1.使用异步复制。 2.一个主服务器可以有多个从服务器。 3.从服务器也可以有自己的从服务器。 4.复制功能不会阻塞主服务器。 5.可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可。 #详细版本 1)Redis 使用异步复制。从 Redis2.8开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度。 2)一个主服务器可以有多个从服务器。 3)不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器,多个从服务器之间可以构成一个图状结构。 4)复制功能不会阻塞主服务器:即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。 5)复制功能也不会阻塞从服务器:只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。 6)在从服务器删除旧版本数据集并载入新版本数据集的那段时间内,连接请求会被阻塞。 7)还可以配置从服务器,让它在与主服务器之间的连接断开时,向客户端发送一个错误。 8)复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说,繁重的SORT命令可以交给附属节点去运行。
2.8版本以前
2.8版本之后
2.主从复制的原理
1.从服务器向主服务器发送 SYNC 命令 2.主库接到 SYNC 命令会调用 BGSAVE 命令创建一个 RDB 文件 3.主库将新的数据记录到缓冲区 4.主库将 RDB 文件传输到从库 5.从库拿到 RDB 文件以后,会清空自己的数据 ***** 6.从库读取 RDB 文件并导入数据 7.主库将新的数据从缓冲区传到从库进行同步
3.主从复制的机制
#SYNC与PSYNC 1)在 Redis2.8版本之前,断线之后重连的从服务器总要执行一次完整重同步(fullresynchronization)操作。 2)从 Redis2.8开始,Redis使用PSYNC命令代替SYNC命令。 3)PSYNC比起SYNC的最大改进在于PSYNC实现了部分重同步(partial resync)特性: 在主从服务器断线并且重新连接的时候,只要条件允许,PSYNC可以让主服务器只向从服务器同步断线期间缺失的数据,而不用重新向从服务器同步整个数据库。 PSYNC这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog), 并且主服务器和所有从服务器之间都记录一个复制偏移量(replication offset) 和一个主服务器 ID(master run id),当出现网络连接断开时,从服务器会重新连接,并且向主服务器请求继续执行原来的复制进程: 1)如果从服务器记录的主服务器ID和当前要连接的主服务器的ID相同,并且从服务器记录的偏移量所指定的数据仍然保存在主服务器的复制流缓冲区里面, 那么主服务器会向从服务器发送断线时缺失的那部分数据,然后复制工作可以继续执行。 2)否则的话,从服务器就要执行完整重同步操作。 #PSYNC优点: 1)PSYNC只会将从服务器断线期间缺失的数据发送给从服务器。两个例子的情况是相同的,但SYNC 需要发送包含整个数据库的 RDB 文件,而PSYNC 只需要发送三个命令。 2)如果主从服务器所处的网络环境并不那么好的话(经常断线),那么请尽量使用 Redis 2.8 或以上版本:通过使用 PSYNC 而不是 SYNC 来处理断线重连接, 可以避免因为重复创建和传输 RDB文件而浪费大量的网络资源、计算资源和内存资源。
4.配置主从
# 注意: - 如主服务器配置有密码,则从服务器需要在配置文件中添加下方信息,456为密码。然后才能进行主从同步 masterauth 456
1)准备环境
角色 | 主机 | 端口 |
---|---|---|
主库 | 172.16.1.51 | 6379 |
从库 | 172.16.1.51 | 6380 |
从库 | 172.16.1.51 | 6381 |
2)连接三台机器
[root@db01 ~]# redis-cli -p 6379 [root@db01 ~]# redis-cli -p 6380 [root@db01 ~]# redis-cli -p 6381
3)查看主从状态
127.0.0.1:6379> info replication # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6380> info replication # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6381> info replication # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
4)配置主从
127.0.0.1:6380> SLAVEOF 172.16.1.51 6379 OK 127.0.0.1:6381> SLAVEOF 172.16.1.51 6379 OK # 解除主从方法: redis-cli -a 密码 -p 端口 slaveof no one
5)查看主从状态
#查看主库 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=172.16.1.51,port=6380,state=online,offset=263,lag=0 slave1:ip=172.16.1.51,port=6381,state=online,offset=263,lag=1 master_repl_offset:263 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:262 #查看从库 127.0.0.1:6380> info replication # Replication role:slave master_host:172.16.1.51 master_port:6379 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:319 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0