做游戏代练的网站/成都私人网站制作
mysql安装
到官网www.mysql.com下载源码版本
实验室使用5.7.40版本
tar xf mysql-boost-5.7.40.tar.gz
#解压
cd mysql-boost-5.7.40/
yum install -y cmake gcc-c++ bison
#安装依赖性
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.40/boost/boost_1_59_0
#配置
make
#编译
make install
#安装
cd /usr/local/mysql/
cd support-files/
cp mysql.server /etc/init.d/mysqld
#拷贝启动脚本
vim /etc/my.cnf
初始化数据库
mkdir /data/mysql -p
创建数据目录
useradd -M -d /data/mysql/ -s /sbin/nologin mysql
#-M不创建用户主目录,-d指定主目录为/data/mysql/,非交互式shell,用户无法直接登陆系统,只能用于运行数据库服务
chown mysql.mysql /data/mysql/
#将目录/data/mysql/所有人设为mysql,所属组也设为mysql
vim ~/.bash_profile
#编辑用户环境变量
source ~/.bash_profile
#重新加载配置
mysqld --initialize --user=mysql
#初始化mysql,--initialize表示初始化数据库,--user=mysql指定以mysql用户身份运行
/etc/init.d/mysqld start
#启动mysql
netstat -antlp |grep 3306
#默认端口为3306
安全初始化
mysql_secure_installation
#安全初始化脚本
登录数据库
mysql -p
#登录mysql数据库
主从复制
MySQL 主从复制是一种常见的数据库复制技术,用于将一个 MySQL 主服务器上的数据实时复制到一个或多个 MySQL 从服务器上。主从复制通常用于提高系统的可用性、数据备份、负载均衡和故障恢复。
以下配置方法都可在mysql官网www.mysql.com查看
1.master配置
vim /etc/my.cnf
/etc/init.d/mysqld restart
#重启服务
在生产环境中一般不会随意重启服务,热生效的方法比较常见
CREATE USER 'repl'@'%' IDENTIFIED BY 'westos';
#创建一个名为 'repl' 的用户,该用户可以从任何主机('%'通配符表示所有主机)连接到数据库,并使用 "westos" 作为密码进行身份验证
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
#授予 'repl' 用户在所有数据库上进行复制操作的权限
show master status;
#查看master状态
mysqlbinlog mysql-bin.000001
#查看二进制日志
mysqlbinlog mysql-bin.000001 -vv
#查看详细信息
2.slave配置
server2:
从server1中将编译好的mysql目录拷贝到server2
scp -r /usr/local/mysql/ server2:/usr/local/
只需重新初始化即可
source .bash_profile
#重新读取配置
scp server1:/etc/my.cnf /etc/
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#拷贝启动脚本
创建用户和数据目录,修改数据目录所有人所有组
mysqld --initialize --user=mysql
#初始化mysql,生成初始密码
/etc/init.d/mysqld start
#启动服务
mysql_secure_installation
#运行安全初始化脚本
mysql> CHANGE MASTER TO MASTER_HOST='192.168.145.11', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=595;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#从服务器要连接到名为 '192.168.145.11' 的主服务器,并使用用户名为 'repl'、密码为 'westos' 进行身份验证
MASTER_LOG_FILE='mysql-bin.000001'指定主服务器上二进制文件的文件名
MASTER_LOG_POS=595 指定了从服务器开始读取主服务器二进制日志的位置,595是目前最新位置
start slave;
show slave status\G;
#加\G可以使输出以更易读的方式呈现,每个状态变量单独显示在一行上
3.测试数据同步
server1(master):
mysql> create database westos;
#创建westos库
server2(slave):
mysql> show databases;
#查看数据库
server1(master):
进入westos库,创建表user_tb
username varchar(25) not null,
#定义了一个名为username的字段,类型为varchar(可变长度字符串),最大长度为25个字符,并且指定该字段不允许为空(not null)
password varchar(50) not null
#定义了一个名为password的字段,类型为varchar,最大长度 50 个字符,并且该字段不允许为空
mysql>desc user_tb;
insert into user_tb values ('user1','123');
insert into user_tb values ('user2','456');
server2(slave):
select * from user_tb;
#查询表user_tb中所有数据
复制成功
4.再添加一个slave server3
安全初始化及之前的操作和server2相同,设置server-id=3即可
server3:
此时master上已经有了数据,在不知道初始二进制日志位置的情况下如何同步
server1:
mysqldump -pwestos westos > dump.sql
#备份westos库,导出到名为dump.sql的sql文件中
scp dump.sql server3:
#将dump.sql拷贝到server3
注意:
生产环境中备份时需要锁表,保证备份前后的数据一致
mysql> FLUSH TABLES WITH READ LOCK;
备份后再解锁
mysql> UNLOCK TABLES;
注意:
mysqldump命令备份的数据文件,在还原时会先DROP TABLE,合并数据时要删除此语句
server3:
mysqladmin -pwestos create westos
#无需登录数据库直接创建westos库,为非交互式方式
mysql -pwestos westos < dump.sql
#导入,仍是非交互式
合并:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.145.11', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1533;
#设置主服务器,MASTER_LOG_POS=1533设为当前的号1533
mysql> start slave;
mysql> show slave status\G;
测试主从同步:
server1(master):
mysql> insert into westos.user_tb values ('user3','666');
#在表中再输入一组值
server2(slave):
server3(slave):
主从复制是单向的,只能在master操作,一旦在slave操作,就会导致主从复制不一致
IO线程负责与主服务器建立连接,读取主服务器的二进制日志(binary log)内容,并将这些日志写入到从服务器的中继日志(relay log)中
SQL线程负责读取中继日志中的二进制日志文件(binary log events),即在从服务器上执行这些事件,从而将主服务上的操作在从服务器上进行重放/回放
读操作远远高于写操作时,使用一主多从架构,数据库外层要接入负载均衡层。能够做同样操作,主和从的主机硬件也基本相同
binlogdump复制二进制日志时属于异步复制
异步复制的优点在于主服务器不需要等待所有从服务器都处理了相同的更改之后才能继续执行事务,这样可以减少对主服务器性能的影响。但是,由于异步复制的特性,从服务器上的数据可能无法立即与主服务器保持完全同步,因此在某些情况下可能会发生数据延迟,若此时主服务器挂掉,那么将会有数据丢失。
尽管异步复制提供了较好的性能和可伸缩性,但在某些应用场景下,对数据一致性要求较高的系统,如金融级的数据库,要求零数据丢失,可能会选择使用同步复制或半同步复制来确保数据的及时性和一致性
半同步模式
"after_commit" 意味着在数据库事务成功提交后触发的事件。这表示当事务成功提交到数据库后,相关的操作或触发器将会被执行,通常情况下,这是在主服务器上的操作,表示事务已经成功应用到主数据库上,关注于主服务器上事务提交后的操作,确保主服务器上的数据变更被成功提交。但从服务器的数据不一定已经复制完成。
"after_sync" 则涉及到数据库复制的过程。它表示在从服务器上的数据已经与主服务器同步完成后触发的事件,这意味着从服务器已经成功接收、应用并同步了来自主服务器的所有更改,从而保证了从服务器上的数据与主服务器保持一致,关注于从服务器上数据与主服务器数据的同步,确保从服务器上的数据与主服务器保持一致。
5.延迟复制
核心思想:一个事务在主库执行后,会等待若干秒才在从库上执行
常见使用场景:
①应对主库的误操作,尤其是DROP TABLE操作
②查看数据库的历史状态
③人为模拟主从延迟
开启延迟复制:
mysql> stop slave;
#停止从服务器
mysql> change master to master_delay = 60;
#将主服务器上的复制延迟设置为60秒
mysql> start slave;
#重启从服务器
此时在主库新增记录,查询从库不会出现变化,60秒后才会同步
延迟复制在本质上是暂停SQL线程的应用,并不影响IO线程接受主库的binlog
gtid模式
server1(master):
vim /etc/my.cnf
#编辑mysql配置文件
gtid_mode=ON
#启用gtid模式,每个事务都会被分配一个全局唯一的gtid,用于标识事务在复制拓扑结构中的位置
#启用GTID模式可以简化主从复制配置,减少因为二进制日志文件名和位置的变化而带来的复杂性,同时提高了复制的可靠性和容错性
启用gtid模式之前:
gtid模式:
enforce-gtid-consistency=ON
#强制执行GTID一致性
#MySQL服务器将会检查所有进入的事务,确保它们的GTID在整个复制拓扑结构中是唯一且连续的,强制执行GTID一致性可以防止数据不一致的情况发生,确保各个服务器之间的数据同步是正确的
/etc/init.d/mysqld restart
#重启服务
server2,server3(slave):
vim /etc/my.cnf
#编辑mysql配置文件
/etc/init.d/mysqld restart
#重启服务
mysql -pwestos
#登录数据库
mysql> stop slave;
#停止slave
mysql> CHANGE MASTER TO MASTER_HOST='192.168.145.11', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
#重新配置
#MASTER_AUTO_POSITION = 1 启用基于GTID的复制,并且自动获取主服务器的最新GTID位置
mysql> start slave;
#启动slave
mysql> show slave status\G;
#查看slave状态
在master端表中插入一条信息
insert into westos.user_tb values ('user4','666');
server2(slave):
mysql> select * from mysql.gtid_executed;
#查看mysql中已经执行的gtid
insert into westos.user_tb values ('user5','666');
#再插入一条
mysql> select * from mysql.gtid_executed;
#查询
半同步模式
在切换到半同步模式之前,必须先切换到gtid模式
server1(master):
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
#安装半同步模块
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE '%semi%';
#查看与半同步复制相关的插件在MySQL中的安装状态
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
#激活半同步模式
SHOW VARIABLES LIKE 'rpl_semi_sync%';
#查看半同步参数,显示所有以 rpl_semi_sync 开头的MySQL系统变量及其对应的取值
#rpl_semi_sync_master_wait_for_slave_count=1 表示主服务器在提交事务前等待至少一台从服务器确认,根据实际需求,可以调整这个值来优化半同步复制的性能和可靠性
#rpl_semi_sync_master_timeout=10000 主服务器等待从服务器确认的超时时间为10000ms,即10s
SHOW STATUS LIKE 'Rpl_semi_sync%';
#查看半同步状态
vim /etc/my.cnf
#编辑mysql配置文件
#rpl_semi_sync_master_enabled=1 表示已启用主服务器上的半同步复制功能
#这意味着主服务器将等待至少一个从服务器确认接收到事务日志后才会认为事务提交成功
server2,server3(slave):
vim /etc/my.cnf
#将半同步参数写入配置文件
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
#在server1再次查看半同步状态,未配置slave时都为0,现在可以看到有两个从服务器已连接
测试:
server1(master):
mysql> insert into westos.user_tb values ('user6','666');
#再插入一组数据
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
#查看状态
停止所有slave节点的IO线程
mysql> STOP SLAVE IO_THREAD;
master节点再次写入数据
mysql> insert into westos.user_tb values ('user7','666');
默认等待时间超过10s,自动切换为异步模式
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
#查看状态
在生产环境中,要想实现数据无损,要把超时时间设置为无穷大
金融级数据库的要求更高,不接受数据不一致,例如:查询存款时若没接收到从服务器的响应,master将不会显示结果。如果显示必须显示准确结果
并行复制
默认slave节点sql线程是单线程回放,会造成数据同步延时较高
使用并行复制:
server2,server3(slave):
#slave-parallel-type=LOGICAL_CLOCK 这个配置指定了从库并行复制的方式,使用逻辑时钟来进行并行复制。逻辑时钟是一种用于并行系统中事件排序的方法,可以用于协调并行复制操作,以提高性能和效率
#slave-parallel-workers=16 指定了从库并行复制时使用的并行工作者线程数为16,这意味着在并行复制过程中可以同时处理多个事务,提高了复制性能
#master_info_repository=TABLE 这个配置指定了主服务器的信息存储方式,设置为 TABLE 表示主服务器的信息将存储在一个表中。这种方式相对于文件存储有一定的优势,比如更好的可维护性和可查询性
#relay_log_info_repository=TABLE 类似于上面的配置,这个参数指定了中继日志信息的存储方式,设置为 TABLE 表示中继日志的信息将存储在一个表中
#relay_log_recovery=ON 这个配置指示在数据库重启时自动进行中继日志的恢复操作,以确保数据的完整性和一致性
/etc/init.d/mysqld restart
#重启服务
mysql -p
mysql> show processlist;
#查看活动的线程
mysql组复制
大部分互联网公司使用的是分布式数据库
配置多主模式,所有节点都是Primary节点
确保所有节点数据一致:
1.server1配置
/etc/init.d/mysqld stop
#关闭数据库
cd /data/mysql
rm -rf *
#清除数据
vim /etc/my.cnf
#编辑mysql配置文件
#disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
mysqld --initialize --user=mysql
#初始化
/etc/init.d/mysqld start
#启动服务
#alter user root@localhost identified by 'westos';
修改root在本机的mysql密码为westos
#SET SQL_LOG_BIN=0;
在当前会话中禁止生成二进制日志
#CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
创建一个名为 "rpl_user" 的用户,并允许该用户从任何主机 '%' 连接到数据库 指定了用户的密码为 'westos'
#GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
授予rpl_user用户在任何数据库中作为复制从库的权限
#FLUSH PRIVILEGES;
重新加载授权表
#SET SQL_LOG_BIN=1;
启用生成二进制日志
#CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
指定用于复制的用户rpl_user,密码westos
这些参数适用于名为 "group_replication_recovery" 的复制通道
#SET GLOBAL group_replication_bootstrap_group=ON;
启动组复制引导过程,在引导过程中,这个节点将扮演重要的角色,协调其他节点的加入,并确保组复制的正确启动(只在server1上执行)
#START GROUP_REPLICATION;
启动组复制
#SET GLOBAL group_replication_bootstrap_group=OFF;
关闭组复制引导过程(只在server1上执行)
#SELECT * FROM performance_schema.replication_group_members;
查询 MySQL 中复制组成员信息
2.server2配置
/etc/init.d/mysqld stop
#停止数据库
vim /etc/my.cnf
#编辑配置文件
mysqld --initialize --user=mysql
#初始化
/etc/init.d/mysqld start
#启动
在server1查看成员:
3.server3配置
与server2同理
启动组复制完成后在server1查看成员
测试:
一主多从适用于读的请求远高于写的场景
多主模式所有节点都可以读写数据,适用于对读写需求都很大的场景
在server1(master):
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
#创建名为 "t1" 的表,列 c1 被定义为 INT 类型,并设置为主键(PRIMARY KEY),列 c2 被定义为 TEXT 类型并设置为非空(NOT NULL)
"PRIMARY KEY" 是用来定义表中的主键的关键字。主键是用来唯一标识表中每一行数据的一列或一组列。具体来说,主键具有以下特性:
- 唯一性:主键列的值必须是唯一的,不允许出现重复的值。
- 非空性:主键列的值不能为 NULL,即不能为空值。
"c1 INT PRIMARY KEY" 就是用来定义列 c1 作为表 t1 的主键。这意味着 c1 列的值将唯一标识表中的每一行,并且不允许出现重复值或者空值。
在实际的数据库设计中,主键经常被用于加速查询、确保数据完整性以及与其他表之间建立关联关系。当你需要在表中唯一标识每一行数据时,就可以考虑使用主键。
server2(slave):
server3(slave):
mysql路由器
rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
#安装软件
cd /etc/mysqlrouter/
vim mysqlrouter.conf
routing_strategy = round-robin
#路由策略轮询 依次将请求分配给多个服务器,实现请求在各个服务器之间的均衡分配
routing_strategy = first-available
#指定首选可用服务器的方式,系统会检查服务器列表中的每台服务器,然后选择第一个被标记为"可用"的服务器,将请求发送到该服务器上。这样可以确保请求尽快得到响应,并且可以有效利用可用服务器资源
systemctl enable --now mysqlrouter.service
#启动服务
yum install -y mariadb
#安装mysql客户端工具
server1:
mysql> grant all on test.* to 'yqm'@'%' identified by 'westos';
#在mysql集群中创建远程测试用户
授予用户yqm在任何主机上('%' 表示所有主机)对test数据库的全部权限,并设置密码为 "westos"
其他集群也已同步
server4:
mysql -h 192.168.145.14 -P 7001 -u yqm -pwestos
#连接mysql路由器 -P 指定连接的端口号
server1:
yum install -y lsof
#lsof用于显示系统当前打开的文件(包括网络连接、管道等)的工具
再次连接路由器
在server1查看网络连接:
在server2查看:
第三次连接:
在server3查看:
再次用端口7002连接:
仍然连接的是server3
停用server3:
再次用端口7002连接:
此时连接上了server2
应用时可以直接用mysqlrouter连接数据库集群,实现了负载均衡和高可用
msyql MHA高可用
1.创建一主两从集群
server1(master):
rm -rf /data/mysql/*
#清除数据
vim /etc/my.cnf
#编辑配置文件
mysqld --initialize --user=mysql
#初始化生成密码
/etc/init.d/mysqld start
#启动服务
mysql -p
#登录
server2(slave):
rm -rf /data/mysql/*
vim /etc/my.cnf
mysqld --initialize --user=mysql
#初始化
/etc/init.d/mysqld start
#启动服务
server3配置同理
测试:
master:
slave:
2.MHA部署
将server4作为管理端(MHA Manager)
yum install -y *.rpm
#安装管理端软件及依赖性
ssh-keygen
#生成ssh密钥对
ssh-copy-id server4
#将公钥放到本地authorized_keys文件中
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:
#直接将.ssh/目录全部复制到server1,server2,server3中,此时可以实现互相免密
复制客户端软件
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
#server1,server2,server3上安装客户端软件
MHA配置
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
cd MHA-7/
tar zxf mha4mysql-manager-0.58.tar.gz
cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf
#利用模板生成配置文件
修改:
no_master=1
#server3指定不允许成为主服务器
mysql> grant all on *.* to root@'%' identified by 'westos';
#在master上设置mysql管理员权限,slave节点会自动同步
masterha_check_ssh --conf=/etc/masterha/app1.cnf
#检测各节点ssh免密连接
masterha_check_repl --conf=/etc/masterha/app1.cnf
#检测主从复制集群状态
3.故障切换
手动切换(master正常)
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.145.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
masterha_check_repl --conf=/etc/masterha/app1.cnf
#检测主从集群状态
手动切换(master故障)
/etc/init.d/mysqld stop
#手动停止server2节点上的服务
masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.145.12 --dead_master_port=3306 --new_master_host=192.168.145.11 --new_master_port=3306 --ignore_last_failover
切换成功
手动修复故障节点
server2:
/etc/init.d/mysqld start
#重新启动服务
mysql> change master to master_host='192.168.145.11', master_user='repl', master_password='westos', master_auto_position=1;
#指定master
mysql> start slave;
#启动slave
检测状态
server4:
无论是server1还是server2出现故障,切换另一台服务器为master后,手动恢复时都要指定此时的master,将故障节点设置为slave
自动切换
rm -f app1.failover.complete
#故障切换后会生成锁定文件,需要手动删除,否则会影响自动切换
masterha_manager --conf=/etc/masterha/app1.cnf &
#启动manager程序,并打入后台运行,完成切换任务后进程会自动退出
server1:
/etc/init.d/mysqld stop
#关闭master
cat /etc/masterha/manager.log
#查看日志
切换成功
手动恢复server1为slave
server4:
masterha_manager --conf=/etc/masterha/app1.cnf &
#再次启动manager进程打入后台
加入故障切换脚本
master_ip_failover
#ip故障切换脚本
master_ip_online_change
#ip在线切换脚本
在server2(master)手动添加vip
ip a a 192.168.145.100/24 dev eth0
此时连接的是server2
/etc/init.d/mysql stop
#停止server2服务
在manager端查看日志
cat /etc/masterha/manager.log
使用的是master_ip_failover故障切换脚本
手动恢复server2
删除manager端生成的锁定文件和日志
手动在线切换master
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.145.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
#切换到server2
此时使用的是master_ip_online_change在线切换脚本
redis数据库
1.redis部署
NoSQL是一种非关系型数据库,它提供了灵活的数据存储和处理方式,不局限于传统的关系型数据库模型。NoSQL数据库通常适用于需要处理大量、高速度、分布式数据的场景,如大数据、实时数据处理、Web应用程序等。常见的NoSQL数据库包括MongoDB、Cassandra、Redis、HBase等
Redis是一种开源的内存键值存储数据库,它支持多种数据结构(如字符串、哈希、列表、集合等)并提供了丰富的功能和灵活的用途。Redis被广泛应用于缓存、会话存储、消息队列等场景,因为它具有快速的读写能力和丰富的功能特性。
除了数据持久化以外,Redis还支持主从复制、发布订阅等特性,可以用于构建高可用性的系统。由于其高性能和灵活性,Redis在Web开发、实时数据处理、分布式系统等领域得到了广泛的应用。
除了作为缓存存储之外,Redis还可以用作轻量级的数据库、消息中间件等,是一个功能强大的工具,为各种场景下的数据存储和处理提供了便利的解决方案
首先关闭mysql
/etc/init.d/mysqld stop
redis最新版本可以从官网 https://redis.io 下载
tar zxf redis-6.2.4.tar.gz
#解压
make
#编译
make install
#安装
cd utils/
vim install_server.sh
#编辑安装脚本
./install_server.sh
#运行安装脚本
netstat -antlp |grep :6379
vim /etc/redis/6379.conf
#编辑配置文件
2.redis常用指令
详细命令可以在中文官网https://redis.net.cn查看
3.redis主从复制
给要配置服务的节点都安装rsync
yum install -y rsync
rsync -a redis-* server2:/usr/local/bin/
rsync -a redis-6.2.4 server2:
#拷贝程序
server2上完成redis部署
cd ~/redis-6.2.4/
cd utils/
./install_server.sh
#执行安装脚本
vim /etc/redis/6379.conf
#编辑配置文件
/etc/init.d/redis_6379 restart
#重启服务
server操作同理
测试:
在master:
redis-cli
127.0.0.1:6379> info
server2:
server3:
slave:
4.redis主从切换
server1:
cp sentinel.conf /etc/redis/
#复制配置文件
cd /etc/redis/
vim sentinel.conf
#编辑,修改两行内容
sentinel monitor mymaster 192.168.145.11 6379 2
#指定监控主服务器组名称mymaster,IP地址192.168.145.11,端口6379,执行故障切换最小投票数为2,至少需要两个哨兵节点统一进行故障转移
sentinel down-after-milliseconds mymaster 10000
#在主服务器在10秒内未响应时(即认为不可达),将该主服务器标记为主服务器下线,触发后续的故障转移流程
sentinel parallel-syncs mymaster 1
#在进行故障转移时最多允许1个从服务器同时进行同步操作,这有助于控制并发同步操作的数量,避免对主服务器和网络造成过大负担
daemonize no
#在前台运行
scp sentinel.conf server2:/etc/redis/
scp sentinel.conf server3:/etc/redis/
#拷贝到另外两台服务器,要在启动服务之前拷贝,启动后会将当前集群状态写入文件
redis-sentinel /etc/redis/sentinel.conf
#启动服务
server2,server3直接启动服务,不用修改配置文件
redis-sentinel /etc/redis/sentinel.conf
#启动服务
重新开启一个终端连接server1
127.0.0.1:6379> shutdown
#关闭redis服务
10秒后server2发起投票
#完成投票后server1主观下线,选举server2为新的master,修改从节点配置文件,切换后标记server1为下线状态
再次启动server1
redis-cli
127.0.0.1:6379> info
#查看信息
配置文件自动修改
问题:
master重启后,切换到slave的网络出现了故障,此时客户还在往master中写数据,那么当master切换到slave后,由于slave会自动flushall,那么这部分数据就丢失了
解决办法:
在配置主从之前在配置文件中加入选项min-slaves-to-write=2,表示master在执行写操作前需要至少有两个从节点处于可用状态,可避免主从切换过程中的数据丢失
5.redis集群
Redis Cluster 是 Redis 提供的分布式解决方案,它允许将多个 Redis 节点组合成一个集群,用于存储大规模的数据并提供高可用性和横向扩展能力。Redis Cluster 自动将数据分片存储在不同的节点上,并提供了节点间的数据复制和故障转移机制,以保证数据的安全性和可靠性。
Redis Cluster 的特点包括:
- 分布式数据存储:数据被分片存储在多个节点上,可以存储超出单个 Redis 实例内存限制的数据量。
- 高可用性:当某个节点发生故障时,Redis Cluster 会自动进行故障转移,保证数据的可用性。
- 横向扩展:通过增加节点,可以线性地扩展 Redis 集群的容量和吞吐量。
- 自动化管理:Redis Cluster 提供了自动化的故障检测、故障转移和重新平衡数据的功能,简化了集群的管理工作。
通过这些特点,Redis Cluster 成为了存储大规模数据并提供高性能、高可用性的理想选择。它被广泛应用于缓存、会话存储、实时数据分析等场景中。
虽然 Redis Cluster 在分布式系统中有许多优点,但也存在一些缺点,包括:
-
数据一致性:Redis Cluster 使用的是哈希槽(slot)分片机制,数据按照槽进行分片存储,但在节点动态增减或者故障恢复时,可能会导致数据迁移和重新分配槽,从而引起数据不一致或者部分数据丢失的情况。
-
节点故障处理:虽然 Redis Cluster 提供了自动化的故障检测和转移功能,但在节点故障发生时,会引起数据迁移和重新分片操作,可能会影响系统性能和稳定性。
-
网络通信开销:在 Redis Cluster 中,节点之间需要频繁进行数据同步和通信,特别是在数据迁移、故障转移等操作时,会增加网络通信开销,影响系统性能。
-
复杂性:相对于单机 Redis 实例,Redis Cluster 的配置、部署和管理更为复杂,需要考虑节点之间的通信、数据分片、故障处理等方面的问题,对运维人员的要求较高。
-
跨槽事务支持:由于 Redis Cluster 的数据分片机制,无法支持涉及多个槽(slot)的事务操作,这限制了某些复杂场景下的数据操作能力。
综上所述,虽然 Redis Cluster 在大规模数据存储和高可用性方面表现优异,但也存在一些挑战和局限性,需要在实际应用中根据具体情况权衡利弊。
无中心化设计,任何节点都可读写
整合度高,二次开发成本高
Codis 是一个开源的分布式 Redis 解决方案,它在多个 Redis 服务器之上提供了代理层和管理工具,用于解决 Redis 单机容量有限、高可用性、扩展性等问题。Codis 通过在 Redis 服务器前部署代理,实现了数据的分片和负载均衡,从而有效地提升了 Redis 集群的性能和可扩展性。
Codis 提供了集群管理工具、监控工具和自动化故障转移等功能,使得 Redis 集群的部署和维护变得更加便捷和高效。同时,它也支持对 Redis 的扩展模块进行定制和集成,满足了不同场景下的需求。
总的来说,Codis 是一个为 Redis 集群提供代理和管理功能的工具,可以帮助用户轻松地构建和管理大规模的 Redis 集群,提供更高的性能和可用性。
cd ~/redis-6.2.4/utils/create-cluster
./create-cluster start
#执行脚本
ps ax
#查看进程
./create-cluster create
#自动创建集群
将16384个哈希槽平均分配给了3个master节点
redis-cli --cluster help
#查看命令帮助
redis-cli --cluster info 127.0.0.1:30001
redis-cli --cluster check 127.0.0.1:30001
#查看集群信息
redis-cli -c -p 30001 info的节点信息
#查看30001端口
redis-cli -c -p 30002 shutdown
#关闭30002的服务,集群自动切换
数据存储在30005
./create-cluster start
#重新使用脚本创建集群
当部分节点同时故障时,可能导致哈希槽缺失,此时集群将不可用
./create-cluster start
vim create-cluster
#编辑脚本,再启动两个redis实例
在线添加节点
redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001
#添加30007为master
redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id 3fd5360e705e8841d9fe9b933aa73c4a68dcbd8b
#在线添加30008节点
redis-cli --cluster reshard 127.0.0.1:30001
#重新分配槽位,随意指定节点即可,因为是无中心化
redis-cli --cluster check 127.0.0.1:30001
#查看集群信息
删除节点时,可先使用reshard进行重新分配槽位,将要删除结点的哈希槽迁移出来
再使用redis-cli --cluster del-node host:port node_id删除节点即可
以此类推将槽全部迁移出去,再删除节点即可
相关文章:

LNMP架构之mysql数据库实战
mysql安装 到官网www.mysql.com下载源码版本 实验室使用5.7.40版本 tar xf mysql-boost-5.7.40.tar.gz #解压 cd mysql-boost-5.7.40/ yum install -y cmake gcc-c bison #安装依赖性 cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DMYSQL_DATADIR/data/mysql -DMYSQL_…...

aws使用记录
数据传输(S3) 安装命令行 安装awscli: https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions 直到 aws configure list 可以运行 身份验证: 运行: aws config…...

区块链食品溯源案例实现(二)
引言 随着前端界面的完成,我们接下来需要编写后端代码来与区块链网络进行交互。后端将负责处理前端发送的请求,调用智能合约的方法获取食品溯源信息,并将结果返回给前端。 通过前后端的整合,我们可以构建一个食品溯源系统…...

RabbitMQ(简单模式)
2种远程服务调用 1openFeign: 优点:能拿到被调用的微服务返回的数据,系统系耦度高,系统稳定。 缺点:同步调用,如果有很多服务需要被调用,耗时长。 MQ,消息队列,RabbitMQ是消息we…...

ES集群部署的注意事项
文章目录 引言I ES集群部署前期工作II 部署ES2.1 配置安全组2.2 创建ES用户和组2.3 下载安装ES2.4 修改内存相关配置III es集群添加用户安全认证功能3.1 生成 elastic-certificates.p123.2 创建 Elasticsearch 集群密码3.2 设置kibana的 elasticsearch帐号角色和密码3.3 logsta…...

Etcd 基本入门
1:什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,Etcd基于 Go 语言实现。 名字由来,它源于两个方面,…...

PPT没保存怎么恢复?3个方法(更新版)!
“我刚做完一个PPT,正准备保存的时候电脑没电自动关机了,打开电脑后才发现我的PPT没保存。这可怎么办?还有机会恢复吗?” 在日常办公和学习中,PowerPoint是制作演示文稿的重要工具。我们会在各种场景下使用它。但有时候…...

DBeaver修改sql语句保存位置
1、dbeaver通过工作空间方式来管理Script的sql脚本以及数据库连接。 工作空间,其实也就是一个文件夹 默认保存路径查看: 文件--> 切换工作空间 --> 其他 sql脚本的保存位置默认在工作空间下的 \General\Scripts 文件夹中。 2、 3、点击浏览&#…...

LabVIEW2024中文版软件安装包、工具包、安装教程下载
下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2024安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述许可协议”,点击下一步 3、点击下一步,安装NI Package …...

对AOP的理解
目录 一、为何需要AOP?1、从实际需求出发2、现有的技术能解决吗?3、AOP可以解决 二、如何实现AOP?1、基本使用2、更推荐的做法2.1 “基本使用”存在的隐患2.2 最佳实践2.2.1 参考Transactional(通过AOP实现事务管理)2.…...

C 指针数组
C 指针数组是一个数组,其中的每个元素都是指向某种数据类型的指针。 指针数组存储了一组指针,每个指针可以指向不同的数据对象。 指针数组通常用于处理多个数据对象,例如字符串数组或其他复杂数据结构的数组。 让我们来看一个实例…...

算法系列--动态规划--背包问题(1)--01背包详解
💕"趁着年轻,做一些比较cool的事情"💕 作者:Mylvzi 文章主要内容:算法系列–动态规划–背包问题(1)–01背包详解 大家好,今天为大家带来的是算法系列--动态规划--背包问题(1)--01背包详解 一.什么是背包问题 背包问题…...

【KB】通过Karabiner-Elements实现 optionTAB与 commandTAB 对调/映射 win 的 altTAB 习惯
学习Karabiner-Elements的第一个 demo,因为推荐的例子中过多参数,这是一个简化版。 需求:对调 optionTAB与 commandTAB,然后安装 altTAB 软件,恢复win切换任务的使用习惯。 {"description": "Change ta…...

nvm node包管理工具
下载地址:版本 1.1.9 CoreyButler/NVM-Windows (github.com) 使用nvm -v 检查安装是否成功。 常用命令 # 安装nodjs版本 nvm install 10.16.3nvm install 14.15.4# 切换,使用nodejs nvm use 10.16.3 ## nvm use 报错,1).使用管理员打开…...

程序员如何兼职赚小钱?
程序员由于有技术和手艺其实兼职赚钱的路子还是挺多的,只要你有足够的时间。 1. 做外包 这是比较传统的方式,甲方在一些众包平台上发布开发任务,你可以抢这个任务,但是价格都比较便宜。 任务比较多的平台: 猪八戒、一品威客、开…...

奥比中光深度相机(一):环境配置
文章目录 奥比中光深度相机(一):环境配置简介电脑环境SDK配置步骤安装环境依赖填写路径,点击Configure选择Visual studio点击Generate完成基于Python的SDK配置方法一:使用Cmake直接打开方法二:通过源文件打…...

API网关-Apisix路由配置教程(数据编辑器方式)
文章目录 前言一、端口修改1. apisix 端口修改2. dashboard 端口修改3. 登录密码修改 二、常用插件介绍1. 常用转换插件1.1 proxy-rewrite插件1.1.1 属性字段1.1.2 配置示例 2. 常用认证插件2.1 key-auth插件2.1.1 消费者端字段2.1.2 路由端字段2.1.3 配置示例 2.2 basic-auth插…...

Transformer的前世今生 day10(Transformer编码器
前情提要 ResNet(残差网络) 由于我们加更多层,更复杂的模型并不总会改进精度,可能会让模型与真实值越来越远,如下: 我们想要实现,加上一个层把并不会让模型变复杂,即没有它也没关系…...

【c++模板】泛型编程(你真的懂模版特化、分离编译和非类型参数吗)
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:模板 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在…...

力扣1----10(更新)
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按…...

[Qt] QString::fromLocal8Bit 的使用误区
QString::fromLocal8Bit 是一个平台相关的函数。默认情况下在 Windows 下 就是 gbk 转 utf-8 ,在 Linux就应该是无事发生。因为Linux平台默认的编码方式就是 utf-8 可以通过 void QTextCodec::setCodecForLocale(QTextCodec *c)来修改 Qt默认的编码方式。如下 第一输出乱码的…...

什么是RabbitMQ的死信队列
RabbitMQ的死信队列(Dead Letter Queue,简称DLQ)是一种用于处理消息失败或无法路由的消息的机制。它允许将无法被正常消费的消息重新路由到另一个队列,以便稍后进行进一步处理、分析或排查问题。 当消息对立里面的消息出现以下几…...

力扣面试150 删除有序数组中的重复项 双指针
Problem: 26. 删除有序数组中的重复项 思路 👩🏫 三叶题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int removeDuplicates(int[] nums) {int j 0, n nums.length;for(int i 0;…...

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(二)—— 深度神经网络
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 概述 深度神经网络(Deep Neural Network…...

【链表】Leetcode 138. 随机链表的复制【中等】
随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…...

【计算机网络教程】(第六版)第2章课后习题答案
第二章 2-012-022-032-042-062-072-082-092-102-112-122-132-142-152-16 2-01 物理层要解决哪些问题?物理层的主要特点是什么? 答: 物理层要解决的主要问题: (1)物理层要尽可能地屏蔽掉物理设备和传输媒体&…...

抖音电商“达人客服”产品上线啦!超多作者邀你一起“321上客服”!
有问题别自己克服,来抖音电商找“达人客服” 当代年轻人购物,正在从机智省变成理智购。越来越多的人在达人直播间购物,看重的不止是优惠力度,还有服务保障。 为了帮助达人更好地服务用户,抖音电商上线了「达人客服」…...

华为防火墙二层墙(VAN/SVI/单臂路由)
二层墙只能做地址池形式的NAT。 交换机安全策略防火墙二层墙 路由器安全策略防火墙三层墙 交换机的光口是不能直接插线的,光模块,包括进和出 长距离:单模 短距离:多模 防火墙自身的ping流量需要单独配置...

idea使用git笔记
1.创建分支和切换分支 创建分支 切换分支 2.把新创建的分支提交到远程服务器上(注:如果没有提交的,随便找个文件修改再提交) (1)切换到要提交的分支,add (2)commit (3)push 3.在自己分支修改代码及提交到自己的远…...

智慧校园数据可视化有什么好处?怎么推进数字化校园方案?
在当今数字化时代,越来越多学校开始实施智慧校园计划,旨在为学生和教师提供更高效、便捷的学习和教学环境。智慧校园运用互联网、大数据、人工智能等技术,对校园内各信息进行收集、整合、分析和应用,实现教学、管理、服务等多方面…...