安装redisDB
主节点
apt install redis-server
修改配置 /etc/redis/redis.conf
bind 0.0.0.0
save "" # 禁止RDB持久化
#save 900 1
#save 300 10
#save 60 10000
appendonly no # 禁止AOF持久化
重启服务
systemctl restart redis-server
从节点配置文件
bind 0.0.0.0
save "" # 禁止RDB持久化
#save 900 1
#save 300 10
#save 60 10000
appendonly no # 禁止AOF持久化
# 从节点关键配置
slaveof 172.40.20.132 6379
主从验证
主从状态
主节点执行 redis-cli info replication
root@r750-132:~# redis-cli info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.40.20.131,port=6379,state=online,offset=84,lag=0
master_replid:1e214902bfe781c96a43a65ff20eefa9a9e6a75d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84
从节点检查
redis-cli info replication
# Replication
role:slave
master_host:172.40.20.132
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:168
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1e214902bfe781c96a43a65ff20eefa9a9e6a75d
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
数据同步
主节点插入数据
root@r750-132:~# redis-cli set name1 ckun
OK
root@r750-132:~# redis-cli get name1
"ckun"
从节点读取数据
root@r750-131:~# redis-cli get name1
"ckun"
测试程序
安装hiredis API
git clone https://github.com/redis/hiredis.git
cd hiredis/
make
make install
ldconfig
测试代码
#include <stdio.h>
#include <stdint.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <hiredis/hiredis.h>
typedef struct {
uint32_t orig_saddr;
uint32_t orig_daddr;
uint8_t proto;
uint16_t orig_sport;
uint16_t orig_dport;
uint32_t new_saddr;
uint32_t new_daddr;
uint16_t new_sport;
uint16_t new_dport;
} session_t;
#define CHANNEL "session_channel"
#define SESS_NUM 100000
uint16_t random_port() {
return rand() % 65535 + 1;
}
char* session_to_string(session_t *session) {
char *str = (char *)malloc(256);
snprintf(str, 256,
"{"
"\"orig_saddr\":%u,"
"\"orig_daddr\":%u,"
"\"proto\":%u,"
"\"orig_sport\":%u,"
"\"orig_dport\":%u,"
"\"new_saddr\":%u,"
"\"new_daddr\":%u,"
"\"new_sport\":%u,"
"\"new_dport\":%u"
"}",
session->orig_saddr,
session->orig_daddr,
session->proto,
session->orig_sport,
session->orig_dport,
session->