Redis-shake数据同步迁移
[TOC]
Redis-shake数据同步迁移Redis-shake是阿里云开源的redis数据传输工具,支持对redis数据进行解析(decode),恢复(restore),备份(dump)和同步(rump/sync),部署简单高效。同步模式支持全量同步以及增量同步,能够满足多种场景需求
注意事项
redis版本为2.8,3.0,3.2,4.0,5.0版本
跨版本同步或恢复需进行兼容性验证
target库的maxmemory-policy如果配置为noeviction以外的值,可能导致数据差异
source库的key设置了过期时间,key可能已过期而未被删除,target看到的key可能会比source少
redis-shake安装redis-shake使用go语言开发,因此需要先安装go环境
$ yum install golang
下载redis-shake
$ wget 'https://github.com/alibaba/RedisShake/archive/refs/tags/release-v2.1.1-20210903.tar.gz'
解压安 ...
MongoDB WriteConcern与ReadConcern
writeConcerndb.collection.insert({x: 1}, {writeConcern: {w: 1}})
客户端在写入数据时,可以通过writeConcern来配置写入策略,其包含如下选项
w:指定数据需要写入多少个节点才会向客户端返回确认,选项默认为1,即写到primary就OK了。w:majority则表示需要写入副本集中大多数成员后才完成,提升了数据的写入安全,但会降低写入性能
j:写入操作的journal持久化后才向客户端返回确认,默认为false
wtimeout:写入超时时间,仅当w大于1时生效
MongoDB Replset复制是通过secondary节点不断拉取primary上的oplog并重放来实现的,那w:majority是如何确保写入到大多数的呢?
客户端发起写入请求,并记录到primary上的oplog中,等待从节点应用写入
secondary拉取primary的oplog并重放
secondary上的独立线程在oplog时间戳发生更新时,就会向primary发送replS ...
分片集群下删除Database或Collection的问题
问题现象
在分片集群中删除Database或Collection时,它需要到每个Shard上删除对应的数据,并且更新元数据等信息,而这些动作跨多个节点无法做到原子性,可能导致处于操作一个中间状态,复用该集合可能存在数据问题,因此在删除Database或Collection后不建议使用相同的namespace。
解决方案
MongoDB4.4
在mongos上执行Drop Database或Collection
在mongos上再次执行Drop操作
MongoDB4.2
在mongos上执行Drop Database或Collection
在mongos上再次执行Drop操作
在所有mongos执行flushRouterConfig
MongoDB4.0或更早
在mongos上执行Drop Database或Collection
连接所有Shard的主节点判断对象是否还存在,存在则删除。删除一个数据库时会删除物理磁盘上的数据文件
连接mongos进入config数据库,从集合chunks、locks、databases和collections中删除对应的元数据##Drop Da ...
Ansible系列 : Ad-Hoc命令
ad-hoc命令能够让我们通过命令的方式快速的完成一些任务,类似于Linux下的shell命令,常用于一些简单的,临时性的需求。
SSH公钥认证
我们可以通过ask-pass选项手动输入密码进行远程认证,但在批量管理节点时,可以通过配置SSH公钥进行免密认证。
管理节点生成公钥并复制到托管节点
[root@h-luhx-254 ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:0FFbEBbtTe ...
MySQL组复制(三)
分布式恢复分布式恢复即一个成员加入或重新加入复制组时,它必须跟上其它组成员的事务应用。加入的成员首先检查其group_replication_applier通道的relay log,以查看它已经从组收到但还未应用的事务。如果加入的成员以前在组中,它可能会在找到离开之前未应用的事务,在这种情况,它将应用这些事务作为第一步。在此之后,加入的成员连接到一个正常的成员进行数据复制,加入的成员将加入之前或离开时在组中发生的事务数据进行复制。随后加入的成员应用数据复制过程中发生的事务,完成后加入的成员即可正常参与到群组中。
在分布式恢复期间,组复制结合下列方法进行传输:
MySQL 8.0.17使用clone插件的函数进行远程克隆操作,需提前安装该插件。Review
使用group_replication_recovery异步复制通道从源节点的二进制日志进行复制,并应用事务,直到二进制日志记录加入成员加入组(视图更改事件)。此过程中,加入的成员会缓冲组应用的新事务,当二进制日志传输完成后应用缓冲的事务
在加入成员上执行START GROUP_REPLICATION后,组复制自动根据情况选择最佳 ...
MongoDB Change Streams
Change Streams允许应用程序访问实时的数据更改,而不存在跟踪oplog的复杂性和风险。应用程序可以利用change streams订阅集合、数据库或整个实例的所有数据更改。因为change streams使用聚合框架,所以应用程序也可以过滤特定的消息内容。
对象
描述
collection
支持除admin、local、config库以外的单个集合
database
支持除admin、local、config库以外的数据库,4.0开始
cluster
支持整个集群除admin、local、config库以外的集合,4.0开始
Change Streams可以用在副本集或分片集群下,需要满足以下条件:
必须使用WiredTiger存储引擎,并且Change Stream也适用于MongoDB的静态加密特性
必须使用pv1协议(protocol version 1)
在4.0或更早版本中,read concern需要启用majority,4.2开启则对此不作要求
Change Events
一个基本的事件信息结构如下
{ _id : & ...
Ansible系列 : 配置文件
Ansible会按照下列顺序读取配置文件,直到找到一个为止,并使用第一个找到的配置文件
ANSIBLE_CONFIG环境变量
当前目录下的ansible.cfg
home目录下的ansible.cfg
/etc/ansible/ansible.cfg
参数详解
参数组
参数
描述
defaults
action_plugins
加载插件模块
ansible_managed
插入自定义字符到Ansible配置模板生成的文件中
ask_pass
是否提示输入密码,如果采用ssh密钥认证需要开启
ask_sudo_pass
与ask_pass类似,是否提示输入sudo密码
bin_ansible_callbacks
callback插件是否在运行ansible命令时被加载
callback_plugins
callback插件加载
command_warnings ...
Ansible系列 : Inventory文件
Ansible通过inventory文件来配置主机清单,默认文件路径为/etc/ansible/hosts,也可以在自己的管理目录下创建inventory文件。
Inventory参数
参数
说明
ansible_ssh_host
远程的主机名
ansible_ssh_port
远程的端口
ansible_ssh_user
SSH远程的用户
ansible_ssh_pass
ssh密码
ansible_sudo_pass
建议使用–ask-sudo-pass选项
ansible_sudo_exe
sudo路径
ansible_connection
连接方式,如local,ssh或paramiko
ansible_ssh_private_key_file
ssh的私钥文件
ansible_shell_type
目标系统的shell类型,默认为sh
ansible_python_interpreter
目标主机的python路径
主机与组
inventory文件的基本格式如下:
10.0.139.163[appserver]10.0.13 ...
Ansible系列 : 源码安装
安装Python3安装依赖
$ yum install zlib zlib-devel openssl-devel libffi-devel
下载介质
DownLoad
编辑./Modules/Setup取消ssl注释
SSL=/usr/local/ssl_ssl _ssl.c \-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \-L$(SSL)/lib -lssl -lcrypto
编译安装
$ ./configure --prefix=/usr/local/python3$ make && make install -j 4
添加环境变量
$ echo "export PATH=$PATH:/usr/local/python3/bin" >>/etc/profile$ source /etc/profile
查看版本
[root@h-luhx-254 packages]# python3 --versionPython 3.8.7
安装Ansible下载python依赖 ...
MySQL组复制(二)
配置复制组更改primary
查看当前主节点
root@(none) 02:12: SELECT * FROM performance_schema.replication_group_members;
指定新的主节点进行切换
root@(none) 02:12: SELECT group_replication_set_as_primary('d1fbe050-5ecf-11eb-a88d-0050569c8f5e');
查看进度
root@(none) 02:12: SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";
更改复制模式
更改为单主模式
###停止复制mysql> stop group_replication;###关闭一致性检查mysql> set global group_replica ...