首页 > 数据库 >崖山从0到1系列06-崖山数据库双机高可用环境部署

崖山从0到1系列06-崖山数据库双机高可用环境部署

时间:2024-09-24 10:50:15浏览次数:3  
标签:主库 yashandb -- data1 yashan 崖山 06 双机 yasboot

崖山从0到1系列06-崖山数据库双机高可用环境部署

简单步骤
环境:
两台机器
192.168.127.39 192.168.127.40

基础配置:
调整机器的时钟,确保机器时钟一致。
检测机器之前的网络通信情况,确保个节点通信正常
创建yashan用户
home目录和data目录划分。
数据文件、redo文件以及归档文件存储的划分。

部署一主一备场景:
检查主备服务器的网络通信、时钟等,确保网络通信正常,时钟一致。

1.生成部署文件(yashandb.toml和hosts.toml两个配置文件)
yasboot package se gen --cluster yashandb -u yashan -p password --ip 192.168.127.39,192.168.127.40 --port 22 --install-path /data1/yashan/yasdb_home -data-path /data1/yashan/yasdb_data --begin-port 1688 --node 2

2.调整配置文件(手动调整)
需要调整的参数有:REDO_FILE_NUM、 REDO_FILE_PATH, REDO_FILE_SIZE,UNDO_FILE_INIT_SIZE,归档路径等

3.执行安装
yasboot package install -t hosts.toml -i yashandb-23.2.0.27-linux-x86_64.tar.gz

4.数据库部署
yasboot cluster deploy -t yashandb.toml

5.设置sys用户密码
yasboot cluster password set --new-password yashandb_123 --cluster yashandb

6.检测安装是否成功
检查整个集群的状态:yasboot cluster status --cluster yashandb --detail
检测主备连接情况:select * from v$archive_dest_status;
检测主备的同步情况:简单业务测试

7.配置参数调优
使用参数自适应功能,使用高级包DBMS_PARAM来生成推荐参数

安装参数调整:依据实际需要调整yashandb.toml配置文件中的安装参数。其中,可在group级别设置YashanDB的所有建库参数,在node级别设置YashanDB的所有配置参数。
REDO_FILE_PATH:设置为了保证数据库的性能稳定,redo文件需要单独使用一块磁盘,避免同数据文件抢占IO。
REDO_FILE_NUM和REDO_FILE_SIZE:调整redo文件的大小和数量。
设置归档路径参数:正常业务场景下,归档文件需要单独使用一块磁盘来存储。需要手动配置归档的磁盘目录。

配置参数调优
1.执行参数优化高级包,生成最佳参数配置:EXEC DBMS_PARAM.OPTIMIZE();
2、查看推荐参数的报告:SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM DUAL;
3.将推荐的参数写入配置文件:EXEC DBMS_PARAM.APPLY_RECOMMEND();
4、重启数据库,生效配置参数。
开启仲裁自动切换开关,调整配置最大保护模式和零丢失模式

一主一备高可用安装详细步骤

两台机器安装崖山db
192.168.127.39/40
系统准备
升级Openssl到1.1.1o(源码安装)
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
tar -zxvf openssl-OpenSSL_1_1_1o.tar.gz
cd openssl-OpenSSL_1_1_1o
./config --prefix=/usr/local/openssl
make && make install
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v
openssl version

关闭交换分区
# sysctl -w vm.swappiness=0
# echo "vm.swappiness=0">> /etc/sysctl.conf

# sysctl -w net.ipv4.ip_local_port_range='32768 60999' 
echo "net.ipv4.ip_local_port_range=32768 60999" >> /etc/sysctl.conf
# sysctl -w vm.max_map_count=2000000
 echo "vm.max_map_count=2000000" >> /etc/sysctl.conf 

系统限制
echo "
 * soft nofile 65536
 * hard nofile 65536
 * soft nproc 65536
 * hard nproc 65536
 * soft rss unlimited
 * hard rss unlimited
 * soft stack 8192
 * hard stack 8192
" >> /etc/security/limits.conf

配置大页内存
$ grep -i huge /proc/meminfo
#vi /etc/sysctl.conf
追加以下配置:
vm.nr_hugepages=16
vm.nr_overcommit_hugepages=0

