原作者:杨金福
适用范围
Mogdb v2.0.1 集群从1主1备,扩容为1主2备.
背景概述
某客户原部署为1主1备mogdb V2.0.1集群,因两个节点均在可用区1,不满足客户公司的容灾要求,客户要求在可用2增加一个备节点。
解决方案
一、节点3安装准备
1.软硬件环境要求
准备一台与原环境的备节点软硬件一致的服务器
2.操作系统配置
2.1 关闭防火墙,selinux
解释## 关闭防火墙:
systemctl stop firewalld
## 禁用开机启动:
systemctl disable firewalld
## 查看firewall防火墙状态:
systemctl status firewalld
2.2 禁用selinux
解释## 永久禁用
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
cat /etc/selinux/config|grep SELINUX
## 重启
reboot
2.3 设置字符集参数
解释## 将各数据库节点的字符集设置为相同的字符集。
cat>> /etc/profile<<EOF
export LANG=en_US.UTF-8
EOF
## 查看
cat /etc/profile | grep LANG
确保与原集群节点的字符集一致
2.4 修改主机名(可选)
解释## 查看
hostname
## 修改主机名为mogdb-node3
vi /etc/hostname
## 重启
reboot
2.5 设置时区和时间(可选)
解释## 查看
timedatectl
如果与原集群主机不一致,则修改;一致则跳过
rm -fr /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ll /etc/localtime
2.6 关闭swap交换内存(可选)
解释## 关闭swap交换内存,修改分区表文件,删除SWAP mount信息
cp /etc/fstab /etc/fstab.bak
sed -i '/swap/s/^/#/' /etc/fstab
cat /etc/fstab|grep -v ^#|grep -v '^$'
ps:内存较大时关闭交换内存(建议32G以上)
2.7 设置网卡MTU值(可选)
解释## 除非网卡支持,否则不建议修改
## 使用如下命令将各数据库节点的网卡MTU值设置为相同大小。
对于X86,MTU值推荐1500;对于ARM,MTU值推荐8192。
## 查看原节点1或节点2的mtu值
ifconfig -a
## 如需要修改,参照以下命令
ifconfig 网卡编号 mtu值
2.8 配置NTPD
解释## 节点3安装ntpdate(可参照节点2设置定时任务)
yum install -y ntpdate
## 查看当前时间
date
## 同步时间
ntpdate 192.168.115.83
## 设置定时任务
crontab -e #添加定时任务(每10分钟同步一次)
*/10 * * * * /usr/sbin/ntpdate 192.168.115.83
2.9 允许root用户远程SSH
解释sed -i '/Banner/s/^/#/' /etc/ssh/sshd_config
sed -i '/PermitRootLogin/s/^/#/' /etc/ssh/sshd_config
echo -e "\n" >> /etc/ssh/sshd_config
echo "Banner none " >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRootLogin|Banner'
systemctl restart sshd
2.10 关闭透明大页
解释## 关闭透明大页可以减少宿主机操作系统的开销,以便获得更稳定的性能
cat /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
2.11 配置操作系统参数(可选)
解释## 修改内核参数
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_fin_timeout = 60
EOF
## 重启
reboot
2.12 安装依赖包
解释yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel redhat-lsb-core openssh expect openssl-devel
yum install -y gcc*
yum install -y java-1.8.0-openjdk* psmisc bzip2
yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel libxml2-devel patch redhat-lsb-core unzip gcc gcc-c++ perl openssl-devel libffi-devel libtool zlib-devel
二、Python3安装
1.解压并配置
解释mkdir -p /usr/local/python3
tar -zxvf Python-3.6.5.tgz
cd Python-3.6.5
./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC
2.安装
make
make install
3.创建软连接
解释ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
find / -name libpython3.6m.so.1.0
cp libpython3.6m.so.1.0 /usr/lib64
4.查看版本
python3 -V
三、 备份MogDB主库
1.备份主库(在主库节点上操作)
解释mkdir -p /mogdb/data/db1_bak
chown -R omm:dbgrp /mogdb/data/db1_bak
su - omm
gs_basebackup -D /mogdb/data/db1_bak -h 192.168.115.83 -p 26000 -Fplain -Xstream
四、 扩容MogDB
1.添加主机
节点3:vi /etc/hosts
解释192.168.115.83 mogdb-node1
192.168.115.84 mogdb-node2
192.168.115.85 mogdb-node3
## 查看
cat /etc/hosts
## 有些环境对/etc/hosts文件配置了127.0.0.1的条目,会影响数据库的正常安装,因此安装MogDB数据库时需要将如下127.0.0.1配置条目注释,安装完数据库之后再打开
vi /etc/hosts
#127.0.0.1 XXXXXX
原节点1和节点2:vi /etc/hosts
解释192.168.115.85 mogdb-node3
## 查看
cat /etc/hosts
## 有些环境对/etc/hosts文件配置了127.0.0.1的条目,会影响数据库的正常安装,因此安装MogDB数据库时需要将如下127.0.0.1配置条目注释,安装完数据库之后再打开
vi /etc/hosts
#127.0.0.1 XXXXXX
2.建立用户
原节点1和节点2查看omm用户
id omm
uid=1000(omm) gid=1000(dbgrp) groups=1000(dbgrp)
原节点3执行创建组和用户
groupadd -g 1000 dbgrp
useradd -u 1000 -g dbgrp omm
passwd omm ##密码如:omm123
3.建立互信
解释节点3 root执行:
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@mogdb-node1
ssh-copy-id -i .ssh/id_rsa.pub root@mogdb-node2
ssh-copy-id -i .ssh/id_rsa.pub root@mogdb-node3
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.115.83
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.115.84
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.115.85
原节点1和节点2 root执行:
ssh-copy-id -i .ssh/id_rsa.pub root@mogdb-node3
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.115.85
解释节点3 omm执行:
su - omm
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub omm@mogdb-node1
ssh-copy-id -i .ssh/id_rsa.pub omm@mogdb-node2
ssh-copy-id -i .ssh/id_rsa.pub omm@mogdb-node3
ssh-copy-id -i .ssh/id_rsa.pub omm@192.168.115.83
ssh-copy-id -i .ssh/id_rsa.pub omm@192.168.115.84
ssh-copy-id -i .ssh/id_rsa.pub omm@192.168.115.85
原节点1和节点2 omm执行:
su - omm
ssh-copy-id -i .ssh/id_rsa.pub omm@mogdb-node3
ssh-copy-id -i .ssh/id_rsa.pub omm@192.168.115.85
4.停业务系统并执行检查点
解释su - omm
gsql -d postgres -p 26000 -r
checkpoint;
checkpoint;
checkpoint;
\q
5.创建新clusterconfig.xml文件
解释cd /opt/software/mogdb/
cp clusterconfig.xml clusterconfig.xml.bf
vi clusterconfig.xml
--新增补充节点3信息
6.clusterconfig.xml示例
解释<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- MogDB整体信息 -->
<CLUSTER>
<PARAM name="clusterName" value="dbCluster" />
<PARAM name="nodeNames" value="node1,node2,node3" />
<PARAM name="backIp1s" value="192.168.0.11,192.168.0.12, 192.168.0.13"/>
<PARAM name="gaussdbAppPath" value="/opt/mogdb/app" />
<PARAM name="gaussdbLogPath" value="/var/log/mogdb" />
<PARAM name="gaussdbToolPath" value="/opt/enmo/wisequery" />
<PARAM name="corePath" value="/opt/mogdb/corefile"/>
<PARAM name="clusterType" value="single-inst"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<PARAM name="name" value="node1"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.0.11"/>
<PARAM name="sshIp1" value="192.168.0.11"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="26000"/>
<PARAM name="dataNode1" value="/mogdb/data/db1,node2,/mogdb/data/db1, node3,/mogdb/data/db1"/>
</DEVICE>
<!-- node2上的节点部署信息,其中“name”的值配置为主机名称 -->
<DEVICE sn="1000002">
<PARAM name="name" value="node2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.0.12"/>
<PARAM name="sshIp1" value="192.168.0.12"/>
</DEVICE>
<!—node3上的节点部署信息,其中“name”的值配置为主机名称 -->
<DEVICE sn="1000002">
<PARAM name="name" value="node3"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.0.13"/>
<PARAM name="sshIp1" value="192.168.0.13"/>
</DEVICE>
</DEVICELIST>
</ROOT>
7.检查集群状态
解释##节点1上检查集群状态
su - omm
gs_om -t status
gs_om -t status --detail
gs_om -t status --all
gs_om -t refreshconf
8.集群扩容
解释##在集群第一个节点root用户下执行
cd /opt/software/mogdb/script/impl/expansion
vi ExpansionImpl.py
--将第921、933 行中的 gaussdb 改为 mogdb
cd /opt/software/mogdb/script
source /home/omm/.bashrc
./gs_expansion -U omm -G dbgrp -X /opt/software/mogdb/clusterconfig.xml -h 192.168.115.85
9.检查环境变量设置
解释##检查原节点1和节点2的环境变量
more /etc/profile
more /home/omm/.bash_profile
more /home/omm/.bashrc
more /etc/bashrc
注:通常在/etc/profile和/home/omm/.bashrc有自定义环境变量
##对节点3添加环境变量,与原节点1同步,如:
cat>> /etc/profile<<EOF
export LD_LIBRARY_PATH=/opt/software/mogdb/script/gspylib/clib:$LD_LIBRARY_PATH
export PATH=/root/gauss_om/omm/script:$PATH
EOF
source /etc/profile
echo $LD_LIBRARY_PATH
##恢复前面注释掉的127.0.0.1条目
vi /etc/hosts
127.0.0.1 XXXXXX
10.登陆和验证
解释su -omm
gsql -d postgres -p26000 -r
show server_version;
SELECT version();
\q
gs_om -t status
gs_om -t status --detail
gs_om -t status --all
11.更改同步节点
解释默认备库为异步,如果想配置同步需在主库的vi postgresql.conf做如下配置。
synchronous_standby_names = '*'
--重启集群
gs_om -t restart
gs_om -t status --all
--检查同步
su -omm
gsql -d postgres -p26000 -r
select * from pg_stat_replication;
参考文档
https://support.enmotech.com/article/history/5065
https://docs.mogdb.io/zh/mogdb/v5.0/gs_expansion粗体
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




