无论哪种中间件的搭建,正常主从模式搭建需要搭建在两台不同的服务器上才是正规的主从搭建模式。因为由于资源的限制,今天来演示一下在同一台服务器上,基于端口不一致搭建Redis的单机主从模式。
-
如果是不同的Linux服务器搭建Redis主从模式,只需准备两台Linux服务器即可,例如两台Liunx服务器的IP地址为192.168.79.129和192.168.79.130。在这里两台Linux安装单机模式部署两台Redis,参考【Redis系列:Linux下部署Redis 6.x 版本】
-
如何同一台Linux服务器搭建Redis主从模式,则先参考【Redis系列:Linux下部署Redis 6.x 版本】搭建单机版Redis,然后准备两个Redis的配置文件,例如分别为redis-6379.conf和redis-6380.conf,分别代表端口为6379的redis服务和端口为6380的redis服务。
执行以下命令复制两个配置文件
cp /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis-6379.conf cp /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis-6380.conf
其中redis-6379.conf主,redis-6380.conf从。
0x02:修改redis-6379.conf和redis-6380.conf配置文件分别先修改redis-6379.conf和redis-6380.conf配置文件的bind选项,绑定自己的IP地址。因为是同一台Linux服务器,所以这个配置项是一样的。
#redis-6379.conf bind 127.0.0.1 192.168.122.1 #redis-6380.conf bind 127.0.0.1 192.168.122.1
差异化修改
主redis-6379.conf
port 6379 dbfilename dump-6379.rdb requirepass new2020 pidfile /var/run/redis_6379.pid
从redis-6380.conf
port 6380 dbfilename dump-6380.rdb requirepass new2020 pidfile /var/run/redis_6380.pid replicaof 192.168.122.1 6379 masterauth new20200x03:验证是否搭建成功
使用如下命令,启动主Redis
./redis-server /usr/local/redis/etc/redis-6379.conf
验证主Redis是否启动成功
./redis-cli -h 192.168.122.1 -p 6379
使用如下命令,启动从Redis
./redis-server /usr/local/redis/etc/redis-6380.conf
验证从Redis是否启动成功
验证redis-6379与redis-6380是否形成主从模式
在redis-6379使用info命令,出现以下信息
192.168.122.1:6379> info # Server redis_version:6.0.7 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:e15fc28d4c56c2df redis_mode:standalone os:Linux 3.10.0-1062.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:9.3.1 process_id:4848 run_id:b2aed4fed2071bbfd2cf533e556e23646c6e2e86 tcp_port:6379 uptime_in_seconds:724 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:7249429 executable:/usr/local/redis/bin/./redis-server config_file:/usr/local/redis/etc/redis-6379.conf io_threads_active:0 # Clients connected_clients:1 client_recent_max_input_buffer:2 client_recent_max_output_buffer:0 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:0 # Memory used_memory:1937064 used_memory_human:1.85M used_memory_rss:2805760 used_memory_rss_human:2.68M used_memory_peak:1937064 used_memory_peak_human:1.85M used_memory_peak_perc:100.08% used_memory_overhead:1885804 used_memory_startup:803184 used_memory_dataset:51260 used_memory_dataset_perc:4.52% allocator_allocated:2053032 allocator_active:2379776 allocator_resident:6713344 total_system_memory:1927323648 total_system_memory_human:1.79G used_memory_lua:37888 used_memory_lua_human:37.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.16 allocator_frag_bytes:326744 allocator_rss_ratio:2.82 allocator_rss_bytes:4333568 rss_overhead_ratio:0.42 rss_overhead_bytes:-3907584 mem_fragmentation_ratio:1.45 mem_fragmentation_bytes:870248 mem_not_counted_for_evict:0 mem_replication_backlog:1048576 mem_clients_slaves:16986 mem_clients_normal:16986 mem_aof_buffer:0 mem_allocator:jemalloc-5.1.0 active_defrag_running:0 lazyfree_pending_objects:0 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1601084822 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:262144 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0 # Stats total_connections_received:46 total_commands_processed:134 instantaneous_ops_per_sec:1 total_net_input_bytes:11349 total_net_output_bytes:7679 instantaneous_input_kbps:0.04 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:1 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 expired_stale_perc:0.00 expired_time_cap_reached_count:0 expire_cycle_cpu_milliseconds:9 evicted_keys:0 keyspace_hits:0 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:149 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 tracking_total_keys:0 tracking_total_items:0 tracking_total_prefixes:0 unexpected_error_replies:0 total_reads_processed:391 total_writes_processed:232 io_threaded_reads_processed:0 io_threaded_writes_processed:0 # Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=168,lag=0 master_replid:168adabf704ba8a93a9285e200093b84352d3ac7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:168 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:168 # CPU used_cpu_sys:0.320768 used_cpu_user:0.308592 used_cpu_sys_children:0.001414 used_cpu_user_children:0.000000 # Modules # Cluster cluster_enabled:0 # Keyspace db0:keys=1,expires=0,avg_ttl=0 192.168.122.1:6379>
在以上信息可以看到
在redis-6380使用info命令,出现以下信息
192.168.122.1:6380> info # Server redis_version:6.0.7 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:e15fc28d4c56c2df redis_mode:standalone os:Linux 3.10.0-1062.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:9.3.1 process_id:5288 run_id:589ba5025a924c2d962bbbe0a8f85913d4d2c50a tcp_port:6380 uptime_in_seconds:295 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:7249597 executable:/usr/local/redis/bin/./redis-server config_file:/usr/local/redis/etc/redis-6380.conf io_threads_active:0 # Clients connected_clients:2 client_recent_max_input_buffer:2 client_recent_max_output_buffer:0 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:0 # Memory used_memory:1936344 used_memory_human:1.85M used_memory_rss:2859008 used_memory_rss_human:2.73M used_memory_peak:1936344 used_memory_peak_human:1.85M used_memory_peak_perc:100.08% used_memory_overhead:1885860 used_memory_startup:803208 used_memory_dataset:50484 used_memory_dataset_perc:4.46% allocator_allocated:2191304 allocator_active:2502656 allocator_resident:4780032 total_system_memory:1927323648 total_system_memory_human:1.79G used_memory_lua:37888 used_memory_lua_human:37.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.14 allocator_frag_bytes:311352 allocator_rss_ratio:1.91 allocator_rss_bytes:2277376 rss_overhead_ratio:0.60 rss_overhead_bytes:-1921024 mem_fragmentation_ratio:1.51 mem_fragmentation_bytes:965168 mem_not_counted_for_evict:0 mem_replication_backlog:1048576 mem_clients_slaves:0 mem_clients_normal:33972 mem_aof_buffer:0 mem_allocator:jemalloc-5.1.0 active_defrag_running:0 lazyfree_pending_objects:0 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1601084822 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:0 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0 # Stats total_connections_received:1 total_commands_processed:30 instantaneous_ops_per_sec:0 total_net_input_bytes:649 total_net_output_bytes:10505 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.04 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 expired_stale_perc:0.00 expired_time_cap_reached_count:0 expire_cycle_cpu_milliseconds:0 evicted_keys:0 keyspace_hits:0 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 tracking_total_keys:0 tracking_total_items:0 tracking_total_prefixes:0 unexpected_error_replies:0 total_reads_processed:32 total_writes_processed:295 io_threaded_reads_processed:0 io_threaded_writes_processed:0 # Replication role:slave master_host:192.168.122.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:406 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:168adabf704ba8a93a9285e200093b84352d3ac7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:406 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:406 # CPU used_cpu_sys:0.095399 used_cpu_user:0.166949 used_cpu_sys_children:0.000000 used_cpu_user_children:0.000000 # Modules # Cluster cluster_enabled:0 # Keyspace db0:keys=1,expires=0,avg_ttl=0 192.168.122.1:6380>
在以上信息可以看到
说明redis-6379与redis-6380形成主从模式
0x04:Redis主从基本操作
在主redis-6379写数据,在从redis-6380读数据
主redis-6379
从redis-6380
在从redis-6380写数据
直接报错,显示不能进行写操作