#关闭透明大页
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled

vi /etc/default/grub,在GRUB_CMDLINE_LINUX中添加或修改参数transparent_hugepage=never。

   GRUB_TIMEOUT=5
   GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
   GRUB_DEFAULT=saved
   GRUB_DISABLE_SUBMENU=true
   GRUB_TERMINAL_OUTPUT="console"
   GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
   GRUB_DISABLE_RECOVERY="true"
   
通过以下指令检查当前系统的引导类型:
# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

## BIOS 引导
# grub2-mkconfig -o /boot/grub2/grub.cfg
## UEFI 引导
# grub2-mkconfig -o /boot/efi/EFI/<distro_name>/grub.cfg
重启操作系统,使配置永久生效。

# reboot

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/enabled

应显示always madvise [never]。

关闭防火墙selinux
systemctl stop firewalld
vi /etc/selinux/config
disabled

NTP配置同步略

--安装yashandb

新建用户
useradd yashan
echo yashan_123 |passwd yashan --stdin

创建用户组
groupadd YASDBA   --必须大写
usermod -a -G YASDBA yashan  --有了这个用户组,可以使用yasql / as sysdba 登录数据库

创建目录
mkdir -p /data1/yashan/yasdb_home
mkdir -p /data1/yashan/yasdb_data
mkdir -p /data1/install
chown -R yashan:yashan /data1
mkdir -p /data2/yashan/redo
chown -R yashan:yashan /data2
su - yashan
mkdir -p /home/yashan/archive

su - yashan
cd /data1
rz
yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
tar -zxvf yashandb-personal-23.2.1.100-linux-x86_64.tar.gz -C ./install

集群配置
1.生成部署文件(yashandb.toml和hosts.toml两个配置文件)
install/bin/yasboot package se gen --cluster yashandb -u yashan -p yashan_123 --ip 192.168.127.39,192.168.127.40 --port 22 --install-path /data1/yashan/yasdb_home --data-path /data1/yashan/yasdb_data --begin-port 1688 --node 2

2.调整配置文件(手动调整)
需要调整的参数有:REDO_FILE_NUM、 REDO_FILE_PATH, REDO_FILE_SIZE,UNDO_FILE_INIT_SIZE,归档路径等
vi yashandb.toml
[[group]]
REDO_FILE_NUM=10
REDO_FILE_SIZE="10G"
REDO_FILE_PATH="/data2/yashan/redo"
[[group.node]]
ARCHIVE_LOCAL_DEST="/home/yashan/archive"

role=1
[[group.node]]
ARCHIVE_LOCAL_DEST="/home/yashan/archive"
role=2

3.执行安装
install/bin/yasboot package install -t hosts.toml -i yashandb-personal-23.2.1.100-linux-x86_64.tar.gz

4.数据库部署

install/bin/yasboot cluster deploy -t yashandb.toml

5.设置sys用户密码
yasboot cluster password set --new-password yashandb_123 --cluster yashandb

6.检测安装是否成功
检查整个集群的状态:yasboot cluster status --cluster yashandb --detail
yasql / as sysdba
SELECT database_name,log_mode,open_mode FROM V$DATABASE; --查看归档情况
检测主备连接情况:select * from v$archive_dest_status;
检测主备的同步情况:简单业务测试

