EcoX 安装配置
本文介绍如何在 CentOS 平台上使用 EcoX 搭建 PostgreSQL 高可用集群。这里我们需要使用到 3 个组件:PostgreSQL、ZooKeeper 和 EcoX。
基本环境⌗
下表给出了本次实验的基本环境,包含 3 个 ZooKeeper 仲裁集群节点和 3 个数据库集群节点。
IP 地址 | 主机名 | 用途 |
---|---|---|
10.9.10.207 | zookeeper01 | zookeeper 节点 |
10.9.10.189 | zookeeper02 | zookeeper 节点 |
10.9.10.222 | zookeeper03 | zookeeper 节点 |
10.9.10.125 | ecox01 | 数据库节点 |
10.9.10.202 | ecox02 | 数据库节点 |
10.9.10.232 | ecox03 | 数据库节点 |
ZooKeeper 搭建⌗
首先,我们需要搭建 ZooKeeper 集群。ZooKeeper 依赖于 Java,因此,我们需要先安装 Java。
# yum install -y java-1.8.0-openjdk.x86_64
接着,我们下载 ZooKeeper 安装包,校验 sha512,并解压安装。
# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.5.10/apache-zookeeper-3.5.10-bin.tar.gz
# sha512sum apache-zookeeper-3.5.10-bin.tar.gz
fbca82d93fb07534d2cd7d93a399463cfea7e772075285d103e7cda5599d14c2d9996c1e50cc66c7c0dc78f996b20e75b20d74df368eb222dbc3caa0ab2cc14b apache-zookeeper-3.5.10-bin.tar.gz
# tar xf apache-zookeeper-3.5.10-bin.tar.gz -C /usr/local/
配置环境变量和域名解析文件方便后续操作。
# cat <<END > /etc/profile.d/zookeeper.sh
export ZOO_HOME=/usr/local/apache-zookeeper-3.5.10-bin
export PATH=\$ZOO_HOME/bin:\$PATH
END
# tail -n 3 /etc/hosts
10.9.10.207 zookeeper01
10.9.10.189 zookeeper02
10.9.10.222 zookeeper03
创建用户和组来运行 ZooKeeper,您可能需要根据需要修改用户目录。
# groupadd zook
# useradd -d /home/zook -m -g zook zook
切换到 zook
用户,并创建相应的 ZooKeeper 目录。
# su - zook
$ mkdir -p data/{conf,log,datlog,dat}
创建配置文件,我们可以复制 zoo_sample.cfg
文件并做相应的修改来完成 ZooKeeper 的配置。
$ cp /usr/local/apache-zookeeper-3.5.10-bin/conf/zoo_sample.cfg $HOME/data/conf/zoo.cfg
这里需要修改 dataDir
和 dataLogDir
两个参数,它们分别表示 ZooKeeper 的数据目录和数据日志目录,同时我们还需要增加 ZooKeeper 的节点信息。
dataDir=/home/zook/data/dat
dataLogDir=/home/zook/data/datlog
# 2888 为选举端口,3888 为心跳端口
server.1=zookeeper01:2888:3888
server.2=zookeeper02:2888:3888
server.3=zookeeper03:2888:3888
我们还需设置 ZOO_LOG_DIR
来配置 ZooKeeper 运行时的日志(这里是程序日志)。
$ cat <<END >> ~/.bashrc
export ZOO_LOG_DIR=/home/zook/data/log
END
然后,我们需要根据 server.N
来创建 myid
文件。我们需要在 ZooKeeper 的数据库目录下创建一个 myid
文件,其中包含一个数字,该数字需要和 server.N
中的配置对应起来。如上所示配置,我们需要在 zookeeper01
这个机器上的 myid
文件内容为 1
,zookeeper02
这个机器上的 myid
文件内容为 2
,zookeeper03
这个机器上的 myid
文件内容为 3
。
$ # zookeeper01 节点
$ echo 1 > /home/zook/data/dat/myid
$ # zookeeper02 节点
$ echo 2 > /home/zook/data/dat/myid
$ # zookeeper03 节点
$ echo 3 > /home/zook/data/dat/myid
完成上述配置之后,我们便可以启动 ZooKeeper 集群了。
$ zkServer.sh --config $HOME/data/conf start
/bin/java
ZooKeeper JMX enabled by default
Using config: data/conf/zoo.cfg
Starting zookeeper ... STARTED
三个节点都正常启动了,我们可以使用 zkServer.sh --config $HOME/data/conf status
来查看节点的状态。
$ zkServer.sh --config $HOME/data/conf status
/bin/java
ZooKeeper JMX enabled by default
Using config: data/conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
我们可以使用 stop
子命令来停止 ZooKeeper 节点。
$ zkServer.sh --config $HOME/data/conf stop
/bin/java
ZooKeeper JMX enabled by default
Using config: data/conf/zoo.cfg
Stopping zookeeper ... STOPPED
备注:
- 如果您的环境没有外网访问权限,您可以在有外网的主机上通过下面的命令下载相关软件。
# yum install --downloadonly --downloaddir=/tmp/rpms java-1.8.0-openjdk.x86_64
- 如果您的环境上已经安装了,可以使用下面的命令来下载 rpm 安装包。
# yum reinstall --downloadonly --downloaddir=/tmp/rpms java-1.8.0-openjdk.x86_64
- 在上述的配置中我采用了局部配置的方式,缺点是启动、停止等比较麻烦(需要带上
--config
选项),您可以通过全局配置来避免这一点。# cp /usr/local/apache-zookeeper-3.5.10-bin/conf/zoo_sample.cfg /usr/local/apache-zookeeper-3.5.10-bin/conf/zoo.cfg
通过修改全局配置文件
/usr/local/apache-zookeeper-3.5.10-bin/conf/zoo.cfg
来配置 ZooKeeper,这样在启动的时候就可以不需要带上--config
选项了,同时我们还可以修改/usr/local/apache-zookeeper-3.5.10-bin/conf/log4j.properties
配置文件来指定程序日志的路径。
安装 PostgreSQL⌗
现在我们需要来安装 PostgreSQL 数据库了,您可以参考官方文档安装。
# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum install -y postgresql14-server
PostgreSQL 相关的命令安装在 /usr/pgsql-14
目录下面,同时将会新建一个 postgres
用户。
部署 EcoX⌗
EcoX 依赖⌗
EcoX 依赖于 ifconfig
和 arping
命令,因此,我们需要先安装这些工具。
# yum -y install iputils.x86_64 net-tools.x86_64
EcoX 内部执行某些命令时需要使用到 sudo
进行提取,因此还需要安装 sudo
工具,同时将运行 EcoX 的用户添加到 sudoer
中,这里我们将以 postgres
用户执行 EcoX。
# visudo
postgres ALL=(ALL) NOPASSWD: ALL
关闭防火墙,否则 EcoX 在做 pg_rewind
时可能会出错,最好的做法是配置相应的防火墙规则。
# systemctl stop firewalld
# systemctl disable firewalld
接着安装 EcoX 软件。
# rpm -ivh EcoX-5.13-1.el7.centos.x86_64.rpm
EcoX 将安装在 /usr/EcoX
目录下,同时,在 postgres
用户下配置 EcoX 环境变量。
$ cat <<END >> ~/.bash_profile
export PATH=/usr/EcoX/bin:\$PATH
export LD_LIBRARY_PATH=/usr/EcoX/lib:\$LD_LIBRARY_PATH
END
现在,EcoX 已经安装完成,接下来我们配置 PostgreSQL 集群。
EcoX 配置运行⌗
首先修改 EcoX 配置文件 /usr/EcoX/etc/ecox.conf
,我们可以从模版配置文件拷贝一份,然后对其进行配置。
# cp /usr/EcoX/etc/ecox.conf.sample /usr/EcoX/etc/ecox.conf
root=/EcoX
cluster=WwIT
# ZooKeeper 集群连接地址
zkhost=10.9.10.207:2181,10.9.10.189:2181,10.9.10.222:2181
zktimeout=9000
pgcomaster_num=2
auto_promote_slave=true
use_watch_dog=ture
log_filename=/var/lib/pgsql/ecox.log
log_level=info
# 数据库监听地址,节点配置成各自的 IP 地址
pghost=10.9.10.125
# PostgreSQL 二进制所在路径
pgbin=/usr/pgsql-14/bin
# PostgreSQL 数据库监听端口
pgport=5433
# PostgreSQL 数据目录
pgdata=/var/lib/pgsql/pgdata
# 允许哪些网段访问数据库,目前只支持配置一个网段,该参数只在需要通过
# EcoX 初始化数据库情况下,写入 pg_hba.conf 时使用
pgclient_net=10.9.0.0/16
# 数据库集群中节点之前数据同步使用的网络,该参数只在需要通过 EcoX 初
# 始化数据库情况下,写入 pg_hba.conf 时使用
pgcluster_net=10.9.0.0/16
# 主节点是否开启 VIP 功能,VIP 随着主节点的切换而飘移(用于读写操作)
do_not_use_vip=true
# 直接修改物理网卡的 IP,还是使用物理网卡的虚拟网卡(如 eth0:1)
is_vip_use_real_interface=false
eth_port=eth0
virtual_ip=10.9.10.201
netmask=255.255.255.0
# 从节点是否开启 VIP 功能,VIP 只在 comaster 之间飘移(用于只读操作)
do_not_use_comaster_vip=true
comaster_eth_port=eth0
comaster_virtual_ip=10.10.56.234
comaster_netmask=255.255.255.0
由于 EcoX 需要将进程的 PID 写入到 /usr/EcoX/share/EcoX.pid
中和节点信息写入到 /usr/EcoX/share/node.rd
中,因此,我们需要赋予其适当的权限。
# chown -R postgres:postgres /usr/EcoX/
现在,一切准备就绪,我们使用 EcoX --start
命令来启动 PostgreSQL 集群。
$ EcoX --start
[...]
PostgreSQL 14.* is compatible
Waiting for database starting ....2022-12-23 09:27:43.488 UTC [711017] LOG: 00000: redirecting log output to logging collector process
2022-12-23 09:27:43.488 UTC [711017] HINT: Future log output will appear in directory "log".
2022-12-23 09:27:43.488 UTC [711017] LOCATION: SysLogger_Start, syslogger.c:674
done
database start successed
这是一个前台运行的命令,您可以使用封装后的 service 服务来运行。所有节点启动完成之后,可以使用下面的命令查看集群状态:
$ EcoX --show cluster
node name : ip address | port | online
----------------------------------------------------------
*node0000000000: 10.9.10.125 | 5433 | TRUE
node0000000001: 10.9.10.202 | 5433 | TRUE
node0000000002: 10.9.10.232 | 5433 | TRUE
master : node0000000000
comaster 1: node0000000001
comaster 2: node0000000002
last master: node0000000000
sync replication :node0000000001
备注:
- 如果是 SUSE 系统,在普通用户下执行
ifconfig
会报权限不足,您可以执行下面的命令解决这个问题。# ln -s /sbin/ifconfig /usr/bin/ifconfig
- 云平台 lx 虚拟机不支持虚拟 IP。