首页 文章 精选 留言 我的

精选列表

搜索[博客搭建],共10000篇文章
优秀的个人博客,低调大师

RocketMQ双Master集群搭建

机器准备 2台独立的linux主机, 内网IP分别为: 172.31.175.142/143 172.31.175.142 NameServer1、 Broker Master1 172.31.175.143 NameServer2、 Broker Master2 安装配置 安装 下载二进制版本解压即可 wget http://mirrors.hust.edu.cn/apache/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip unzip rocketmq-all-4.3.0-bin-release.zip -d ~ cd ~ mv rocketmq-all-4.3.0-bin-release rocketmq 启动NameServer 命令的std输出使用默认的运行日志 mkdir -p ~/logs/rocketmqlogs nohup sh bin/mqnamesrv >~/logs/rocketmqlogs/namesrv.log 2>&1 & tail -100f ~/logs/rocketmqlogs/namesrv.log 配置/启动Broker 1) master1 进入172.31.175.142,编辑预制的配置文件conf/2m-noslave/broker-a.properties, 追加namesrv地址 namesrvAddr=172.31.175.142:9876;172.31.175.143:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH 启动broker, 指定配置文件broker-a.properties nohup sh bin/mqbroker -c ~/rocketmq/conf/2m-noslave/broker-a.properties >~/logs/rocketmqlogs/broker.log 2>&1 & tail -100f ~/logs/rocketmqlogs/broker.log 2) master2 进入172.31.175.143,编辑预制的配置文件conf/2m-noslave/broker-b.properties, 追加namesrv地址 namesrvAddr=172.31.175.142:9876;172.31.175.143:9876 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH 启动broker, 指定配置文件broker-b.properties nohup sh bin/mqbroker -c ~/rocketmq/conf/2m-noslave/broker-b.properties >~/logs/rocketmqlogs/broker.log 2>&1 & tail -100f ~/logs/rocketmqlogs/broker.log 查看集群状态 sh bin/mqadmin clusterlist -n 172.31.175.142:9876;172.31.175.143:9876 双master集群信息如下 #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE DefaultCluster broker-a 0 172.31.175.142:10911 V4_3_0 0.00(0,0ms) 0.00(0,0ms) 0 427546.59 -1.0000 DefaultCluster broker-b 0 172.31.175.143:10911 V4_3_0 0.00(0,0ms) 0.00(0,0ms) 0 427546.59 -1.0000

优秀的个人博客,低调大师

kubernetes搭建mysql集群服务

