暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

我为YashanDB YAC插上自动负载均衡的翅膀

原创 问天的天问 2024-12-26
509


一、前言

崖山数据库(YashanDB)是由深圳计算科学研究院自主设计研发的新型数据库管理系统。它在经典数据库理论的基础上,融入了原创的有界计算、近似计算、并行可扩展和跨模融合计算理论。这些创新理论使得崖山数据库能够满足金融、政企、能源等关键行业对高性能、高并发及高安全性的要求。

一年前,我接触到YashanDB个人版,让我眼前一亮,当时的感觉就是目前在国内数据库,从使用角度来说YashanDB是最像Oracle的,现在来使用YashanDB的共享集群版,依然眼前一亮,单凭共享存储这一点,相信和其他大多数国内厂商已不在一个级别。从这几天试用上来看,个人有些不成熟的建议,如引入浮动IP,业务网与数据网分离等,毕竟我对YAC内部结构了解还不太深,建议可能会不正确,仅供探讨。

既然是试用,就想写些试用心得,那写什么呢?这不禁让我犯了难。同道中人已经写了很多的安装教程,若再继续写安装教程,一是涉雷同之嫌,二是没有什么新意,三是个人也没有动力。在试用的过程中,有些想法,总觉得如果实现这些功能,该产品会更好,如引入浮动IP,既然目前产品还没实现VIP(至少我从官方文档里没有看到此功能),自己是否可借用已有的开源产品来DIY下,解决自己的这个诉求呢?有了方向,就有了测试的动力,于是就诞生了本文。

keepalived和haproxy,应该是实现VIP和负载均衡完美的组合。前些时间想测试一下keepalived和haproxy,但由于客户的搬迁项目占用很多的时间,前期需要维修客户的存储,一直没腾出时间,正好借这次试用YAC的机会,一起测试一下我想要的功能。


为什么采用keepalived和haproxy?
keepalived是一个基于VRRP协议的软件,用于实现虚拟路由器的冗余备份和故障转移。它通过监控虚拟路由器的状态,确保在主路由器出现故障时,备份路由器能够迅速接管,从而保证网络服务的连续性。
haproxy是一款专注于高性能的、目前流行的负载均衡软件,用于将网络请求或工作负载分散到多个服务器或计算机资源上的技术,以实现优化资源使用、提高系统吞吐量、增强数据冗余和故障容错能力、以及减少响应时间的目的。
keepalived+haproxy,是实现高可用和负载均衡的完美实现。


二、实验环境

实验工具

版本

VirtualBox

7.1.4 r165100 (Qt6.5.3)

CentOS

CentOS-7-x86_64-DVD-2009

YashanDB

23.2.4

为什么选择使用VirtualBox?

  1. 个人认为使用虚拟机进行各种试验还是很方便,除非虚拟机模拟不了的功能,才会考虑使用物理设备,毕竟个人电脑携带方便,随时随地都可以进行操作。
  2. 相比其他使用共享磁盘方式来说,VirtualBox 创建共享磁盘,是成本最低的,且操作过程轻松快捷易上手。
  3. 土豪毕竟少数,多数人还是和我一样缺少实验设备,如本实验中的共享存储,只能想办法实现,劳动人民还是智慧的。

本文以典型规格(2台服务器,1共享存储且包含3个LUN)为例,测试共享集群部署形态的安装步骤。本文假定您已经有Linux和数据库的基础,所以不会对安装过程做过多的解释。

节点

IP

安装软件

yac01

192.168.2.115/24

YashanDB企业版、keepalived、haproxy

yac02

192.168.2.116/24

YashanDB企业版、keepalived、haproxy

VIP

192.168.2.200/24

三、创建虚拟机

创建两台虚拟机,分别命名为yac01和yac02,虚拟机规格为8CPU、32G MEM、1T Disk。

四、安装CentOS 7.9

五、创建共享磁盘

5.1. 创建磁盘文件

创建3个磁盘文件

D:\>VBoxManage createhd --filename yac11.vdi --size 5120 --format VDI --variant Fixed

D:\>VBoxManage createhd --filename yac12.vdi --size 1024 --format VDI --variant Fixed

D:\>VBoxManage createhd --filename yac13.vdi --size 1024 --format VDI --variant Fixed

修改磁盘属性为共享

D:\>VBoxManage modifymedium disk yac11.vdi --type shareable

D:\>VBoxManage modifymedium disk yac12.vdi --type shareable

D:\>VBoxManage modifymedium disk yac13.vdi --type shareable

将创建的磁盘附加到虚拟主机

D:\>VBoxManage storageattach yac01 --storagectl "SATA" --port 1 --device 0 --type hdd --medium yac11.vdi --mtype shareable

D:\>VBoxManage storageattach yac01 --storagectl "SATA" --port 2 --device 0 --type hdd --medium yac12.vdi --mtype shareable