7.配置环境变量(两个节点都要操作):
cd /data1/yashan/yasdb_home/yashandb/23.2.1.100/conf
$ vi yashandb.bashrc
export YASDB_HOME=/app/yasdb_home/yashandb/23.2.1.100
export PATH=${YASDB_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${YASDB_HOME}/lib:$LD_LIBRARY_PATH
if command -v rlwrap >/dev/null 2>&1; then
  alias yasql="rlwrap yasql"
fi
export YASDB_DATA=/data1/yashan/yasdb_data/db-1-2
or
export YASDB_DATA=/data1/yashan/yasdb_data/db-1-1

$ cat yashandb.bashrc >> ~/.bashrc
source ~/.bashrc
env|grep YAS

YASDB_HOME=/data1/yashan/yasdb_home/yashandb/23.2.1.100

export YASDB_DATA=/data1/yashan/yasdb_data/db-1-1
or
export YASDB_DATA=/data1/yashan/yasdb_data/db-1-2

8.设置sys用户密码(两个节点都要操作:至少8位,至少包含1个特殊字符,好像没有限制大写字母
yasboot cluster password set -n yashandb_123 -c yashandb
yasql / as sysdba

9.参数优化(主库操作即可)
yasql / as sysdba
 EXEC DBMS_PARAM.OPTIMIZE();
 SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM dual;
 EXEC DBMS_PARAM.APPLY_RECOMMEND();

10.启用基于yasom的仲裁选举(其中一个节点)
yasboot election enable on -c yashandb

查看仲裁选举的参数设置和运行状态。(任意节点)
yasboot election config show -c yashandb
-------------------
[yashan@localhost archive]$ yasboot election config show -c yashandb
group 1
  Protection Mode: MAXIMUM PROTECTION
  Members:
    [1-1:1] - Primary database
      [1-2:2] - Physical standby database
                  Transport Lag: 0 seconds
                  Apply Lag:     0 seconds
                  Apply Rate:    4.63 MByte/s
  Properties:
    FailoverThreshold      = 9
    FailoverAutoReinstate  = false
    ZeroDataLossMode       = true
Automatic Failover: Enabled in Zero Data Loss Mode

其中:
Protection Mode:yasom记录的主库保护模式。
Members:表示节点信息。包括节点状态,节点角色,备库传输延迟,回放延迟和回放速率等。
Properties:当前生效的参数值。
Automatic Failover:仲裁选举状态。
DISABLED:选举关闭。
Enabled in Potential Data Loss Mode:选举开启,并且切换可能丢失数据。
Enabled in Zero Data Loss Mode:选举开启,并且不会丢失数据。
Enabled in Zero Data Loss Mode (NOT ALLOWED):选举开启,但不是最大保护模式,可能有数据丢失风险,禁止自动切换

-----------------------------

参数名				默认值			取值范围				含义
FailoverThreshold		9			[2, 1000]			备机心跳超时时间,到达该时间后,yasom将执行failover切换流程
FailoverAutoReinstate	false		true/false			是否启用自动脑裂修复。 启用后,如果备机发生脑裂,处于NEED REPAIR状态,yasom将尝试自动修复
ZeroDataLossMode		true		true/false			是否启用零丢失模式。
                                                        (启用后,将设置主备为最大保护模式,当主库宕机时,备库可自动failover;
														当备库异常时,主库将由yasom降级为最大可用模式,并禁止自动failover,
														直到备库恢复同步后,yasom重新将主库升级为最大保护模式后,使能自动failover)

注意:

仅允许在仲裁选举未启用的情况下设置选举参数。
FailoverThreshold太小,可能会因为网络抖动而发生不必要的切换,请根据网络状态设置合理的超时时间。
FailoverAutoReinstate启用后,会自动修复备库脑裂问题,会使备库与主库有分歧的部分数据丢失,请谨慎使用。
ZeroDataLossMode启用后,优先使用最大保护模式,在最大保护模式下,主库宕机,备库自动failover后,不会丢失数据。
当备库异常后,主库会降级为最大可用模式,此时备库有丢失数据的风险,所以自动failover将禁用,直到主库再次恢复最大保护模式。
因此零丢失模式的切换条件更严格,但是能保证数据不丢失。

#示例,这里不执行
yasboot election config set -k FailoverThreshold -v 5 -c yashandb
-------------------------------------

11.查看仲裁选举相关的事件
包括事件名,发生时间,处理时间,处理是否成功等。
yasboot election event show -c yashandb
------------------------------------------------
事件名								含义
failover			备库无法连接主库,并且心跳超时后,向yasom上报,通知yasom将进行仲裁选举
confirm role		主库重启的时候,需要确认自己的角色,向yasom上报,通知yasom确认该节点的实际角色。如果旧主库需要降备,将直接启动为备库
need repair			备库状态为NEED REPAIR,可能是非零丢失模式下,产生脑裂现象,旧主库降备后无法继续接收日志数据,需要通知yasom修复该备库
protection demote	零丢失模式下,当备库异常,导致主库事务阻塞时,主库向yasom上报,通知yasom将主库的保护模式降级为最大可用模式,并禁止自动切换
protection promote	零丢失模式下,当备库恢复同步后,主库向yasom上报,通知yasom将主库的保护模式升级为最大保护模式,并恢复自动切换

Note:
同一种事件最多保存5条,超出将淘汰老的事件。
在1分钟内,下发SQL处理失败3次后,将不再处理failover和need repair事件,后续的相同事件会被忽略,并在最近一次事件记录里增加Ignore字段的值。

-----------------------------------------

12.故障切换验证
验证1,正常关闭主库
$ yasboot node stop -c yashandb -n 1-1

查看集群状态
$ yasboot cluster status -c yashandb -d

此时查看仲裁选举相关的事件
yasboot election event show -c yashandb

结论:正常关机,备库并不会自动升主。

------------
验证2,模拟异常关闭,kill主库(节点1-1)进程
因为刚才关闭了1-1,这里先启动起来
yasboot node start -c yashandb -n 1-1

查看集群状态
yasboot cluster status -c yashandb -d

直接kill进程,模拟异常现象
ps -ef | grep "/bin/yasdb" | awk '{print $2}' | xargs kill -9 2>/dev/null

再次查看集群状态
yasboot cluster status -c yashandb -d

查看集群事件
$ yasboot election event show -c yashandb   group 1
 Name              | Node Id | Report Time         | Process Time        | Success | Ignore | Error                                         
-------------------------------------------------------------------------------------------------------------------------------------------------
 protection demote | 1-2:2   | 2024-09-24 09:37:04 | 2024-09-24 09:37:04 | Yes     | 0      |                                               
-------------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 failover          | 1-2:2   | 2024-09-24 09:37:03 | 2024-09-24 09:37:04 | Yes     | 0      |                                               


可以看到备库已经自动升为主库
$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid  | instance_status | database_status | database_role | listen_address      | data_path                 
--------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | off  | -               | -               | -             | 192.168.127.39:1688 | /data1/yashan/yasdb_data/db-1-1
----------+-----------+--------+------+-----------------+-----------------+---------------+---------------------+---------------------------------
 host0002 | db        | 1-2:2  | 7927 | open            | normal          | primary       | 192.168.127.40:1688 | /data1/yashan/yasdb_data/db-1-2
----------+-----------+--------+------+-----------------+-----------------+---------------+---------------------+---------------------------------

查看原备库数据库启动模式

SQL> SELECT database_name,log_mode,open_mode,database_role FROM V$DATABASE;

[yashan@localhost conf]$ yasql sys/[email protected]:1688
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.2.1.100 x86_64 - X86 64bit Linux
SQL> SELECT database_name,log_mode,open_mode,database_role FROM V$DATABASE;
DATABASE_NAME                                                    LOG_MODE          OPEN_MODE         DATABASE_ROLE
---------------------------------------------------------------- ----------------- ----------------- -----------------
yashandb                                                         ARCHIVELOG        READ_WRITE        PRIMARY
1 row fetched.
SQL>

结论:模拟异常关闭主库,备库自动升主。
------------------------------------------------------------------------------------------------------

验证3 主库异常关闭后恢复启动
如果节点1-1启动,会发生什么情况???

启动节点1-1数据库
yasboot node start -c yashandb -n 1-1

查看集群状态
yasboot cluster status -c yashandb -d

$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid    | instance_status | database_status | database_role | listen_address      | data_path               
----------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 125903 | open            | normal          | standby       | 192.168.127.39:1688 | /data1/yashan/yasdb_data/db-1-1
----------+-----------+--------+--------+-----------------+-----------------+---------------+---------------------+---------------------------------
 host0002 | db        | 1-2:2  | 7927   | open            | normal          | primary       | 192.168.127.40:1688 | /data1/yashan/yasdb_data/db-1-2
----------+-----------+--------+--------+-----------------+-----------------+---------------+---------------------+---------------------------------
可以看到1-1启动后,已自动以备库身份加入集群

查看仲裁信息

yasboot election event show -c yashandb

$ yasboot election event show -c yashandb
group 1
 Name               | Node Id | Report Time         | Process Time        | Success | Ignore | Error                                        
--------------------------------------------------------------------------------------------------------------------------------------------------
 protection demote  | 1-2:2   | 2024-09-24 09:37:04 | 2024-09-24 09:37:04 | Yes     | 0      |                                              
--------------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 failover           | 1-2:2   | 2024-09-24 09:37:03 | 2024-09-24 09:37:04 | Yes     | 0      |                                              
--------------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 protection promote | 1-2:2   | 2024-09-24 10:00:48 | 2024-09-24 10:00:48 | Yes     | 0      |                
-------------------------------------------------------------------------------------------------------------------------------------------------- 
可以看到数据库保护模式启用了最大保护。

后续我又进行了节点1-2的数据库进程kill。还是和上述一样的预期,这里就省略了。。。

由此可见崖山db的高可用还是非常稳定可靠的。

标签:主库,yashandb,--,data1,yashan,崖山,06,双机,yasboot
From: https://blog.csdn.net/king01299/article/details/142483668

相关文章

  • PTA L1-067 洛希极限
    L1-067洛希极限(10分)科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。洛希极限(Rochelimit)是一个天体自身的引力与第二个天体造成的潮汐力相等时的距......
  • ASE60DQ120BG-ASEMI高耐压快恢复二极管MUR6060PT
    编辑:llASE60DQ120BG-ASEMI高耐压快恢复二极管MUR6060PT型号:ASE60DQ120BG品牌:ASEMI封装:TO-247安装方式:插件批号:最新恢复时间:30ns最大平均正向电流(IF):60A最大循环峰值反向电压(VRRM):1200V最大正向电压(VF):1.05V~1.80V工作温度:-55°C~150°C引脚数量:2芯片个数:1芯片尺寸:mil......
  • CF2006A Iris and Game on the Tree
    题目链接题解知识点:贪心,博弈论。一个\(01\)串中\(01,10\)的个数差只与首尾两个字符相关,若首尾字符相同,则个数差为\(0\),否则为\(1\)或\(-1\)。因此,树上除了根节点和叶子节点的\(?\)是不影响叶子节点权值的(但可能影响策略,导致答案不一样),我们只需要考虑叶子节点和根......
  • 20240806
    MinimumMEX用双指针,如果\(mex\)小于了就往大扩展#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+5;intt,n,a[N],cnt[N],ans;voidSolve(){cin>>n;for(inti=1;i<=n;i++){cin>>......
  • (附源码)SSM 智慧小区管理系统 毕业设计06536
                                                              目录毕业设计摘 要Abstract第1章 前 言1.1 研究背景1.2 研究现状1.3 系统开发目标第2章 相关技术2.1开发技术说明......
  • PTA L1-064 估值一亿的AI核心代码
    L1-064估值一亿的AI核心代码(20分)以上图片来自新浪微博。本题要求你实现一个稍微更值钱一点的AI英文问答程序,规则是:无论用户说什么,首先把对方说的话在一行中原样打印出来;消除原文中多余空格:把相邻单词间的多个空格换成1个空格,把行首尾的空格全部删掉,把标点符号前面的空......
  • 51单片机双机通信——DS18B20温度测量
    目标实现功能    甲机控制数字温度传感器DS18B20采集温度、并将温度传递给乙机;乙机接收甲机传递的温度数据、并通过8位数码管动态显示。1.DS18B20简介1.1 DS18B20特点DS18B20采用单总线接口,测量结果直接输出数字信号,通过单总线传递给微处理器。工作电压在3.0v~5.5v......
  • PTA L1-062 幸运彩票
    L1-062幸运彩票(15分)彩票的号码有6位数字,若一张彩票的前3位上的数之和等于后3位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。输入格式:输入在第一行中给出一个正整数N(≤100)。随后N行,每行给出一张彩票的6位数字。输出格式:对每张彩......
  • Java高级06,线程
    多线程进程:1.进程是系统运行程序的基本单位。2.每一个进程都有自己独立的一块内存空间、一组系统资源。3.每一个进程的内部数据和状态都是完全独立的。线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。多线程:一个进程中同时运行多个线程来完成不同......
  • Leetcode 406. 根据身高重建队列
    1.题目基本信息1.1.题目描述假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i]=[h_i,k_i]表示第i个人的身高为h_i,前面正好有k_i个身高大于或等于h_i的人。请你重新构造并返回输入数组people所表示的队列。返......