记一次离线环境安装patroni的踩坑

1、前言

近期接了个任务,包含pg数据库高可用部署的需求,于是想到了已经有过若干次实操经验的patroni+haproxy模式。不过这次略有不同,安装环境是离线的。但是有之前几次经验打底,想着离线也没啥大不了,就是在联网环境下把依赖down下来在上传到环境上就行了,结果惨遭打脸。。

2、踩坑经过

一开始先找一台与部署环境相近的可联网服务器,用yum和pip将需要的包下载下来,再传上服务器安装,这一步省略,可以参照网上的教程。

一切都很顺利,很快python3.6和patroni的各种包都安装完成,在我满怀信心启动的时候遭重了:

File "/opt/patroni/patroni/init.py", line 173, in main
return patroni_main()
File "/opt/patroni/patroni/init.py", line 140, in patroni_main
patroni = Patroni()
File "/opt/patroni/patroni/init.py", line 25, in init
self.dcs = get_dcs(self.config)
File "/opt/patroni/patroni/dcs/init.py", line 74, in get_dcs
Available implementations: """ + ', '.join(available_implementations))
patroni.exceptions.PatroniException: 'Can not find suitable configuration of distributed configuration store\nAvailable implementations: '

启动报错,翻日志看看:

INFO: Failed to import patroni.dcs.consul
INFO: Failed to import patroni.dcs.etcd
INFO: Failed to import patroni.dcs.etcd3
INFO: Failed to import patroni.dcs.exhibitor
INFO: Failed to import patroni.dcs.raft
INFO: Failed to import patroni.dcs.zookeeper

看起来是没有找到对应的dcs库,但是不应该啊,我已经装了python-etcd

[root@localhost data]# pip3 freeze
click @ file:///home/package/pippa/patroni/click-8.0.4-py3-none-any.whl
dnspython @ file:///home/package/pippa/patroni/dnspython-2.2.1-py3-none-any.whl
importlib-metadata @ file:///home/package/pippa/patroni/importlib_metadata-4.8.3-py3-none-any.whl
patroni @ file:///home/package/pippa/patroni-3.0.1-py3-none-any.whl
prettytable @ file:///home/package/pippa/patroni/prettytable-2.5.0-py3-none-any.whl
psutil @ file:///home/package/pippa/psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
psycopg2-binary @ file:///home/package/pippa/patroni/psycopg2_binary-2.9.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
python-dateutil @ file:///home/package/pippa/patroni/python_dateutil-2.8.2-py2.py3-none-any.whl
python-etcd==0.4.5
PyYAML @ file:///home/package/pippa/patroni/PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
six @ file:///home/package/pippa/patroni/six-1.16.0-py2.py3-none-any.whl
typing-extensions @ file:///home/package/pippa/patroni/typing_extensions-4.1.1-py3-none-any.whl
urllib3 @ file:///home/package/pippa/patroni/urllib3-1.26.15-py2.py3-none-any.whl
wcwidth @ file:///home/package/pippa/patroni/wcwidth-0.2.6-py2.py3-none-any.whl
ydiff==1.2
zipp @ file:///home/package/pippa/patroni/zipp-3.6.0-py3-none-any.whl

看了issue几个类似的问题,都是由于没装对应的dcs导致的,但我明明已经装了,难道是版本不对?于是乎开始重装、换版本、改配置等各种操作,但是都没用。

在被折磨到不行的时候,我突然想到是不是python-etcd这个包本身有问题。于是打开交互式命令行import了一下etcd,结果发现是ssl模块有问题。。。

ImportError: No module named _ssl

但是查看一下,发现已经安装了openssl包了。。

# rpm -qa|grep ssl
openssl-devel-1.0.2k-25.el7_9.x86_64
apr-util-openssl-1.5.2-6.el7.x86_64
openssl-1.0.2k-19.el7.x86_64
openssl-libs-1.0.2k-19.el7.x86_64
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch

可能是环境或者版本问题,不管了,直接下载最新版本openssl包,然后使用指定openssl版本重编译python,注意:

1、Modules/Setup文件中
_socket socketmodule.c

SSL=/usr/local/openssl
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

这几行必须取消注释,路径指定为openssl安装路径

2、python编译命令必须加上ssl模块:
./configure --prefix=/usr/local/python3 --enable-optimizations --with-openssl=/usr/local/openssl
网上的教程一般都是只说其中一个,但我亲测两个缺一不可

编译完成后就可以顺利启动了。启动后记得在leader加上复制槽,不然会有replication slot "xxx" does not exist的报错,复制槽名称与节点名称(即patroni.yml中的name)一致,有几个节点就要加几条,不然主从复制会报错

--添加复制槽
select * from pg_create_physical_replication_slot('xxx');
--查看复制槽
select * from pg_replication_slots;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值