龙空技术网

硬核数据库postgres使用pgpool完成主备自动切换,快来盘它

MagicAI 279

前言:

此刻同学们对“数据库主备切换”可能比较看重,各位老铁们都需要剖析一些“数据库主备切换”的相关知识。那么小编也在网上汇集了一些对于“数据库主备切换””的相关资讯,希望同学们能喜欢,各位老铁们快快来了解一下吧!

小吴总的鸡汤

postgres作为年度最佳数据库在国内得不到大范围使用真的太可惜了!干巴巴的,麻麻赖赖的,一点都不圆润,怎么办?盘他!

书接上回,为了解决postgres的高可用部署问题,需解决以下几个主要问题

1.主节点和从节点的读写分离2.主节点和从节点的自动主从切换3.主节点和从节点的负载均衡

pgpool因为同时具备连接池,负载平衡,主从节点读写分离,可自动主从切换的特性,被官方推荐为postgres的官方高可用方案,我们在这里推荐使用主备模式。

pgpool各模式对比图

接下来我们将在之前的从服务器进行pgpool的单节点部署。

192.168.1.102(从)
从节点下载及安装pgpool(192.168.1.102)
tar xzvf pgpool-II-4.0.4.tar.gz -C /usr/local/./configure --with-pgsql=/usr/pgsql-9.6/ --prefix=/usr/local/pgpool2#如果出现error: libpq is not installed or libpq is old则执行下句yum install postgresql-devel#编译及安装make && make install#复制配置文件模版cd /usr/local/pgpool2/etccp pgpool.conf.sample pgpool.confcp pool_hba.conf.sample pool_hba.confcp pcp.conf.sample pcp.confmkdir /usr/local/pgpool2/run
配置节点间的免密登录(192.168.1.101/102)
#在每个节点执行su postgresssh-keygen -t rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys#复制公钥到从节点(192.168.1.101)scp ~/.ssh/authorized_keys postgres@192.168.1.102:~/.ssh/#测试免密登录ssh postgres@192.168.1.102#复制公钥到主节点(192.168.1.102)scp ~/.ssh/authorized_keys postgres@192.168.1.101:~/.ssh/#测试免密登录ssh postgres@192.168.1.101
配置pcp.conf(192.168.1.102)
cd /usr/local/pgpool2./bin/pg_md5 123456#复制生成的md5值到pcp文件vi pcp.confpostgres:e10adc3949ba59abbe56e057f20f883e
生成pool_passwd密码认证文件(192.168.1.102)
#使用pg_md5命令生成认证文件/usr/local/pgpool2/bin/pg_md5 -m -u postgres password#查看生成的文件cat etc/pool_passwdpostgres:md5a3556571e93b0d20722ba62be61e8c2d
设置允许远程访问(192.168.1.102)
vi pool_hba.conf追加host all all 0.0.0.0/0 md5
配置主备模式的主要修改点(192.168.1.102)
vi pgpool.conf#允许远程访问listen_addresses = '*'#访问端口port = 9999#主节点配置backend_hostname0 = '192.168.1.101'backend_port0 = 5432backend_weight0 = 1backend_data_directory0 = '/var/lib/pgsql/9.6/data/'backend_flag0 = 'ALLOW_TO_FAILOVER'#从节点配置backend_hostname1 = '192.168.1.102'backend_port1 = 5432backend_weight1 = 1backend_data_directory1 = '/var/lib/pgsql/9.6/data/'backend_flag1 = 'ALLOW_TO_FAILOVER'#开启访问控制enable_pool_hba = onpool_passwd = 'pool_passwd'# 设置连接池的连接数num_init_children = 32# 连接池最大数量,实际允许访问的最大连接数为num_init_children*max_poolmax_pool = 4# pid文件路径pid_file_name = '/usr/local/pgpool2/run/pgpool.pid'#开启负载均衡load_balance_mode = on#开启主备模式master_slave_mode = on#使用流复制模式master_slave_sub_mode = 'stream'#流复制校验设置sr_check_period = 10sr_check_user = 'replica'sr_check_password = 'replica'sr_check_database = 'postgres'delay_threshold = 0#健康检查校验设置health_check_period = 0health_check_timeout = 20health_check_user = 'replica'health_check_password = 'replica'health_check_database = 'postgres'health_check_max_retries = 0health_check_retry_delay = 1connect_timeout = 10000#主节点宕机时主备切换failover_command = '/usr/local/pgpool2/run/failover_stream.sh %H'
启动pgpool及主备验证(192.168.1.102)
cd /usr/local/pgpool2/#启动pgpool开启debug模式并将日志打印到pgpool.log,生产上不建议./bin/pgpool -n -d > pgpool.log 2>&1 &#启动pgpool并将日志打印到pgpool.log,正常模式./bin/pgpool -n > pgpool.log 2>&1 &#停止pgpool./bin/pgpool -m f stop#查看节点状况,验证是否一主(primary)和一从(standby)以及状态是否uppsql -p 9999show pool_nodes;

节点状况

测试主备切换

#当前主节点(192.168.1.101)停止数据库,模拟宕机systemctl stop postgresql-9.6#在此查看节点状态,发现原来的从节点变成了primary主节点,原来的主节点状态为downshow pool_nodes

发生了备节点切换为主节点

#修改recovery.confcd /var/lib/pgsql/9.6/data/vi recovery.confstandby_mode = 'on'primary_conninfo = 'host=192.168.1.102 port=5432 user=replica password=replica'trigger_file = 'trigger_file0'recovery_target_timeline = 'latest'#防止主节点积压,缓存未处理的日志restore_command = 'cp %p ../archive/%f'#再次启动原主节点(192.168.1.101)systemctl start postgresql-9.6#使用pcp命令动态添加节点(192.168.1.101)为从节点cd /usr/local/pgpool2/./bin/pcp_attach_node 0#再次查看状态,原主备节点发生了交换psql -p 9999show pool_nodes;

主备发生了切换

达人的回顾总结

在上一篇文章中我们已经实现了postgres的主备集群搭建,有需要的可以进行快速回顾。下一篇我们将涉及pgpool本身集群的搭建

硬核数据库postgres的主备集群搭建,快来盘它

标签: #数据库主备切换