崖山从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/yashandb_123@192.168.127.40: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