参考链接:https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/ 一、创建ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: mysql labels: app: mysql data: master.cnf: | # Apply this config only on the master. [mysqld] log-bin slave.cnf: | # Apply this config only on slaves. [mysqld] super-read-only 在pod初始化时, pod会根据自身标识(master或slave)从configmap中应用指定配置. 被应用配置将覆盖my.cnf中的配置. 目的是使master向slave提供复制日志服务,并设置slave拒绝非复制写入. 二、创建headless service # Headless service for stable DNS entries of StatefulSet members. apiVersion: v1 kind: Service metadata: name: mysql labels: app: mysql spec: ports: - name: mysql port: 3306 clusterIP: None selector: app: mysql 三、创建StatefulSet apiVersion: apps/v1beta1 apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: selector: matchLabels: app: mysql serviceName: mysql replicas: 3 template: metadata: labels: app: mysql spec: initContainers: - name: init-mysql image: mysql:5.7 command: - bash - "-c" - | set -ex # Generate mysql server-id from pod ordinal index. [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 ordinal=${BASH_REMATCH[1]} echo [mysqld] > /mnt/conf.d/server-id.cnf # Add an offset to avoid reserved server-id=0 value. echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf # Copy appropriate conf.d files from config-map to emptyDir. if [[ $ordinal -eq 0 ]]; then cp /mnt/config-map/master.cnf /mnt/conf.d/ else cp /mnt/config-map/slave.cnf /mnt/conf.d/ fi volumeMounts: - name: conf mountPath: /mnt/conf.d - name: config-map mountPath: /mnt/config-map - name: clone-mysql image: gcr.io/google-samples/xtrabackup:1.0 command: - bash - "-c" - | set -ex # Skip the clone if data already exists. [[ -d /var/lib/mysql/mysql ]] && exit 0 # Skip the clone on master (ordinal index 0). [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 ordinal=${BASH_REMATCH[1]} [[ $ordinal -eq 0 ]] && exit 0 # Clone data from previous peer. ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql # Prepare the backup. xtrabackup --prepare --target-dir=/var/lib/mysql volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql - name: conf mountPath: /etc/mysql/conf.d containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "123", - name: MYSQL_REPLICATION_USER value: "sync", - name: MYSQL_REPLICATION_PASSWORD value: "sync", ports: - name: mysql containerPort: 3306 volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql - name: conf mountPath: /etc/mysql/conf.d resources: requests: cpu: 500m memory: 1Gi livenessProbe: exec: command: ["mysqladmin", "-uroot", "-p123", "ping"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 readinessProbe: exec: # Check we can execute queries over TCP (skip-networking is off). command: ["mysql", "-h", "127.0.0.1", "-uroot", "-p123", "-e", "SELECT 1"] initialDelaySeconds: 5 periodSeconds: 2 timeoutSeconds: 1 - name: xtrabackup image: gcr.io/google-samples/xtrabackup:1.0 ports: - name: xtrabackup containerPort: 3307 command: - bash - "-c" - | set -ex cd /var/lib/mysql # Determine binlog position of cloned data, if any. if [[ -f xtrabackup_slave_info ]]; then # XtraBackup already generated a partial "CHANGE MASTER TO" query # because we're cloning from an existing slave. mv xtrabackup_slave_info change_master_to.sql.in # Ignore xtrabackup_binlog_info in this case (it's useless). rm -f xtrabackup_binlog_info elif [[ -f xtrabackup_binlog_info ]]; then # We're cloning directly from master. Parse binlog position. [[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1 rm xtrabackup_binlog_info echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\ MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in fi # Check if we need to complete a clone by starting replication. if [[ -f change_master_to.sql.in ]]; then echo "Waiting for mysqld to be ready (accepting connections)" until mysql -h 127.0.0.1 -uroot -p123 -e "SELECT 1"; do sleep 1; done echo "Initializing replication from clone position" # In case of container restart, attempt this at-most-once. mv change_master_to.sql.in change_master_to.sql.orig mysql -h 127.0.0.1 -uroot -p123 <<EOF $(<change_master_to.sql.orig), MASTER_HOST='mysql-0.mysql', MASTER_USER='root', MASTER_PASSWORD='123', MASTER_CONNECT_RETRY=10; START SLAVE; EOF fi # Start a server to send backups when requested by peers. exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \ "xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=root --password=123" volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql - name: conf mountPath: /etc/mysql/conf.d resources: requests: cpu: 100m memory: 100Mi volumes: - name: conf emptyDir: {} - name: config-map configMap: name: mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi 这里使用了两个初始化容器. 第一个初始化容器init-mysql作用包括根据pod名称后缀生成server_id文件, 从configmap中获取指定配置. 这里默认StatefulSet控制的第一个pod即mysql-0为master, 其余为slave. 第二个clone-mysql使用开源工具xtrabackup, 用于当前slave从前一个slave复制数据, 当有新的作为slave的pod加入集群时, 这个pod会从上一个pod(序号小1)的非master的pod复制数据, 因为新pod加入时, 我们必须假定master中的数据是不为空的, 需要进行一次复制操作, 这样在扩容时会避免数据丢失,而从前一个pod复制数据是因为StatefulSet按顺序启动, 当前一个pod为ready时才启动后一个pod的机制而来. 当init容器执行完成后, 常规容器开始启动并运行. mysql Pods由运行mysqld服务的mysql容器和充当SideCar的xtrabackup容器组成(挎斗模式解析请见http://www.mamicode.com/info-detail-2149700.html)。 四、创建用于访问Service # Client service for connecting to any MySQL instance for reads. # For writes, you must instead connect to the master: mysql-0.mysql. apiVersion: v1 kind: Service metadata: name: mysql-access labels: app: mysql spec: ports: - name: mysql port: 3306 selector: app: mysql 五、查看 root@node4:~# kubectl -n admin-d2069c get pvc,pv,statefulset,pod,service,configmap |grep mysql pvc/storage-mysql-0 Bound pvc-bb591208-c2f4-11e8-b599-0050568eef9f 512M RWX managed-nfs-storage 12m pvc/storage-mysql-1 Bound pvc-c4ada169-c2f4-11e8-b599-0050568eef9f 512M RWX managed-nfs-storage 12m pvc/storage-mysql-2 Bound pvc-ce20ad71-c2f4-11e8-b599-0050568eef9f 512M RWX managed-nfs-storage 11m pv/pvc-bb591208-c2f4-11e8-b599-0050568eef9f 512M RWX Delete Bound admin-d2069c/storage-mysql-0 managed-nfs-storage 12m pv/pvc-c4ada169-c2f4-11e8-b599-0050568eef9f 512M RWX Delete Bound admin-d2069c/storage-mysql-1 managed-nfs-storage 12m pv/pvc-ce20ad71-c2f4-11e8-b599-0050568eef9f 512M RWX Delete Bound admin-d2069c/storage-mysql-2 managed-nfs-storage 11m statefulsets/mysql 3 3 12m po/mysql-0 2/2 Running 0 12m po/mysql-1 2/2 Running 0 12m po/mysql-2 2/2 Running 0 11m svc/mysql ClusterIP None <none> 3306/TCP 12m svc/mysql-access ClusterIP 10.68.8.223 <none> 3306/TCP 12m cm/mysql 2 12m 六、测试集群 登录mysql-0, 执行 kubectl -n admin-d2069c exec -it mysql-0 /bin/bash 进入mysql-0后连接mysql: mysql -p123 创建database, 并以同样方式登录mysql-1或mysql-2, 发现其下已经将新创建的database同步则为验证成功.

