ssdb双主高可用加权限密码验证带自动健康检查(python密码链接ssdb集群)

主体思路:利用ssdb双主模式,用脚本实时检测ssdb健康状态,通过修改脚本自动配置文件来控制项目连接的ssdb实例,同时用一个中间shell脚本来实现crontab每秒执行一次脚本

ssdb主1配置

# ssdb工作文件夹
work_dir = /ssdb1
# ssdb的pid文件夹
pidfile = /ssdb1/ssdb.pid
# 服务配置
server:
    # 绑定ip
	ip: host1
	# 绑定端口
	port: 8888
	# 设置密码(密码要长和复杂,否则报错密码太weak,我设置的96位)
	auth:YourPassWord

# 集群配置
replication:
	binlog: yes
	capacity: 900000000
	sync_speed: -1
	#多主就多个slaveof
	slaveof:
        配置的密码
		auth: YourPassWord
		id: ssdb1
		type: mirror
		# 对方主节点的ip
		host: host2
		# 对方主节点的端口
		port: 8888
# 日志配置
logger:
	level: error
	output: /logs/ssdb1.log
	rotate:
		size: 1000000000
# db配置
leveldb:
	cache_size: 2048
	block_size: 32
	write_buffer_size: 64
	compaction_speed: 1000
	compression: yes

ssdb主2配置

# ssdb工作文件夹
work_dir = /ssdb2
# ssdb的pid文件夹
pidfile = /ssdb2/ssdb.pid
# 服务配置
server:
    # 绑定ip
	ip: host2
	# 绑定端口
	port: 8889
	# 设置密码(密码要长和复杂,否则报错密码太weak,我设置的96位)
	auth:YourPassWord

# 集群配置
replication:
	binlog: yes
	capacity: 900000000
	sync_speed: -1
	#多主就多个slaveof
	slaveof:
        配置的密码
		auth: YourPassWord
		id: ssdb2
		type: mirror
		# 对方主节点的ip
		host: host1
		# 对方主节点的端口
		port: 8888
# 日志配置
logger:
	level: error
	output: /logs/ssdb2.log
	rotate:
		size: 1000000000
# db配置
leveldb:
	cache_size: 2048
	block_size: 32
	write_buffer_size: 64
	compaction_speed: 1000
	compression: yes

自动检测ssdb存活shell脚本(./check_ssdb.sh)

#!/bin/bash
# 存储存活的ssdb主机ip的文件
SSDB_HOST="/config/ssdb_host"
# 主节点1
MASTER_HOST=host1
# 主节点2
SLAVE_HOST=host2
MASTER_PORT="8888"
# 使用redis-cli PING 方式来检测ssdb存活
MASTER=`redis-cli -h $MASTER_HOST -p $MASTER_PORT "PING"`

if [ $MASTER == "PONG" ]
then
    if [ `cat $SSDB_HOST` != $MASTER_HOST ]
    then
        echo $(date "+%Y年%m月%d日%H:%M:%S:切换回主:$MASTER_HOST")
        echo $MASTER_HOST > $SSDB_HOST
        # TODO 这里可以加修改存活ssdb活的操作,比如重启项目
    else
        sleep 1
    fi
else
    if [ `cat $SSDB_HOST` == $MASTER_HOST ]
    then
        # 自动检测主节点恢复后自动切回去
        echo $(date "+%Y年%m月%d日%H:%M:%S:切换备用:$SLAVE_HOST")
        echo $SLAVE_HOST > $SSDB_HOST
    else
        sleep 1
    fi

fi

让脚本任务2秒执行检测一次(./crontab.sh)

#!/bin/bash

step=2 #间隔的秒数,不能大于60

for (( i = 0; i < 60; i=(i+step) )); do
    ./check_ssdb.sh >> /logs/check_ssdb.log
    sleep $step
done

exit 0

crontab 定时任务定时执行

# 系统每分钟执行一次crontab.sh,crontab.sh每2秒回执行一次check_ssdb.sh
* * * * * ./crontab.sh

python 密码连接

# 导入ssdb包
from ssdb import SSDB
# ssdb的 host从文件里读取 TODO port也可以这样做
SSDB_HOST = os.popen("cat /config/ssdb_host").read().strip('\n')
# 建立连接
conn = SSDB(host=SSDB_HOST, port=8888)
# 进行权限验证 auth是关键词,YourPassWord 是配置的密码
conn.execute_command("auth YourPassWord")
# 测试一下是否成功
print(conn.set("i", "love u"))
print(conn.get("i"))
ssdb 
更新时间:2020-07-31 19:15:32

本文由 智慧煮粥 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:http://zz.zzhub.cn/archives/ssdbpython
最后更新:2020-07-31 19:15:32

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×