D:\>VBoxManage storageattach yac01 --storagectl "SATA" --port 3 --device 0 --type hdd --medium yac13.vdi --mtype shareable

D:\>VBoxManage storageattach yac02 --storagectl "SATA" --port 1 --device 0 --type hdd --medium yac11.vdi --mtype shareable

D:\>VBoxManage storageattach yac02 --storagectl "SATA" --port 2 --device 0 --type hdd --medium yac12.vdi --mtype shareable

D:\>VBoxManage storageattach yac02 --storagectl "SATA" --port 3 --device 0 --type hdd --medium yac13.vdi --mtype shareable

虚拟主机属性中的存储配置如下为正常

5.2. 启动操作系统,识别新添加的共享硬盘

# fdisk -l | grep /dev

# /usr/lib/udev/scsi_id -g -u -d /dev/sdb

# /usr/lib/udev/scsi_id -g -u -d /dev/sdc

# /usr/lib/udev/scsi_id -g -u -d /dev/sdd

5.3. 生成 rules 文件

# vi /etc/udev/rules.d/99-yashan-rawdevices.rules

KERNEL=="sd*[!0-9]", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB2e449f31-0cd69867", RUN+="/bin/sh -c 'mknod /dev/yasdata b $major $minor; chown yashan:yashan /dev/yasdata; chmod 0666 /dev/yasdata'"

KERNEL=="sd*[!0-9]", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB375b4f3d-ba308d48", RUN+="/bin/sh -c 'mknod /dev/yasvote b $major $minor; chown yashan:yashan /dev/yasvote; chmod 0666 /dev/yasvote'"

KERNEL=="sd*[!0-9]", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB5ed8fd97-77b304bf", RUN+="/bin/sh -c 'mknod /dev/yasycr b $major $minor; chown yashan:yashan /dev/yasycr; chmod 0666 /dev/yasycr'"

5.4. 重新加载 rules 文件,查看绑定后设备信息

# mkdir /dev/yas

# udevadm control --reload-rules

# udevadm trigger

# ls -l /dev/yas*

六、操作系统基础配置

注:本节的操作需要在2台节点进行。

6.1. 设置主机名

# hostnamectl set-hostname yac01

6.2. 配置时区

# timedatectl set-timezone Asia/Shanghai

6.3. 配置IP

# nmcli c m enp0s3 ipv4.method manual ipv4.address 192.168.2.115/24

# nmcli c m enp0s3 ipv4.gateway 192.168.2.1

# nmcli c m enp0s3 ipv4.dns 192.168.1.1

# nmcli c m enp0s3 connection.autoconnect yes

# nmcli c u enp0s3

6.4. 编辑 /etc/hosts

# cat >> /etc/hosts << EOF

192.168.2.115`echo -e "\t"`yac01

192.168.2.116`echo -e "\t"`yac02

EOF

6.5. 关闭防火墙

# systemctl disable --now firewalld

6.6. 关闭SELinux

# sed -i 's@\(SELINUX=\).*@\1disabled@g' /etc/selinux/config

# setenforce 0

6.7. 配置软件仓库

创建备份目录,保存原有配置文件

# mkdir /etc/yum.repos.d/bak

# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

下载软件仓库

# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

修改配置

# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

更新操作系统

# yum clean all

# yum makecache

# yum update -y

安装gcc软件包,供编译软件使用

# yum install -y gcc

6.8. 安装openssl

自yashandb-23.2.3开始,要求openssl需要openssl 1.1.1。

6.8.1.) 检查openssl,检查是否为1.1.1

# openssl version

6.8.2.) 卸载 openssl

# yum remove -y openssl

6.8.3.) 下载openssl-1.1.1

下载地址:http://www.openssl.org/source/openssl-1.1.1.tar.gz

6.8.4.) 安装openssl-1.1.1

# tar -xzvf openssl-1.1.1.tar.gz

# cd openssl-1.1.1/

# ./config --prefix=/usr

# make && make install

6.9. 操作系统参数调整

YashanDB数据库所需的资源限制值的最小要求,将资源限制值调整为大于或等于最小要求的值。

# cat >> /etc/security/limits.conf << EOF

yashan`echo -e "\t"`soft`echo -e "\t"`nproc`echo -e "\t"`1048576

yashan`echo -e "\t"`hard`echo -e "\t"`nproc`echo -e "\t"`1048576

yashan`echo -e "\t"`soft`echo -e "\t"`nofile`echo -e "\t"`1048576

yashan`echo -e "\t"`hard`echo -e "\t"`nofile`echo -e "\t"`1048576

yashan`echo -e "\t"`soft`echo -e "\t"`rss`echo -e "\t"`unlimited

yashan`echo -e "\t"`hard`echo -e "\t"`rss`echo -e "\t"`unlimited

yashan`echo -e "\t"`soft`echo -e "\t"`stack`echo -e "\t"`8192

yashan`echo -e "\t"`hard`echo -e "\t"`stack`echo -e "\t"`8192