优秀的个人博客,低调大师

Docker Registry私有仓库搭建

Docker Registry 介绍 Docker Registry,它是所有仓库(包括共有和私有)以及工作流的中央Registry。 私有仓库和共有仓库类似,不同之处在于前者不会在搜索结果中显示,也没有访问它的权限。只有用户设置为合作者才能访问私有仓库。 下载镜像并运行 假设主机ip为192.168.1.100 # 下载镜像 [root@localhost ~]# docker pull registry # 启动Docker Registry容器 [root@localhost ~]# docker run -p 15000:5000 -v registry:/var/lib/registry --restart=always --name docker-registry -d registry # 查看Docker Registry进程 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d67e675391bf registry "/entrypoint.sh /e..." 5 weeks ago Up 2 weeks 0.0.0.0:25000->5000/tcp docker-registry 配置客户端Insecure Registry # 编辑文件 vi /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"] , "insecure-registries":["192.168.1.100:25000"] } #重启docker服务 systemctl daemon-reload systemctl restart docker 说明: registry-mirrors 为docker镜像库,配置了国内镜像之后,下载速度会快不少 insecure-registries 为不安全的镜像,我们的Registry配置在这里,push或者pull镜像的机器都需要配置 将Docker镜像推到Registry中 # 给本地镜像打Tag [root@localhost ~]# docker tag centos:latest 192.168.1.100:25000/centos:latest # 推到Registry服务器中 [root@localhost ~]# docker push 192.168.1.100:25000/centos:latest 从Docker Registry下载镜像 [root@localhost ~]docker pull 192.168.1.100:25000/centos:latest 配置Docker Registry管理界面 Docker官方只提供了REST API,并没有给我们一个界面。 可以使用Portus来管理私有仓库, 同时可以使用简单的UI管理工具, Docker提供私有库“hyper/docker-registry-web”, 下载该镜像就可以使用了。 参考 https://hub.docker.com/r/hyper/docker-registry-web/ docker run -d \ -p 8080:8080 \ --name registry-web \ --link docker-registry \ -e REGISTRY_URL=http://docker-registry:5000/v2 \ -e REGISTRY_NAME=localhost:25000 \ hyper/docker-registry-web 访问 http://192.168.1.100:8080 2.png 配置Docker Registry签名证书(待续)

优秀的个人博客,低调大师

使用rancher 搭建docker集群

