数据库MHA-读写分离-redis
02 数据库服务高可用架构(MHA)
环境准备四台机器
- 主库:10.0.0.109 (db01)
- 从库1:10.0.0.203 (db02)
- 从库2:10.0.0.304 (db03)
- MHA管理节点:10.0.0.205
所有节点MySQL安装路径 :/usr/local/mysql
数据目录:/data/3306/data
1)如何搭建高可用数据库架构
步骤一:确认具有主从同步环境
编写主库配置信息:
bash
cat >/etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=51
port=3306
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>
EOF
编写从库配置信息(两台从库):
bash
# 第一台从库
cat >/etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=52
port=3306
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db02 [\\d]>
EOF
# 第二台从库
cat >/etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=53
port=3306
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db03 [\\d]>
EOF
三个节点执行(先清空或者备份数据):
bash
# 先备份重要数据(如果有的话)
mv /data/3306/data /data/3306/data.bak
# 重新创建空的数据目录
mkdir -p /data/3306/data
chown -R mysql:mysql /data/3306/data
# 重新初始化
mysqld --initialize-insecure --user=mysql --datadir=/data/3306/data --basedir=/usr/local/mysql
# 启动数据库服务
/etc/init.d/mysqld start
主库创建主从同步用户:
sql
-- 主库配置用户
create user repl@'10.0.0.%' identified with mysql_native_password by '1';
grant Replication slave on *.* to repl@'10.0.0.%';
两个从库做主从配置:
sql
-- 在两台从库上执行
change master to
master_host='10.0.0.206',
master_user='repl',
master_password='1',
master_auto_position=1;
start slave;
-- 检查主从状态
SHOW SLAVE STATUS\G
步骤二:安装部署高可用服务软件
MHA管理节点(10.0.0.205):
bash
# 创建软链接
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
# 生成密钥
rm -rf /root/.ssh
ssh-keygen
# 生成authorized_keys
cd /root/.ssh
mv id_rsa.pub authorized_keys
# 分发公钥到所有节点
scp -r /root/.ssh 10.0.0.119:/root
scp -r /root/.ssh 10.0.0.203:/root
scp -r /root/.ssh 10.0.0.204:/root
测试SSH连接:
bash
# 测试SSH连接--四台机器都输入以下命令,不需要输入密码即代表配置成功
ssh root@10.0.0.119 "hostname"
ssh root@10.0.0.203 "hostname"
ssh root@10.0.0.204 "hostname"
MHA的数据节点(三台Mysql节点:10.0.0.119,203,204):
bash
# 创建软链接
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
MYSQL节点安装Node包(三台机器):
bash
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
管理节点安装Manager包:
bash
# MHA软件程序安装,管理节点数据包安装
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
yum install -y mysql-devel
yum install -y perl-DBD-MySQL
# 验证安装
ldconfig -p | grep libmysqlclient
# 安装MHA包
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
# 测试perl模块
perl -MDBD::mysql -e 'print "DBD::mysql loaded successfully\n"'
编写MHA服务配置文件(只在管理节点操作):
bash
# 创建配置文件目录
mkdir -p /etc/mha
# 创建日志目录
mkdir -p /var/log/mha/app1
bash
# 编辑配置文件
vim /etc/mha/app01.cnf
配置文件内容:
ini
[server default]
manager_log=/var/log/mha/app1/manager # MHA的工作日志设置
manager_workdir=/var/log/mha/app1 # MHA的工作目录
master_binlog_dir=/data/3306/data # 主库的binlog目录
user=mha # 监控用户,利用此用户连接各个节点,做心跳检测(主要是检测主库的状态)
password=mha # 监控密码
ping_interval=2 # 心跳检测的间隔时间
repl_password=1 # 复制密码
repl_user=repl # 复制用户(用于告知从节点通过新主同步数据信息的用户信息)
ssh_user=root # ssh互信的用户(可以利用互信用户从主库scp获取binlog日志信息,便于从库进行数据信息补偿)
[server1] # 节点信息
hostname=10.0.0.119
port=3306
[server2]
hostname=10.0.0.203
port=3306
[server3]
hostname=10.0.0.204
port=3306
或者使用简化的创建方式:
bash
cat >/etc/mha/app01.cnf<<EOF
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/data/3306/data
user=mha
password=mha
ping_interval=2
repl_password=1
repl_user=repl
ssh_user=root
[server1]
hostname=10.0.0.119
port=3306
[server2]
hostname=10.0.0.203
port=3306
[server3]
hostname=10.0.0.204
port=3306
EOF
主库创建MHA监控管理用户:
sql
create user mha@'10.0.0.%' identified with mysql_native_password by 'mha';
grant all privileges on *.* to mha@'10.0.0.%';
MHA服务环境测试(管理节点):
bash
# 测试主从节点之间互信功能
masterha_check_ssh --conf=/etc/mha/app01.cnf
# 显示 Sat Aug 23 23:39:25 2025 - [info] All SSH connection tests passed successfully. 成功
# 测试主从同步状态
masterha_check_repl --conf=/etc/mha/app01.cnf
# 显示 MySQL Replication Health is NOT OK! 成功
启动MHA服务程序(管理节点):
bash
nohup masterha_manager --conf=/etc/mha/app01.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
参数说明:
nohup:将服务程序运行的进程放在后台运行--remove_dead_master_conf:将故障节点从高可用集群中移除--ignore_last_failover:可以在出现异常时连续启动高可用服务
检查状态:
bash
masterha_check_status --conf=/etc/mha/app01.cnf
# 应该显示: app01 (pid:XXXX) is running(0:PING_OK), master:10.0.0.51
查看进程:
bash
ps -ef|grep mha
输出示例:
root 3152 1977 0 18:09 pts/0 00:00:00 perl /usr/bin/masterha_manager --conf=/etc/mha/app01.cnf --remove_dead_master_conf --ignore_last_failover
root 3178 1977 0 18:10 pts/0 00:00:00 grep --color=auto mha
检查状态:
bash
masterha_check_status --conf=/etc/mha/app01.cnf
# 输出:app01 (pid:3152) is running(0:PING_OK), master:10.0.0.51
PS:MHA高可用服务,是一次性的高可用服务
优雅停止MHA服务:
bash
masterha_stop --conf=/etc/mha/app01.cnf
# 检查是否停止成功
masterha_check_status --conf=/etc/mha/app01.cnf
# 应该显示: app01 is stopped(2:NOT_RUNNING)
步骤三:MHA功能配置
1)高可用主库的监控
- 利用masterha_manager启动脚本,在启动MHA服务后,会自动调用masterha_master_monitor脚本
- 利用监控脚本向主库发送SQL语句请求
- 如果可以对SQL语句做响应,表示主库可以正常使用
- 如果不能对SQL语句做响应,会连续发送4次测试请求,4次连续请求都不能做响应,会触发MHA故障切换
2)会进行新的主库选举阶段
会划分角色信息:
- alive角色数组:将活着的节点会划分到此数组中(52 53)
- latest角色数组:将数据量和主库一致的节点划分到此数组中(52 53)
- pref角色数组:会检查MHA配置文件节点信息,看节点信息中是否有candidate_master配置项,有就会把对应节点划分到此数组中(52 53)
- bad角色数组 :划分到此数组中的节点,未来不会竞选新主角色
- 情况一:在从库上做了log_bin=0配置(禁用了二进制日志功能,无法获取binlog增量,被列入bad数组)
- 情况二:在从库上做了no_master=1配置(明确指令,直接被列入bad数组)
- 情况三:从库和主库的数据差异量较大(100M,被列入bad数组)
根据机制选择新主(优先级从上到下):
- 方案一:活着节点 + 数据量一致 + 被选择为太子的 + 不能出现在bad数组的节点 → 会优先选择为新主节点
- 方案二:活着节点 + 数据量一致 + 不能出现在bad数组的节点
- 方案三:活着节点 + 被选择为太子的 + 不能出现在bad数组的节点
- 方案四:活着节点 + 不能出现在bad数组的节点
PS:以上4种方案,进行选主时,出现多个主节点情况,看配置节点标签编号,标签编号越小,越会成为主节点
3)数据补偿过程
-
方案一:当原主库可以被SSH连接访问时(node节点 主从节点)
- 会利用SSH免密连接,拉去主库中的binlog日志文件,保存到新的从库中,进行数据补偿
-
方案二:当原主库不能被SSH连接访问时
- 利用从库之间数据差异性,进行数据补偿
- 利用binlog日志备份服务器,实现数据补偿(需要进行配置)
4)进行主从重构
在从节点上进行重新配置(主备切换的时候,自己重新配置这些信息):
sql
stop slave;
reset slave all;
change master to
master_host=新主IP地址
master_post=新主port
master_user=$repl_user
master_password=$repl_password;
5)实现主从切换应用透明(需要做配置)
应用透明表示让前端服务器感知不到后端有故障切换过程,利用VIP地址实现应用透明
6)实现MHA故障转移报警功能
告知管理人员,主数据库出现异常,发生了高可用故障切换
步骤四:测试MHA切换功能
实现自动切换
1)应用透明配置(VIP实现切换)
将这个脚本下载到 /usr/local/bin/ 目录下:
bash
vi /usr/local/bin/master_ip_failover
脚本关键配置:
perl
my $vip = '10.0.0.50/24'; # 定义VIP地址
my $key = '1'; # 定义VIP地址所在网卡的别名
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; # 在从节点(新主节点)会创建生成VIP
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; # 在主节点(原主节点)会删除VIP地址
my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50"; # 让所有数据库客户端主机,可以重新生成VIP地址的ARP记录(确保web前端服务器可以访问新的主节点)
bash
# 添加执行权限
chmod +x master_ip_failover
在MHA配置文件中,需要加载脚本文件:
bash
vi /etc/mha/app01.cnf
# 添加
master_ip_failover_script=/usr/local/bin/master_ip_failover
手动在主库先生成一个VIP:
bash
/sbin/ifconfig ens33:1 10.0.0.50/24
2)实现故障报警功能
bash
vim send_report
脚本关键配置:
perl
my $smtp='smtp.qq.com'; # 设置邮件服务域名信息
my $mail_from='330882721@qq.com'; # 设置邮箱服务登录账号
my $mail_user='330882721@qq.com'; # 设置邮箱服务登录账号
my $mail_pass='nqlgqhpvtvcjbhfh'; # 设置邮箱服务登录授权码
# my $mail_to=['主管@qq.com','dba@qq.com',xxx];
my $mail_to='330882721@qq.com'; # 当需要进行报警通知时,把报警邮件发给谁
bash
# 添加执行权限
chmod +x send_report
在MHA配置文件中,需要加载脚本文件:
bash
vi /etc/mha/app01.cnf
# 添加
report_script=/usr/local/bin/send_report
3)实现数据额外补偿功能
步骤一:需要有binlog日志备份服务器(管理节点当备份服务器):
bash
mkdir -p /binlog_backup/app01/
cd /binlog_backup/app01/
mysqlbinlog -R --host=10.0.0.206 --user=mha --password=mha --raw --stop-never binlog.000001 &
在MHA配置文件中添加binlog服务器配置:
bash
vi /etc/mha/app01.cnf
# 添加
[binlog1]
no_master=1 # 不存于竞选
hostname=10.0.0.54 # 将日志额外补偿到哪个主机上
master_binlog_dir=/binlog_backup/app01/ # 日志额外补偿的存储目录
运行服务:
bash
# 测试主从节点之间互信功能
masterha_check_ssh --conf=/etc/mha/app01.cnf
# 显示 Sat Aug 23 23:39:25 2025 - [info] All SSH connection tests passed successfully. 成功
# 测试主从同步状态
masterha_check_repl --conf=/etc/mha/app01.cnf
# 显示 MySQL Replication Health is NOT OK! 成功
# 启动MHA服务
nohup masterha_manager --conf=/etc/mha/app01.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
# 检查状态
masterha_check_status --conf=/etc/mha/app01.cnf
测试高可用功能:
自动切换测试:
bash
# 在主节点上关闭mysql数据库服务
/etc/init.d/mysqld stop
检查01:VIP地址是否漂移
- 主库地址是否消失
- 从库是否生成VIP
检查02:主从是否重新构建
-
新主节点做检查:
sqldb02 [(none)]>show slave status\G # 输出:Empty set, 1 warning (0.00 sec) -
从节点做检查:
sqlshow slave status\G # 输出:Master_Host: 10.0.0.52 # Master_Port: 3306
检查03:是否收到报警通知邮件
- 检查邮件信息
检查04:确认MHA服务状态
bash
masterha_check_status --conf=/etc/mha/app01.cnf
# 输出:app01 is stopped(2:NOT_RUNNING).
恢复MHA运行启动:
bash
# 在日志备份服务器上,启动日志备份功能
cd /binlog_backup/app01/
mysqlbinlog -R --host=10.0.0.50 --user=mha --password=mha --raw --stop-never binlog.000001 &
# 启动MHA服务
nohup masterha_manager --conf=/etc/mha/app01.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
# 检查状态
masterha_check_status --conf=/etc/mha/app01.cnf
# 输出:app01 (pid:8633) is running(0:PING_OK), master:10.0.0.52
WordPress连接数据库地址:10.0.0.50 VIP
测试完记得重新恢复主从复制:
新的主库创建账号:
sql
CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY '1';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%';
FLUSH PRIVILEGES;
原主库:
sql
-- 先停止旧的复制关系(如果有)
STOP SLAVE;
-- 清除旧的复制信息,这是一个关键步骤
RESET SLAVE ALL;
-- 重新配置主从
change master to
master_host='10.0.0.207',
master_user='repl',
master_password='1',
master_auto_position=1;
-- 启动复制
START SLAVE;
-- 检查状态
SHOW SLAVE STATUS\G
管理节点重新更新配置 /etc/mha/app01.cnf:
ini
[server1]
hostname=10.0.0.50 # 原主库,现已恢复为从库
[server2]
hostname=10.0.0.52 # 当前的主库
[server3]
hostname=10.0.0.53 # 另一个从库
重新启动MHA:
bash
# 停止MHA
masterha_stop --conf=/etc/mha/app01.cnf
# 启动MHA
nohup masterha_manager --conf=/etc/mha/app01.cnf < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
# 检查状态
masterha_check_status --conf=/etc/mha/app01.cnf
实现手动切换
步骤一:编写手动切换脚本
bash
vi master_ip_online_change
脚本关键配置:
perl
my $vip = "10.0.0.50/24";
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key $vip down";
my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50";
bash
# 添加执行权限
chmod +x master_ip_online_change
在MHA配置文件中加载脚本:
bash
vi /etc/mha/app01.cnf
# 添加
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
步骤二:利用命令实现手工高可用切换
bash
# 先停止MHA服务
masterha_stop --conf=/etc/mha/app01.cnf
# 执行手动切换
masterha_master_switch --conf=/etc/mha/app01.cnf --master_state=alive --new_master_host=10.0.0.53 --orig_master_is_new_slave --running_updates_limit=10000
参数说明:
--master_state=alive:确保在主节点活着的状态进行MHA高可用切换--new_master_host=10.0.0.53:指定在手工切换过程中,哪个节点成为新的主节点--orig_master_is_new_slave:实现主从重构功能--running_updates_limit=10000:在指定时间内,如果没有完成手工切换,会自动终止切换过程
测试:
- 测试01:VIP地址是否漂移
- 测试02:主从关系是否重构
掌握要点:
- MHA高可用搭建配置过程
- MHA高可用切换原理流程(监控、选主、数据补偿)
- MHA高可用如何实现自动和手动切换
02 数据库服务读写分离架构(ProxySQL-中间件)
作用:搭建读写分离架构,可以将读或者写请求进行负载均衡(写请求 500-1000,读请求 1000-2000)
1)如何安装部署ProxySQL程序
操作节点:ProxySQL服务器(建议独立部署,不要和MySQL同机)
步骤一:下载ProxySQL软件程序
- 官网:https://www.proxysql.com/
- 文档:https://www.proxysql.com/documentation/installing-proxysql/
- 版本:proxysql-2.4.6-1
步骤二:安装ProxySQL软件程序
bash
rpm -ivh proxysql-2.4.6-1-centos7.x86_64.rpm
# 或者
yum localinstall -y proxysql-2.4.6-1-centos7.x86_64.rpm
步骤三:启动ProxySQL软件程序
bash
systemctl start proxysql
检查端口:
bash
netstat -lntup|grep proxysql
# 输出:
# tcp 0 0 0.0.0.0:6032 0.0.0.0:* LISTEN 10269/proxysql
# tcp 0 0 0.0.0.0:6033 0.0.0.0:* LISTEN 10269/proxysql
端口说明:
- 6032端口:用于对ProxySQL服务进行远程管理端口(管理端口),用于管理员通过MySQL客户端连接进来,配置ProxySQL的各项设置。用户是admin,密码是admin
- 6033端口:用于对ProxySQL服务进行远程访问端口(业务端口),用于应用程序像连接普通MySQL数据库一样连接进来,执行SQL操作。ProxySQL会在这里接收请求并转发到后端数据库
步骤四:配置ProxySQL软件程序
bash
mysql -uadmin -padmin -h127.0.0.1 -P6032
配置方法:
- 01:需要先执行insert/update/delete SQL语句对ProxySQL中的功能表进行配置(以上配置信息都会写入到内存区域)
- 02:需要执行load加载内存中的配置信息,将配置信息保存到runtime中,实现功能配置生效
- 03:需要执行save加载内存中的配置信息,将配置信息保存到磁盘中,实现功能配置永久生效
配置步骤:
1)编写数据表 mysql_replication_hostgroups
作用:创建读写业务的数据组信息,相当于负载均衡一样,ProxySQL分别将读写的请求发送到不同的数据库中
sql
-- 在表中先创建两个数据组 10号组(写组)20号组(读组)
insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(10,20,'proxy');
-- 实现配置功能生效
load mysql servers to runtime;
-- 保存配置信息永久生效
save mysql servers to disk;
修改数据库只读状态:
- 主库 :
set global read_only=0;会被归为10写组 - 从库 :
set global read_only=1;会被归为20读组
2)编写数据表 mysql_servers
作用:将节点信息划分到读组或写组中
sql
-- 插入节点信息
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'10.0.0.50',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'10.0.0.206',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.207',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.208',3306);
-- 保存并加载
save mysql servers to disk;
load mysql servers to runtime;
3)编写数据表 global_variables
作用:创建数据库监控用户和密码信息。ProxySQL需要用一个账户定期连接后端所有MySQL服务器,检查它们的健康状态(是否存活、复制状态、read_only值等)
sql
-- 设置监控用户名
update global_variables set variable_value='monitor' where variable_name='mysql-monitor_username';
-- 设置监控密码
update global_variables set variable_value='123' where variable_name='mysql-monitor_password';
-- 加载并保存
load mysql variables to runtime;
save mysql variables to disk;
在数据库主节点上,创建ProxySQL应用的监控用户:
sql
create user monitor@'%' identified with mysql_native_password by '123';
grant replication client on *.* to monitor@'%';
4)编写数据表 mysql_users
作用:在ProxySQL中设置业务用户信息。应用程序连接ProxySQL时使用的用户名和密码。ProxySQL会用这个表里的信息去验证客户端连接,并用同样的凭证去连接后端数据库
sql
-- 插入用户信息
insert into mysql_users(username,password,default_hostgroup) values('root','123',10);
-- 加载并保存
load mysql users to runtime;
save mysql users to disk;
在主数据库上创建客户端访问用户(此时ProxySQL的该用户就可以访问数据库):
sql
create user root@'%' identified with mysql_native_password by '123';
grant all on *.* to root@'%';
5)编写数据表 mysql_query_rules
作用:SQL语句发送到ProxySQL(默认规则信息都不匹配,会将SQL请求转发到写组):匹配的规则,怎么样的规则就分发给哪个节点处理
sql
-- 规则1:SELECT ... FOR UPDATE 语句(写操作)发送到写组
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);
-- 规则2:普通SELECT语句发送到读组
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);
-- 加载并保存
load mysql query rules to runtime;
save mysql query rules to disk;
测试读写分离功能:
告知开发人员:
-
ProxySQL业务端口和地址信息,以及连接ProxySQL业务用户信息
- 10.0.0.54 6033 root 123
-
告知开发人员主从数据库server_id信息(主01 从02 从03)
运维人员做测试:
bash
# 访问的是业务端口6033,10.0.0.209 是 ProxySQL 服务所在服务器的网络地址
mysql -uroot -p123 -h10.0.0.209 -P6033 -e "select @@server_id;"
# 测试事务中的查询
mysql -uroot -p123 -h10.0.0.209 -P6033 -e "begin;select @@server_id;"
03 Redis数据库服务应用
Redis缓存型数据库服务:读取数据/存储数据,都会在内存空间进行操作(加快数据库数据读写效率)
- 作为MySQL数据库服务缓存设备,将不重要数据会放在Redis中进行处理(减少MySQL并发访问压力)
- 还可以将Redis服务做消息队列进行应用(消息队列)
1)Redis服务如何安装部署
步骤一:安装Redis服务程序
bash
# 下载Redis软件包为源码包
wget https://download.redis.io/releases/redis-6.2.10.tar.gz
cd /usr/local
tar xf redis-6.2.10.tar.gz
ln -s redis-6.2.10 redis
# 安装编译依赖
yum install -y gcc automake autoconf libtool make
# 编译安装
cd redis
make
步骤二:对Redis服务进行配置
bash
# 配置环境变量
vim /etc/profile
# 添加
export PATH=/usr/local/mysql/bin:/usr/local/redis/src:$PATH
# 加载配置
source /etc/profile
Redis服务配置文件编写:
bash
mkdir -p /data/6379
cat >/data/6379/redis.conf<<EOF
daemonize yes # 表示定义服务程序在后台以守护进程方式运行
port 6379 # 表示定义服务的默认端口
logfile /data/6379/redis.log # 表示服务运行日志存放路径
dir /data/6379 # 表示定义数据目录路径,用于持久化应用时存储数据
dbfilename dump.rdb # 表示持久化存储的数据文件名称(RDB方式完成Redis持久化)
EOF
或者使用简化方式:
bash
cat >/data/6379/redis.conf<<EOF
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF
步骤三:启动运行Redis服务
bash
redis-server /data/6379/redis.conf
测试Redis:
bash
redis-cli
127.0.0.1:6379> set username xiaoA
OK
127.0.0.1:6379> get username
"xiaoA"
2)Redis服务基础管理
安全功能配置(远程功能)
bash
vim /data/6379/redis.conf
# 添加或修改
bind 10.0.0.209 127.0.0.1
requirepass 123456
注意:目前只有209这台机器配置了Redis,所以自己连自己
远程连接测试:
bash
# 实现远程管理
redis-cli -h 10.0.0.209 -p 6379
# 实现远程登录时,做密码验证
redis-cli -h 10.0.0.209 -p 6379 -a 123456
# 在Redis客户端内进行登录验证
auth 密码信息
Redis数据库持久化功能配置
RDB持久化存储 :
可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
缺陷:Redis中的数据信息,不会实现实时存储
RDB存储配置(默认):
自动保存配置信息:
bash
"save"
"3600 1 300 100 60 10000" # 触发RDB备份时间和存储量信息
60 10000:1分钟内,如果有10000个key-value数据量变化 → 自动触发RDB快照保存机制300 100:5分钟内,如果有100个key-value数据量变化 → 自动触发RDB快照保存机制3600 1:1小时内,如果有1个key-value数据量变化 → 自动触发RDB快照保存机制
意思是:在3600秒(1小时)内,如果至少有1个键发生变化,则触发一次快照保存。
手动保存配置信息:
save命令:立刻马上将Redis中数据做保存
应用场景:
- 实现主从同步过程,可以应用RDB文件,将主库数据迁移恢复到从节点
优点:
- 主从复制:正如你所说,主节点首次同步数据给从节点时,会先生成一个RDB文件,然后传输给从节点。从节点加载这个RDB文件来完成初始数据的同步
缺点:
- 可能丢失数据:这是最大的问题。如果配置为每5分钟保存一次,那么一旦服务器宕机,你会丢失最近5分钟内的数据。
AOF持久化存储 :
会记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集(类似binlog)
缺陷:恢复加载持久化数据信息会比较慢,AOF持久化存储数据的文件,数据量较大
AOF存储配置(做设置):
bash
appendonly yes # 开启AOF持久化存储功能
appendfsync配置(AOF文件记录Redis操作记录方式):
always:每完成一个操作都会记录 → 安全everysec:每间隔一秒钟做一次记录 → 推荐no:实现数据信息持久化保存,由系统进行控制 → 性能
应用场景:
- 可以实现数据信息恢复操作