EOF

6.10. 关闭透明大页

YashanDB 建议关闭透明大页,部分操作系统默认开启了透明大页选项,可执行以下命令确认:

修改/etc/default/grub, 添加 transparent_hugepage=never

# vi /etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

修改为

GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"

保存退出。

检查当前系统的引导类型:

# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

两种引导的启动文件路径分别为:

BIOS:/boot/grub2/grub.cfg

UEFI:/boot/efi/EFI/<distro_name>/grub.cfg,distro_name 为系统发行版本名称,例如 ubuntu、fedora、debian 等。

执行 grub2–mkconfig 指令重新配置 grub.cfg,本例为BIOS。

更新配置文件

# grub2-mkconfig -o /boot/grub2/grub.cfg

重启后验证结果

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

6.11. 创建数据库用户

# useradd yashan

# echo "yashan" | passwd --stdin yashan

6.12. 创建数据库目录

# mkdir -p /data/yashan/yasdb_home

# mkdir -p /data/yashan/yasdb_data

# chown yashan:yashan /data/yashan/yasdb_home

# chown yashan:yashan /data/yashan/yasdb_data

七、安装YAC

注:本节的操作只需在1台节点进行。

7.1. 创建安装软件目录

# su - yashan

$ mkdir ~/install

解压缩YashanDB软件包

$ tar -xf yashandb-23.2.4.100-linux-x86_64.tar.gz -C ~/install

查看安装目录内容

$ cd ~/install

$ ll

7.2. 生成部署文件

执行yasboot package命令生成配置文件,

$ /home/yashan/install/bin/yasboot package ce gen --cluster yashandb -u yashan -p yashan --ip 192.168.2.115,192.168.2.116 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688 --node 2 --data /dev/yasdata --vote /dev/yasvote --ycr /dev/yasycr


执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,可手动修改,但不建议删除文件中任何行,否则可能导致后续安装过程报错,或所搭建的环境后续无法进行扩展配置。

yashandb.toml:数据库集群的配置文件。

hosts.toml:服务器的配置文件。

7.3. 执行安装

$ /home/yashan/install/bin/yasboot package install -t hosts.toml -i yashandb-23.2.4.100-linux-x86_64.tar.gz

7.4. 数据库部署

$ /home/yashan/install/bin/yasboot cluster deploy -t yashandb.toml --yfs-force-create -d

Note:可通过指定-d, --child参数展示任务以及子任务信息,从而了解部署进度。

返回如下信息表示已成功部署。

7.5. 配置环境变量

# 部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件

$ cd /data/yashan/yasdb_home/yashandb/23.2.4.100/conf

# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除

$ cat yashandb.bashrc >> ~/.bashrc

$ source ~/.bashrc

7.6. 检查安装结果

YashanDB不提供系统初始口令,需使用yasboot工具设置数据库sys用户的密码,以安装用户登录到服务器并执行如下命令设置密码。

$ yasboot cluster password set -n Yashan#123 -c yashandb

验证

执行如下命令,查看数据库状态。

$ yasboot cluster status -c yashandb -d -u sys -p Yashan#123

IMG_256

使用yasql工具连接数据库,查看实例状态。

$ yasql sys/Yashan#123@192.168.2.115:1688

SQL> SELECT STATUS FROM V$INSTANCE;

STATUS

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

OPEN


八、安装keepalived

注:本节的操作需要在2台节点进行。

8.1. 安装keepalived软件包

# yum install -y keepalived

8.2. 移走默认配置文件

# mv /etc/keepalived/keepalived.conf{,.bak}

8.3. 新创建配置文件,输入下述配置文件内容

# 节点yac01

# vi /etc/keepalived/keepalived.conf

# 节点yac02

# vi /etc/keepalived/keepalived.conf

8.4. 启动服务

# systemctl start keepalived

九、安装HAProxy

注:本节的操作需要在2台节点进行。

9.1. 安装haproxy软件包

# yum install -y haproxy

9.2. 移走默认配置文件

# mv /etc/haproxy/haproxy.cfg{,.bak}

9.3. 新创建配置文件,输入下述配置文件内容

# vi /etc/haproxy/haproxy.cfg

9.4. 启动服务

# systemctl restart haproxy

9.5. 测试连接

$ yasql sys/Yashan#123@192.168.2.200:20000

实验结果证明,可以通过VIP进行数据库访问,第一次连接分配到节点yac01上,第二次连接分配到节点yac02上,实现自动负载均衡。

十、试用期望

我深知自研之路道阻且长,唯行则将至。经过这些年的发展,应看到我们的进步,但也要看到我们的不足,国产化还有很长的路要走。

“崖山之后无中国,明亡之后无华夏”,借助国产化东风,祝愿YashanDB能在这个赛道越走越远,扛起数据库国产化大旗。

最后由衷的希望,YashanDB可以更完美。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论