1.安装docker并配置工作目录 安装docker 以17.03版本为例 [root@Ieat4 ~]# curl https://releases.rancher.com/install-docker/17.03.sh | sh 测试安装是否成功 [root@Ieat4 ~]# sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 添加"youuser"用户到docker组 [root@Ieat4 ~]# sudo usermod -aG docker youuser 添加之后该用户使用docker命令可以不加sudo 设置docker服务开机启动 [root@Ieat4 ~]# systemctl enable docker.service 设置docker挂载盘 通常安装完之后docker的数据目录都在/var/lib/docker 文件夹下面,一般这个都在我们的系统盘下面,系统盘一般比较小而且一旦重装系统很可能面临数据丢失。所以要docker的工作目录映射到我们的数据盘下面,如下: 映射磁盘到目录 假如要映射到/data目录 如果映射到已有目录就跳过下面步骤 新建/data目录 [root@Ieat4 ~]# mkdir /data 假设我们有一块新磁盘尚未映射,下面查看所有磁盘 [root@Ieat4 ~]# fdisk -l 假设查看到/dev/sdb没有被映射,下面我们映射一下 [root@Ieat4 ~]# mount /dev/sdb /data 如果新磁盘有读写保护: mount: /dev/sdb 写保护,将以只读方式挂载 mount: 文件系统类型错误、选项错误、/dev/sdb 上有坏超级块、 缺少代码页或助手程序,或其他错误 有些情况下在 syslog 中可以找到一些有用信息- 请尝试 dmesg | tail 这样的命令看看。 我们先格式化 [root@Ieat4 ~]# mkfs.ext4 /dev/sdb 下面是结果 mke2fs 1.42.9 (28-Dec-2013) /dev/sdb is entire device, not just one partition! 无论如何也要继续? (y,n) y 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 244154368 inodes, 1953234944 blocks 97661747 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=4102029312 59608 block groups 32768 blocks per group, 32768 fragments per group 4096 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544, 1934917632 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 接着再挂载 [root@Ieat4 ~]# mount /dev/sdb /data 查看是否挂载成功,发现已经成功,/data目录有7.3T的可用空间 [root@Ieat4 ~]# df -h /data 文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb 7.3T 23G 6.9T 1% /data 设置开机自动挂载目录,否则重启主机之后,磁盘未自动挂载导致docker服务运行异常,通过往/etc/fstab中追加一条记录来实现 [root@Ieat4 ~]# echo '/dev/sdb /data ext4 defaults 0 0' >> /etc/fstab 查看一下是否写入成功 [root@Ieat4 ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Thu Sep 29 14:00:46 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 1 1 UUID=0a7a28d0-04ad-4ed2-912c-bf31fc53b13d /boot xfs defaults 1 2 /dev/mapper/centos-home /home xfs defaults 1 2 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb /data ext4 defaults 0 0 映射docker工作目录 停止docker服务 [root@Ieat4 ~]# service docker stop 将默认docker工作目录移动到/data下,不要使用cp,移动后/var/lib/docker目录应该不存在了才对 [root@Ieat4 ~]# sudo mv /var/lib/docker /data 结果我们要把docker工作目录放在/data/docker下面 [root@Ieat4 ~]# ls /data/docker containers image network overlay plugins swarm tmp trust volumes 建立软连接,文件夹后面不要加 “/”,这样/var/lib/docker即为/data/docker的快捷方式,往/var/lib/docker写的话,实际写入了/data/docker目录 [root@Ieat4 ~]# ln -s /data/docker /var/lib/docker 查看软连接是否成功 [root@Ieat4 ~]# ls -la /var/lib/docker lrwxrwxrwx 1 root root 12 7月 14 17:20 /var/lib/docker -> /data/docker 启动docker sudo service docker start 查看是否正常工作 [root@Ieat4 ~]# sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2.安装rancher-server 注意将所有主机的主机名设置好,一定不要用localhost、127.0.0.1等,以免引起集群网络通讯不通的问题 挑选一台主机192.168.0.101安装,在这里选择rancher-server的1.6版本 [root@Ieat4 ~]# sudo docker run --name rancher-server -d --restart=unless-stopped -p 18180:8080 rancher/server 等待一两分钟后,浏览器访问一下该主机的18180端口,即看到安装成功,进入界面后,按照提示添加主机即可 3.添加主机 比如要添加:192.168.0.106 设置rancher-server ip地址,设置为其他主机可以访问的ip 0.png 点击添加主机 1.png 选择Custom -> 输入要添加主机的ip -> copy docker 命令 2.png 在要添加的主机上运行copy的docker命令 sudo docker run -e CATTLE_AGENT_IP="192.168.0.106" --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.10 http://192.168.0.101:18180/v1/scripts/78D7F7E9398F93E7A5B6:1514678400000:xCO6dhSSWPpVF3bGQXWWVZrvgvE 返回主界面即可看到添加成功

优秀的个人博客,低调大师

Docker + MySQL 主从环境搭建

环境说明 Docker Ubuntu/CentOS MySQL v8.0.11 1. 配置my.cnf my.cnf(部分老版本可能是my.ini)是MySQL核心配置文件。首先,在任意挂载目录下新建*.cnf文件(这里的*代表可以是任意的文件名称)。如果你的mysql是下载安装的,请找到my.cnf并参考如下配置: [mysqld] log-bin=mysql-bin //启用二进制日志 server_id=xxx //xxx代表唯一ID,默认是1。特别注意,当前版本这里是server_id而不是server-id,有些版本可能会不一样 实战示例 在/root/mysql/conf/master/新建master.cnf,配置如下: [mysqld] log-bin=mysql-bin server_id=100 在/root/mysql/conf/slave/新建slave.cnf,添加如下: [mysqld] log-bin=mysql-bin server_id=200 2. 运行MySQL 2.1 master(主库) docker run --name mysql-master -v /root/mysql/conf/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 2.2 slave(从库) docker run --name mysql-slave -v /root/mysql/conf/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 注意,当前mysql版本是8.0.11,不同的版本之间可能存在差别,docker可以拉取指定版本的mysql Image,命令:docker pull mysql:8.0.11 3. 新建账号 3.1 在 master 上创建复制账号 // 1.进入主库容器 docker exec -it mysql-master bash // 2.登录mysql mysql -uroot -proot // 3.rep表示复制账号;<salve_ip>可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码 CREATE USER 'rep'@'<salve_ip>' IDENTIFIED WITH mysql_native_password BY 'reppassword'; GRANT REPLICATION SLAVE ON *.* TO 'rep'@'<salve_ip>'; 3.2 获取并记录File和Position信息 执行show master status;即可 master status 4. 配置连接 配置 slave 连接 master // 1.进入从库容器 docker exec -it mysql-slave bash // 2.登录mysql mysql -uroot -proot // 3.配置主库认证信息,<File>和<Position>同上 CHANGE MASTER TO MASTER_HOST='<master_ip>',MASTER_PORT=10000,MASTER_USER='rep',MASTER_PASSWORD='reppassword',MASTER_LOG_FILE='<File>',MASTER_LOG_POS=<Position>; 5. 开启同步 开启同步 在 slave 上启动线程:start slave; 查看状态 在 slave 上执行命令:show slave status\G; 查看复制状态 6. 相关命令 设置从库只读:set global read_only=1;。1表示只读,0是读写,但对拥有super权限的账号是不生效的,所以在授权账号的时候应尽量避免添加super权限 查看读写情况:show global variables like "%read_only%"; 查看server_id:show variables like '%server_id%'; 7. 踩坑记录 执行show slave status\G;,发现从库并没有连接上主库,留意到错误信息大致为:“主从库server_id不能一致”,随即查看新增的master.cnf和slave.cnf,但并没有发现问题,随即用docker logs mysql-master查看启动日志,有一行警告大概是这样的:mysql: [Warning] World-writable config file '/etc/mysql/conf.d/master.cnf' is ignored.,这说明配置文件并没有挂载成功,搜索后得知当文件权限全局可写时,mysql会担心这种文件被其他用户恶意修改,所以会忽略掉这个配置文件,修改文件权限chmod 644 *.cnf后,再将以上流程重新跑了一遍,问题没有复现。

优秀的个人博客,低调大师

Docker + PostgreSQL 主从环境搭建

环境说明 Docker Ubuntu/CentOS PostgreSQL v10.1 1. 运行PostgreSQL 1.1 主库 docker run --name pgsmaster -p 5500:5432 -e POSTGRES_PASSWORD=pgsmaster -v $(pwd)/pgsmaster:/var/lib/postgresql/data -d postgres 1.2 从库 docker run --name pgsslave -p 5501:5432 -e POSTGRES_PASSWORD=pgsslave -v $(pwd)/pgsslave:/var/lib/postgresql/data -d postgres 进入以上主、从库对应的实际挂载目录执行下面的操作 2. 配置master(主库) 2.1 编辑pg_hba.conf,在最下面添加如下: // replication_username: 复制账号; slave_ip: 从库所在的服务器ip host replication <replication_username> <slave_ip>/32 md5 2.2 编辑postgresql.conf(亲测,非必须),更改如下: synchronous_standby_names = '*' 2.3 进入容器,登录PostgreSQL,创建复制账号并验证: # 1.进入容器 docker exec -it pgsmaster bash # 2.连接PostgreSQL psql -U postgres # 3.创建用户 set synchronous_commit =off; // replication_username: 对应上面设置的复制账号; replication_username_password: 认证密码 create role <replication_username> login replication encrypted password '<replication_username_password>'; # 4.验证用户 \du 3. 配置Slave(从库) 3.1 编辑postgresql.conf(亲测,非必须),更改如下: hot_standby_feedback = on 3.2 新建recovery.conf,添加如下内容: standby_mode = 'on' // replication_username: 复制账号(同主库); master_ip: 主库所在的服务器ip; master_port: 主库端口; replication_username_password: 认证密码 primary_conninfo = 'host=<master_ip> port=<master_port> user=<replication_username> password=<replication_username_password>' 4. 同步主从库数据及测试 4.1 停止PostgreSQL docker stop pgsmaster docker stop pgsslave 4.2 同步主从库数据(必须) 方法1:rsync // 1.1 已ssh认证,请将$(pwd)更改为实际的路径 rsync -cva --inplace --exclude=*pg_xlog* $(pwd)/pgsmaster/ <slave_ip>:$(pwd)/pgsslave/ // 1.2 无ssh认证,请将$(pwd)更改为实际的路径 rsync -cva --inplace --exclude=*pg_xlog* $(pwd)/pgsmaster/ ssh root@<slave_ip>:$(pwd)/pgsslave/ 方法2:pg_basebackup(自行谷歌) 4.3 先后启动主库、从库服务 docker start pgsmaster docker start pgsslave 4.4 连接测试 // 进入主库容器 docker exec -it pgsmaster bash // 查看复制状态 psql -U postgres -x -c "select * from pg_stat_replication;" 查看复制状态

优秀的个人博客,低调大师

CentOS 7搭建LAMP环境

一、检查环境 1.查看centos版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@localhost ~]# 2.检查是否安装相关应用 检查apache [root@localhost ~]# service httpd status Redirecting to /bin/systemctl status httpd.service Unit httpd.service could not be found. [root@localhost ~]# 没找到httpd.service说明没有安装apache 检查mysql [root@localhost ~]# service mysqld status Redirecting to /bin/systemctl status mysqld.service Unit mysqld.service could not be found. [root@localhost ~]# 同上,没有安装mysql 二、安装apache [root@localhost ~]# yum -y install httpd 安装成功返回如下: 图片.png 安装apache扩展 [root@localhost ~]# yum -y install httpd-manual.noarch mod_ssl 安装成功返回如下: 图片.png 三、安装php [root@localhost ~]# yum -y install php 安装成功返回如下: 图片.png 安装php-fpm [root@localhost ~]# yum -y install php-fpm 安装成功返回如下: 图片.png 安装php扩展 [root@localhost ~]# yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-devel 图片.png 安装成功返回如下: 图片.png 四、安装mysql [root@localhost ~]# yum -y install mysql 安装成功返回如下: 可以看到CentOS7安装mysql时候安装的是 mariadb,这是因为mysql被Sun公司收购了,Sun公司又被Oracle收购了,成功了商业的应用,然后mysql停止开源,所以mysql之父又开发了mariadb数据库,mariadb数据库兼容了mysql所有的内容,总之就是换了个名字,和之前mysql使用没有太大区别。 安装mysql-server 图片.png 出错了不要紧,原因上面已经说明了,然后将mysql换成mariadb就好了,下面继续安装: [root@localhost ~]# yum -y install mariadb-server 安装成功返回如下: 图片.png 安装php-mysql [root@localhost ~]# yum -y install php-mysql 安装成功返回如下: 图片.png 安装mysql扩展 [root@localhost ~]# yum -y install mysql-connector-odbc libdbi-dbd-mysql 安装成功返回如下: 图片.png [root@localhost ~]# yum -y install mariadb-devel 图片.png

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册